«

»

Feb 11 2013

Imprimir esta Entrada

Crear un Sistema GNU/Linux ARM para QEMU

Vamos a crear un sistema GNU/Linux ARM Ubuntu precise para poder ejecutar binarios de armhf o poder osarlo como kit de desarrollo para esta plataforma.

Para comenzar necesitamos crear un sistema de ficheros inicial (root filesystem) y compilar un Kernelcon las herramientas de crosscompiler para arm, lo cual es muy sencillo en un sistema Debian/Ubuntu.

¿Qué haremos?
0.- prerequisitos

sudo apt-get install debootstrap qemu-user-static qemu-system git gcc-arm-linux-gnueabihf

1.- creamos el rootfs
# creamos el fichero de disco duro

fallocate -l 2GiB ubuntu-armhf.ext3
mkfs.ext3 ubuntu-armhf.ext3
# montamos el disco duro
mkdir mnt
sudo mount -o loop ubuntu-armhf.ext3 mnt

# creamos un initial rootfs usando debootstrap

HOSTNAME=ubuntu-armhf sudo debootstrap --variant=minbase --foreign --arch armhf precise ./mnt

# copiamos el fichero binario linkado estáticamente de QEMU dentro del rootfs

sudo cp /usr/bin/qemu-arm-static mnt/usr/bin/

# hacemos chroot dentro del rootfs e iniciamos un shell usando qemu-arm-static

LANG=C sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/sh

# ejecutamos debootstrap second stage desde el chroot:

/debootstrap/debootstrap --second-stage

# creamos el fichero sources.list para apt:

echo "deb http://ports.ubuntu.com precise main restricted universe
deb-src http://ports.ubuntu.com precise main restricted universe" > /etc/apt/sources.list
echo "deb http://ddebs.ubuntu.com precise main restricted universe multiverse" > /etc/apt/sources.list.d/ddebs.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01
# instalamos algunos paquetes fundamentales
apt-get update
apt-get install sudo apt-utils dialog less wget nano net-tools isc-dhcp-client
# creamos un fichero de configuracion para la consola serie
cp /etc/init/tty1.conf /etc/init/ttyAMA0.conf
sed -i "s/tty1/ttyAMA0/" /etc/init/ttyAMA0.conf

# añadimos un usuario

adduser mi_usuario

# añadimos el usuario al grupo sudo

usermod -aG sudo mi_usuario

# salimos del entorno chroot

exit

# desmontamos el rootfs

sudo umount mnt
rmdir mnt

2.- cross compilacion del Kernel
# nos descargamos las fuentes del Kernel

git clone -depth=1 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
mkdir linux-build
cd linux

# creamos un .config basado en la configuración por defecto

make ARCH=arm O=../linux-build vexpress_defconfig

# compiamos el Kernel

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=../linux-build -j`getconf _NPROCESSORS_ONLN` zImage
cd ..

 

3.- arracamos la imagen usando QEMU

qemu-system-arm \
 -M vexpress-a9 -m 1024 \
 -serial stdio -no-reboot \
 -kernel linux-build/arch/arm/boot/zImage \
 -drive file=ubuntu-armhf.ext3,if=sd,cache=writeback \
 --append "rw console=ttyAMA0,38400n8 console=tty root=/dev/mmcblk0"

Enlace permanente a este artículo: http://www.lopst.com/2013/02/11/crear-un-sistema-gnulinux-arm-para-qemu/