Qemu是很有名的ARM虚拟程序,可以在Qemu中运行调试ARM平台Linux内核。编译Qemu,Linux内核,busybox的环境是安装ubuntu 10.4系统的virtualbox。
在安装完ubuntu 10.4之后,最好先准备一下编译环境。
首先需要安装编译需要的库
$ sudo apt-get install build-essential autoconf libtool zlib1g-dev
当然还需要安装交叉编译环境。
$ wget http://download.savannah.gnu.org/releases/qemu/qemu-0.12.5.tar.gz
$ tar xzf qemu-0.12.5.tar.gz
$ cd qemu-0.12.5
$ ./configure --enable-sdl --disable-kvm --enable-debug --target-list=arm-softmmu
$ ./make
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-3.12.6.tar.bz2
$ tar xjf linux-3.12.6.tar.bz2
$ cd linux-3.12.6/
$ make ARCH=arm versatile_defconfig
$ make ARCH=arm menuconfig
在menuconfig这一步需要设置几个才能在qemu中运行以及进行后续的调试
(1) 去掉Enable loadable module support左边的[*]
(2)在Kernel Features里边点上Use the ARM EABI to compile the kernel左边的[*]
(3)点上Kernel hacking里边的Compile the kernel with debug info左边的[*]
(4)然后exit -> save之后就执行下面的语句进行内核的编译
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- all
$ tar busybox-1.21.1.tar.bz2
$ cd busybox-1.21.1
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
在menuconfig之后,进入Busybox Settings -> Build Options之后,点上Build BusyBox as a static binary (no shared libs)左边的 [*]号
然后执行下面的语句编译安装
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
$ cd _install
$ mkdir -p proc sys dev etc etc/init.d
$ cd etc/init.d
$ vi rcS
之后把下面的shell语句写到rcS文件
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
然后按照下面的语句生成Ram File System
$ cd ../../
$ chmod +x etc/init.d/rcS
$ find . | cpio -o --format=newc | gzip > ../../rootfs.img.gz
$ cd ../../
$ ./qemu-0.12.5/arm-softmmu/qemu-system-arm-M versatilepb -m128M-kernel linux-3.12.6/arch/arm/boot/zImage-initrd rootfs.img.gz-append"root=/dev/ram rdinit=/sbin/init"
$ ./qemu-0.12.5/arm-softmmu/qemu-system-arm-M versatilepb -m128M-kernel linux-3.12.6/arch/arm/boot/zImage-initrd rootfs.img.gz-append"root=/dev/ram rdinit=/sbin/init" -s -S
$ arm-none-linux-gnueabi-gdb
> target remote : 1234
> cd linux-3.12.6
> file vmlinux
> b start_kernel
> c