最近由于课程需要,对于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 �C> kernel debugging �C> compile the kernel with debug info
kernelhacking �C> 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/rootfs把busybox文件系统安装到根文件系统中
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:1234将qemu虚拟机连接到ddd的控制台
自此就可以通过ddd的控制台用gdb的命令来查看源码的运行信息了。大家也可以将自己需要测试的程序编译好考到根文件系统中运行。