Qemu调试Linux内核

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

当然还需要安装交叉编译环境。

1. 下载编译qemu-0.12.5.tar.gz解压编译
$ 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
2.下载编译Linux内核
$ 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
3.下载编译Busybox
$ 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/shmount -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 ../../
4. 运行Linux内核+busybox

$./qemu-0.12.5/arm-softmmu/qemu-system-arm -M versatilepb -m 128M -kernel linux-3.12.6/arch/arm/boot/zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/sbin/init"


5. 调试方法

(1) 按4.运行Linux内核+busybox的命令一样,只是后面加上"-s -S"。运行该命令之后就可以看到Qemu启动,但看不到    有任何画面,因为Qemu在等待调试没有运行内核。
$ ./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
(2) 另外打开一个终端,如数如下命令就可以看到程序停在start_kernel函数中
$ arm-none-linux-gnueabi-gdb> target remote : 1234> cd linux-3.12.6> file vmlinux> b start_kernel> c

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值