You need various components for a full build.

There are also ancilliary tools such as bbl to help install this stuff. Here we cover how to build all these parts.


The page SoftwareBuilding/Menuconfig2 currently contains Chris's notes on how to get menuconfig2 to build.

The quickstart version

Checkout balloonboard svn, make sure you have subversion installed and the emdebian repository in your sources list, and do make:

svn checkout svn://
cd trunk

Note that the file structure checked out of svn relies on a certain number of symbolic links. For that reason, we recommend checking it out using svn on Linux. Using a tool like TortoiseSVN on Windows can lead to the symbolic links becoming short nonsense files, which breaks things.

This process builds things in a build directory at the same level as trunk.

Once built do make dist to install all the generated binaries into a distro directory at the same level as trunk. This copies the relevant sources into place too, and utilies and config files for uploading use the paths in this layout to find files.

This mechanism does not build the vhdl code as that needs the Xilinx Webpack tools (and GUI).

The patches are managed with quilt. See QuiltHowto for details on how that works so you can use it to easily make changes, update patches and check changes back in.

To check code back in you will need svn access on email with an ssh key to get access.


The build system use makefiles. If you need to make changes from the defaults create a Makefile.local to override variables in This makes it easy to tell your copy to use a different kernel, local apt cache, YAFFS version, BUILDROOT version, build-variant etc from the defaults. e.g:

#Makefile for local changes to configuration variables
#Included after default settings
#Set things here to override those


Don't check your version into svn!

Tools and libraries you might need

The build procedure needs various tools and libraries to be present on your system. The makefiles will warn you about some things, and on a Debian system, automatically install the needed packages if you have sudo rights. You need make, glibc headers, bzip2, wget, quilt, module-init-tools, fakeroot, texinfo, bison and flex in addition to the ARM toolchain, see below.

You shouldn't need to manually install anything - it should just be taken care of. But here we detail the steps needed so you can sort out problems.

Manual installation of tools and libraries

apt-get install build-essential bzip2 quilt module-init-tools fakeroot texinfo bison flex wget
apt-get install libncurses5-dev debhelper debootstrap subversion

The symptoms of module-init-tools not being installed are non-intuitive: if building the modules results in a lot of messages complaining about ELF files not being for this architecture, then module-init-tools probably isn't installed.

From rel v0.8 onwards the Balloon software build procedure also needs multistrap, the Emdebian multiple repository boostrap tool. This is not present in the Debian 'lenny' release, so if you're running a 'lenny' machine you'll have to install it manually.

For squeeze or later:

sudo aptitude update
sudo aptitude install multistrap

For lenny: Get the dpkg file from and do

apt-get install libparse-debian-packages-perl
dpkg -i multistrap_2.0.3_all.deb

ARM GCC toolchain

The ARM GCC 4.1 or later toolchain is also required, which is also available from (which is run automatically by make) will check to see if this is presnet and whinge (or on a debian machine try to install it for you). If this fails you might need to install it manually. In principle any cross-toolchain (for arm OABI or EABI, as desired) will work, but we've only ever tried using the emdebian ones. Currently you need and OABI ('arm'/'arm-linux-gnu') toolchain to buid bootloader even if everything else is EABI ('armel'/'arm-linux-gnueabi')

sudo aptitude update
sudo aptitude install g++-4.2-arm-linux-gnueabi
sudo aptitude install gcc-4.1-arm-linux-gnu

The 'arm' architecture is needed for bootldr, and 'armel' is needed for the kernel. The quickstart build will call these as required during the make.

In March 2009 on Debian 'lenny', this installed gcc-4.3-arm-linux-gnu and gcc-4.3-arm-linux-gnueabi.


The current bootloader used is bootldr from It has been quite heavily modified to include YAFFS2 support and FPGA support.

There are currently two branches, the trunk version which works with a modern gcc, and the branch version which only works with gcc2.95. The branch version is the one that has all the latest stuff in it.

Get it from svn with: svn checkout svn://

Make sure you have an arm cross-compiler installed (currently v2.95 is needed).

Build an initial loader with: make

By default it builds the minimalist version for initial JTAG download. To make a full-featured loader edit the file and comment out CONFIG_BALLOON_SMALL=y To make one for balloon2 set CONFIG_ARCH=SA1100 in, then make again

Resulting binaries:


You should not need to do this manually - the build is integrated into the svn makefiles. But here is a description of what goes on, should you wish to play with it.

The easiest way to do this:

svn checkout svn:// 
cd trunk

To do it manually:

svn checkout svn://
mkdir -p build/kernel
cd build/kernel
tar -xvjf linux-
svn checkout svn:// patches
quilt push -a

Assuming that went OK you should be ready to build:

make balloon3_defconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make zImage

Resulting binaries:

Note that, as checked out of svn, the build procedure will make a kernel with an initrd built in. To get rid of it, uncheck the option "Initial RAM filesystem and RAM disk (initramfs/initrd) support" under "General setup" in make menuconfig.


You should not need to do this manually - the build is integrated into the svn makefiles. But here is a description of what goes on, should you wish to play with it.

This is currently built with buildroot. To do it manually:

svn checkout svn://
mkdir -p build/buildroot
cd build/buildroot
tar -xvjf buildroot18662.tar.bz2
svn checkout svn:// patches
quilt push -a

Assuming that went OK you should be ready to build:

make oldconfig

The result is a rootfs in build_arm/root

To get the initrd combined into the kernel you need to either set CONFIG_INITRAMFS_SOURCE to the dir containing your unpacked initrd, or copy a cpio archive of the initrd into usr/initramfs_data.cpio, then remake zImage. (see for more details on how this all works)

Resulting binaries:

debian rootfs

This is made with debootstrap.

debootstrap --verbose --arch arm --foreign  etch --include=udev,pcmciautils,balloon3-config,ntpdate,avahi-daemon,libdaemon0,lib
avahi-common3,libavahi-core4,avahi-autoipd,libnss-mdns,libdbus-1-3,dbus etch-arm-chroot

Then we apply a script rootfs-config to set various things up properly. These are the things which need to be configured in the rootfs in order to boot it on a target. These things are:

The package balloon3-config takes care of 2nd-stage config.

A prototype version is downloadable here:

Resulting Binaries:

Normally this is processed into a full debian rootfs by mounting it over usb and running debootstrap --second stage to produce a fully-functional rootfs:

logic files

These are checked out of svn: svn checkout svn://

You need the xilinx web pack to build the binaries.

Resulting binaries:

Programming utilities

These are curently built in-tree, unlike the kernel, initrd and rootfs - the makefiles will be fully integrated soon. Check them out of svn and build everything:

svn checkout svn://

This builds bflash, (and jflash), audio-off, and playxvsf - which are the various utils needed to program up a Balloon. make install will install them into your system (in /usr/local/bin) if you have sudo access, so that you can use them straight away.

Balloonboard: SoftwareBuilding (last edited 2011-06-24 13:27:52 by NeilWilliams)