1. Qemu/u-boot setup.
Get a recent copy of u-boot sources, build for integrator board.
cd u-boot-2009.01
make integratorcp_config
make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi-
Now we could use qemu to run u-boot binary. ie:
qemu-system-arm -kernel u-boot -net nic -net tap -nographic -serial stdio
Note: we should have -net nic -net tap support, otherwise u-boot will not able to do network traffic.
2. Compile a kernel for IntegratorCP board.
cd linux-2.6
make ARCH=arm integrator_defconfig
tune settings to
fit the IntergratorCP board, Qemu simulates this board with (from
/usr/share/doc/qemu-xxx):
Use the executable 'qemu-system-arm' to simulate a ARM machine. The ARM Integrator/CP board is emulated with the following devices:
* - ARM926E, ARM1026E, ARM946E, ARM1136 or Cortex-A8 CPU
* - Two PL011
UARTs
* - SMC 91c111 Ethernet adapter
* - PL110 LCD controller
* -
PL050 KMI with PS/2 keyboard and mouse.
* - PL181 MultiMedia Card Interface
with SD card.
Note: ARM926E is an ARMv5te architecture.
make ARCH=arm menuconfig
make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi- -j3
make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi- uImage
3. Qemu, u-boot, and kernel together.
copy our uImage to tftp server, configure an tftp server first if you don't have one.
cp arch/arm/boot/uImage /tftpboot/uImage
/etc/init.d/in.tftpd start
run qemu with u-boot
qemu-system-arm -kernel ~/build/u-boot/u-boot-2009.01/u-boot -net nic -net tap -nographic -serial stdio
and then under u-boot prompt:
Integrator-CP # setenv ipaddr 10.0.0.21 # board ip address
Integrator-CP #
setenv server 10.0.0.207 # tftp server ipaddress
Integrator-CP # setenv
bootargs 'root=/dev/nfs rw nfsroot=10.0.0.207:/exports/nfs/diskless/gentoo-arm
ip=dhcp console=ttyAMA0'
Integrator-CP # tftp 400000 uImage
Integrator-CP
# bootm 400000
Note 1: I'm using nfs-root/diskless system, to use this, you have to configure a nfs server first, the corresponding /etc/exports file should be something like:
# /etc/exports: NFS file systems being exported. See exports(5).
/exports/nfs/diskless
Note 2: /exports/nfs/diskless/gentoo-arm is a filesystem from gentoo/arm stage3 tarball, since we're using IP kernel level autoconfigration, so we have to tell the userspace program do not to configure ip anymore, under gentoo system, this could be done by (/etc/conf.d/net):
config_eth0=( "null" );
Change /etc/inittab so that init could start from ttyAMA0 with proper bitrate. you can also uncomment tty0-tty6 since we don't use them.
By default the init program is also trying to mount /etc/fstab entries, we could also uncomment unneccessary entries to avoid mount errors/warnings.
Note 3: The cross-toolchain is built by gentoo's crossdev by:
crossdev -S --ex-gdb -t arm-unknown-linux-gnueabi