Building Software

The primary interface to the build system is the bitbake command (see the BitBake users manual). BitBake will download and patch files from the internet, so it helps if you are on a well connected machine.

Note that you should issue all BitBake commands from inside of the build/ directory, or you should override TMPDIR in your $OEBASE/build/conf/local.conf to point elsewhere (by default it goes to tmp/ relative to the directory you run bitbake commands in).


BitBake might complain that there is a problem with the setting in /proc/sys/vm/mmap_min_addr, which needs to be set to zero. You can set it by doing the following as root:

# echo 0 > /proc/sys/vm/mmap_min_addr

Note that you can not use a text editor to do this since files in /proc are not real files. Also note that this above change will be lost when you reboot your system. To have the change made automatically when the system boots, some systems provide a /etc/sysctl.conf file. Add the following line to that file:


If your system does not provide the /etc/sysctl.conf mechanism, you can try adding the above echo command line to your /etc/rc.local.

Once BitBake and OpenEmbedded are set up and configured, you can build software and images like this:

$ bitbake 

A recipe name corresponds to a BitBake .bb file. A BitBake file is a logical unit of tasks to be executed. Normally this is a package to be built. Inter-recipe dependencies are obeyed. The recipes are located by BitBake via the BBFILES variable (set in your $OEBASE/build/conf/local/conf), which is a space separated list of .bb files, and does handle wildcards.

To build a single package, bypassing the long parse step (and therefore its dependencies -- use with care):

$ bitbake -b $OEBASE/openembedded/packages/blah/

There are a few groups of special recipes located in subdirectories of the $OEBASE/openembedded/packages/ directory. These groups are:


A collection of meta-packages that depend on real packages to make managing package sets easier.


A collection of usefull meta tasks and recipes that don't fit in a general category.


A collection of image targets that depend on packages that will be installed into an image which can be put on the target system.

Useful Target Recipes

Although BitBake can build individual packages, it is often more useful to build a set of packages and combine them into an image. The following recipe names are commonly used to that effect.



Builds an image, that if used as a root filesystem, will start a static executable that prints hello world then loops infinitely. Can be used to test the Linux boot procedure into user space (init).


Build image contains task-base packages.


Build an image without the X11, gtk+, or qt windowing libraries.


Builds an image with X11.


Builds the Ångström distribution like Koen proposed.


Build image based on the Open Palmtop Integrated Environment (OPIE). OPIE is a completely Open Source based graphical user environment and suite of applications for small form-factor devices, such as PDAs, running Linux.


Build image based on the OPIE and full featured KDE-based PIM (pi-sync, ko/pi, ka/pi, etc).


Build image that is necessary to flash a Sharp SL C3000, Zaurus. It pivots after booting from the NAND and finalizes the install to the HD during the first boot.


A image with task-base plus a couple of editors, nano and vim (why two?), and a mail reader, mutt.


A root image for user-mode-linux. Includes task-base, and parts of opie.


Build a GPE Palmtop Environment based kernel and rootfs. The GPE provides a user interface environment for palmtop/handheld computers running the GNU/Linux or any other UNIX-like operating system.



Build a kernel and core packages for a basic installation. You won't be able to do much more than ssh to the machine if this is all that is installed.


Meta-package for DVB application (DVB = Digital Video Broadcasting).


All of python.


Mata-package for native (on-device) SDK.



Build all OPIE related packages and some more for OPIE based usage.


Basic packages to go with gpe-image.



Builds a static executable that prints hello world then loops infinitely.


Build everything. This takes a long time, a lot of network bandwidth, and a lot of disc space. Can also break your toolchain.


Target to update the "feed" files to reflect the current set of .ipk's that exist in the deploy directory. Commonly used after building some packages individually to update the feed and allow them to be installed via a package manager or the ipkg command line tools.


Builds the appropriate kernel for your device.