QEMU
Page under construction... Informations on this page are not guaranteed !!
Well, you don't have enough money to buy an Armadeus board and just want to be part of the "Software" side of the project ? Then QEMU can be a good choice for you !!
In order to build a hardware matching machine for Armadeus boards under Qemu, follow this link and add devices you are interested to see emulated in Qemu:
Qemu machine development
Contents
Installation
- on Debian, *Ubuntu just do a:
[armadeus]$ sudo apt-get install qemu bridge-utils vde
- on Kubuntu 9.10 do:
[armadeus]$ sudo apt-get install qemu bridge-utils qemu-kvm-extras vde
Configuration
QEMU has several ways of emulating the network:
- user mode (by default): you can access Internet from your emulated target or an internal Samba/TFTP server but your are not directly accessible
- bridge mode: you can communicate directly with the Host
Note: For a first try you can skip following part and go directly here. |
As we want to mimic the devt environment with a real target (that has its own IP adress and is eccesible from the host) we will use "bridged mode". This mode require some configuration on your Host:
- Install bridge_utils package
- Activate IPv4 forwarding, for example on Ubuntu, uncomment the following line in /etc/sysctl.conf:
$ sudo vim /etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv4 #net/ipv4/ip_forward=1
- In /etc/network/interface comment the line referring to your current Ethernet card and replace them with:
auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off #auto eth0 #iface eth0 inet dhcp
Note: If you are using a modern linux distribution like Ubuntu, also be sure NetworkManager is disabled/not configured. Otherwise conflict occur and network does not work at all. |
- Create a script /etc/qemu-ifup that will be executed upon the start of QEMU:
#!/bin/sh echo "Executing /etc/qemu-ifup" echo "Bringing up $1 for bridged mode..." sudo /sbin/ifconfig $1 0.0.0.0 promisc up echo "Adding $1 to br0..." sudo /usr/sbin/brctl addif br0 $1 sleep 2
- Now you can append the following options to the qemu command line:
-net nic,vlan=0,macaddr=00:16:3e:00:00:01 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup
You don't need to give a MAC address if you are emulating only one machine, as QEMU will use a default one. However if you have more than one emulated machine (don't forget QEMU can also emulate other architectures than ARM), you will have to specify a unique MAC address for each machine.
- Once booted, on your guest you can configure the network simply as follows:
# udhcpc -i eth0
Get/generate simulation images (Linux & rootfs)
- As QEMU doesn't support (yet) the APF, we will use the Versatile PB emulated hardware. To get a compatible Linux kernel for this board do:
$ cd your_armadeus_view/ $ wget ftp://ftp2.armadeus.com/armadeusw/download/qemu/vmlinuz-2.6.29.6-versatile-armadeus
one wanting to rebuild this image itself will find the correspondig config file in the same dir. (after compiling, take arch/arm/boot/zImage)
- get some useful environment variables:
$ make shell_env $ source armadeus_env.sh
- deactivate login on serial port:
- in Buildroot menuconfig:
System configuration ---> () Port to run a getty (login prompt) on
- * and in $ARMADEUS_ROOTFS_DIR/etc/inittab, comment following lines:
# Put a getty on the serial port ttymxcX::respawn:/sbin/getty -L ttymxcX 115200 vt100 # GENERIC_SERIAL This can be achieved with sed : sed --in-place -e "s/^ttymcX/#ttymcX/" $ARMADEUS_ROOTFS_DIR/etc/inittab
- Re-generate your Armadeus rootfs:
$ make
- check the size of your rootfs image
$ ls -al $ARMADEUS_ROOTFS_TAR
- generate a dummy image larger than your rootfs; here 60 MBytes for a 45 MBytes tared rootfs:
$ dd if=/dev/zero of=armadeus-qemu.img bs=1MB count=60 $ sudo mke2fs -F -m 0 -b 1024 armadeus-qemu.img
- mount it and copy it your rootfs:
$ mkdir qemu_mnt $ sudo mount -t ext2 -o loop armadeus-qemu.img qemu_mnt/ $ sudo tar xf $ARMADEUS_ROOTFS_TAR -C qemu_mnt/ $ sudo umount qemu_mnt/
- now you have all you need to launch Qemu
Launch it
- Example with 64 MBytes of RAM:
$ qemu-system-arm -M versatilepb -kernel ./vmlinuz-2.6.29.6-versatile-armadeus -hda armadeus-qemu.img -m 64 \ -append "root=/dev/sda mem=64M ro" (rw for read/write works, too instead of tw two last characters ro)
option -cpu arm926 can be added on APF27
- When system has booted, if you are French, load a usable keymap:
# loadkmap < /etc/i18n/fr.kmap
=> loqdk,qp < !etc!i&_n!fr:k,qp on your PC keyboard
Another solution is to generate the command one wants to lanch on your PC, with a normal keyboard layout
echo "loadkeymap</etc/i18n/fr.kmap" > kfr
or
echo "loadkeymap</etc/i18n/de.kmap" > kde
chmod +x k*
and to copy it on the virtual image, before it is unmounted and qemu is launched
cp -uv k* $IMAGE/usr/local/bin/.
Once qemu has been launched, and one is connected, just type kfr (or kde) to get a keyboard layout one is accustomed to (these letters are layout agnostic)
To Be Continued... ;-)
Links
- QEMU WebPage
- Debian on an emulated ARM machine tutorial by Aurel32 + comments about it
- Debian ARM Linux on Qemu
- http://www.gnome.org/~markmc/qemu-networking.html
- QEMU - Debian - Linux - TUN/TAP - network bridge
- Gumstix's way of using QEmu
- Gumstix's way of generating QEmu's images
- Generating Ubuntu for ARM with QEMU
- compiling-linux-kernel-for-qemu-arm-emulator