Setup QEMU for ARM on Debian Wheezy

This is a quick little blog post for how to install QEMU for ARM on Debian 7.0 (Wheezy).

Installing Toolchains

Edit /etc/apt/sources.list and add

deb http://emdebian.org/debian/ stable main
deb http://ftp.us.debian.org/debian/ squeeze main

The squeeze repo is for the package libgmp3c2 that is unavailable on wheezy.

Install the emdebian public key

# apt-get install emdebian-archive-keyring
# apt-get update

Install ARM toolchains

# apt-get install linux-libc-dev-armel-cross libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.4-arm-linux-gnueabi g++-4.4-arm-linux-gnueabi

Installing QEMU

Install QEMU

# apt-get install qemu qemu-user-static

Optional: Install QEMU GUI

# apt-get install aqemu

Hello ARM

Time to test everything is working.

helloarm.s

.text
.globl _start
_start:
        mov   r0, #5         @ Load register r0 with the value 5
        mov   r1, #4         @ Load register r1 with the value 4
        add   r2, r1, r0     @ Add r0 and r1 and store in r2

stop:   b stop               @ Infinite loop to stop execution

Assemble, Link, Build

$ arm-linux-gnueabi-as -o helloarm.o helloarm.s
$ arm-linux-gnueabi-ld -o helloarm.elf helloarm.o
$ arm-linux-gnueabi-objcopy -O binary helloarm.elf helloarm.bin

Setup flash.bin

$ dd if=/dev/zero of=flash.bin bs=4096 count=4096
$ dd if=helloarm.bin of=flash.bin bs=4096 conv=notrunc

Launch QEMU

$ qemu-system-arm -M connex -pflash flash.bin -nographic -serial /dev/null

There should now be a (qemu) prompt, type info registers and should see something like this

R00=00000005 R01=00000004 R02=00000009 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=0000000c
PSR=400001d3 -Z-- A svc32

R02=00000009 Register 2 has the value 9 in it so everything is working.