Revision 4 as of 2009-07-18 09:17:19

Clear message

The binfmt-misc module in the kernel makes it possible to execute binaries of foreign arches under linux. Qemu uses this fact to enable several architecture specific execution environments in userspace without the need to run a kernel of the target architecture. Sadly arm EABI support is not among them in the 0.10.5 release used in ubuntu today.

A patch for qemu exists at to enable EABI support in qemu-arm. To make use of this feature to build chroots, qemu needs to be build as a static binary. A binary package called qemu-arm-eabi exists in the PPA below that contains such a static binary, automatically enables the binfmt configuration and ships a wrapper script to debootstrap called build-arm-eabi-chroot.

A sanitized version of the mentioned patchset that cleanly applies to qemu-0.10.5 can be found in the source package in the debian directory in case you want to develop it further.

  • Warning /!\ Note that the way the qemu userspace emulation is implemented makes it act like a translation layer for syscalls, the syscalls between ARM and x86 systems do not match 1:1 so you still might see some that are not properly translated by the patches. While the setup below works fine, it should not be trusted for critical work (do not use it to implement a buildd if you plan to rebuild the whole distro for example, its fine for home use to do testbuilds of packages or rolling chroots for creating root filesystems that you want to run on real hardware later on though)

Setting up an ARM chroot on your x86 machine

To use an arm eabi enabled chroot on your i386/amd64 system, add the entry below to /etc/apt/sources.list ...

deb karmic main

Install qemu-arm-eabi ...

sudo apt-get update
sudo apt-get install qemu-arm-eabi

(consider disabling the sources.list entry again after you installed the package, the PPA might contain outer experimental packages you dont want on your system)

And create the chroot with the included debootstrap wrapper script (it takes/requires the same options debootstrap uses)

ogra@osiris:~$ build-arm-eabi-chroot karmic eabi-chroot
[sudo] password for ogra: 
I: Retrieving Release
I: Retrieving Packages


I: Base system installed successfully.
arm-eabi chroot successfully created in eabi-chroot
ogra@osiris:~$ sudo chroot eabi-chroot
root@osiris:/# uname -m

Now you can build/test packages etc, the chroot works like any other x86 chroot on your system as long as you have the qemu-arm-eabi package installed with the advantage that you can make use of all resources your host system provides (CPU speed, RAM, diskspeed etc)