最近由于课程需要,对于Linux内核下ddd+qemu+busybox调试环境进行了配置。期间参考了不少的网上资料,如下:

http://leave001.blog.163.com/blog/static/162691293201243110252209/

http://babybandf.blog.163.com/blog/static/61993532011110103317728/

http://www.kgdb.info/kgdb/use_kgdb/using_kgdb_base_qemu/

最后在几经折腾之下,终于完成了正确的配置,所以写篇blog来记录下。(ps:编译内核好费时间。)


所需软件(qemu和busybox)下载地址:http://down.51cto.com/data/1020102


一、环境搭建

1.编译内核打开终端输入如下命令

      mkdir -p ~/misc/qemu

      cd ~/misc/qemu

      wgethttp://www.kernel.org/pub/linux/kernel/v3.0/linux-3.5.4.tar.bz2

      tar xvfj linux-3.5.4.tar.bz2

      cd linux-3.5.4

      make defconfig

      make menuconfig(选中

          kernelhacking –> kernel debugging –> compile the kernel with debug info

          kernelhacking –> compile the kernel with frame pointers

      make

      cparch/x86/boot/bzImage ..

2.安装qemu

1)去群共享下载qemu安装文件

2)在安装qemu前先要安装库文件。打开终端输入sudo apt-get install gcc libsdl1.2-dev zlib1g-devlibasound2-dev pkg-config libgnutls-dev pciutils-dev

3)切换到qemu的源码目录输入./configure生成makefile

4)输入make开始编译(如果缺automake包,输入sudo apt-get install autoconf automake libtool安装

5)输入sudo make install开始安装


3.制作根文件系统,打开终端输入以下命令

      cd ~/misc/qemu

      dd if=/dev/zero of=rootfs.img bs=1M count=10 创建大小为1M到根文件系统

      mkfs.ext3 rootfs.img ext3类型来格式化

      mkdir rootfs  

      sudo mount -t ext3 -o loop rootfs.img rootfs将其mount 到新创建到目录上

      cd rootfs  

      mkdir dev proc sys  创建三个目录

4.安装busybox到根文件系统

1)打开终端切换到busybox的源码目录,输入命令make menuconfig配置编译选项

a)选择静态编译:BusyboxSettings->Build options->Build Busybox as a static binary

b)取消选择Networkingutilities->iptunel

c)取消选择Networkingutilities->inetd

2)输入make开始编译

3)输入命令make installCONFIG_PREFIX=~/misc/qemu/rootfsbusybox文件系统安装到根文件系统中

4)输入cd ~/misc/qemu切换到qemu目录

5)输入命令sudo umount rootfs卸载根文件系统

二、验证流程

      1启动qemu

1)打开终端输入,输入命令cd ~/misc/qemu切换到~/misc/qemu目录

2)输入qemu-system-i386  -S -kernel bzImage -hdarootfs.img -append "root=/dev/sda init=/bin/ash"启动qemu

3)用鼠标点击qemu窗口,然后ctrl+alt+2切换到控制台,输入“gdbservertcp::1234

4)打开另外一个终端。输入命令cd ~/misc/qemu/linux-3.5.4切换到~/misc/qemu/linux-3.5.4目录

5)运行 dddvmlinux(未安装ddd的输入sudo apt-get install ddd安装)

6)gdb的命令行中输入命令target remote localhost:1234qemu虚拟机连接到ddd的控制台

自此就可以通过ddd的控制台用gdb的命令来查看源码的运行信息了。大家也可以将自己需要测试的程序编译好考到根文件系统中运行。