Cross Compiling Qemu on Ubuntu - the multiarch way

This document demonstrates howto cross-build qemu-linaro using multiarch libraries.

Preparing the multiarch chroot

For testing, it is a good idea to have a chroot instread of potentially messing your desktop system

sudo debootstrap --variant=buildd raring /srv/raring
sudo chroot /srv/raring
mount -t proc proc /proc
dpkg --add-architecture armhf 

Set up the /etc/apt/sources.list: (use arch=amd64 if you made and x86_64 chroot)

deb [arch=i386] http://archive.ubuntu.com/ubuntu raring main universe
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports raring main universe
deb-src http://archive.ubuntu.com/ubuntu raring main universe

In /etc/apt/apt.conf.d/10local disable installing recommends:

APT::Install-Recommends "0";
APT::Install-Suggests "0";

Create a /usr/sbin/policy-rc.d file to prevent daemons to start in the chroot

echo "exit 101" > /usr/sbin/policy-rc.d
chmod a+x /usr/sbin/policy-rc.d

Install toolchain and essentials

apt-get update
apt-get install g++-arm-linux-gnueabihf build-essential 
cd /usr/bin
ln -s /usr/share/pkg-config-crosswrapper arm-linux-gnueabihf-pkg-config

Install in build-dependencies for qemu

apt-get build-dep -aarmhf qemu
apt-get install python:i386 python2.7:i386 python2.7-minimal:i386 device-tree-compiled:i386

building a debian package

apt-get source qemu
cd qemu*

Add the following lines to debian/rules

# Cross compiling support
ifneq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
       common_configure_opts  += --cross-prefix=$(DEB_HOST_GNU_TYPE)-
endif

And proceed to build:

unset LANG LANGUAGE
export DEB_BUILD_OPTIONS=parallel=3 #if you have multicore machine
dpkg-buildpackage -d -b -B -aarmhf 2>&1|tee ../qemu.log

building a git snapshot

Pull the sources from git:

$ git://git.qemu.org/qemu.git
$ cd qemu

Build with appropriate configure flags (use make -j3 if on multicore machine):

$ mkdir arm-build
$ cd arm-build
$ ../configure --cross-prefix=arm-linux-gnueabihf- --target-list=arm-softmmu --enable-kvm
$ make
$ sudo make install DESTDIR=/wherever/you/want #replace 

Work in progress

  • qemu packaging changes needed to make it cross-build out of box
  • device-tree-compiler packaging needs multiarch:foreign


CategoryCrossCompile

Platform/DevPlatform/CrossCompile/QemuCrossCompile (last modified 2013-08-23 11:48:42)