使用qemu + KGDB调试内核

本文提供了一步一步的指南,详细介绍了如何在QEMU环境下使用KGDB进行Linux内核调试,包括配置、编译、制作文件系统等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://www.kgdb.info/kgdb/use_kgdb/using_kgdb_base_qemu/


测试环境在/home/luq/qemu下,自己调试通过。


假设缺省工作目录为/usr/src/work

?View Code BASH
sudo mkdir -p 
/usr/src/work
sudo chmod 777 /usr/src/work -R
cd /usr/src/work
wgethttp://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2
tar -jxvf linux-2.6.34.1.tar.bz2
1.3: 配置内核选择
使能kgdb调试,并使用kgdboc作为与gdb通信模块。

?View Code BASH
cd linux-2.6.34.1
make defconfig
make menuconfig
需确保如下选项被选中(参考kgdb内核选项配置)

?View Code BASH
 
General setup --->
 
   [ * ] Prompt for development and/or incomplete code/drivers
Kernel hacking 
--->
 
   [ * ] Compile the kernel with debug info
 
   [ * ] Compile the kernel with frame pointers
 
   [ * ] KGDB: kernel debugger --->
 
         < *>   KGDB: use kgdbover the serial console

Melody_lu123, 注意,我是在2.6.36上实验的!

1.4: 编译
?View Code BASH
make
如果你的机器是多核的,可以使用-j+CPU数来进行并行编译,从而加快编译速度,如:

?View Code BASH
make -j2
编译完成后,复制bzImage和vmlinux到工作目录下备用

?View Code BASH
cp arch/x86/boot/bzImage /usr/src/work
cp vmlinux /usr/src/work
2: 制作自己的文件系统
2.1: 下载busybox
去busybox站点下载一个busybox源码包,并解压。

?View Code BASH
cd /usr/src/work
wget http://www.busybox.net/downloads/busybox-1.17.0.tar.bz2
tar -jxvf busybox-1.17.0.tar.bz2
cd busybox-1.17.0
2.2: 编译busybox
?View Code BASH
make menuconfig
 

Busybox Settings 
--->
 
  BuildOptions  --->
 
      [ * ] Build BusyBox as a static binary (no shared libs)
 
  InstallationOptions  --->
 
      [ * ] Don't use /usr
Miscellaneous Utilities 
--->
[ ] flashcp
[ ] flash_lock
[ ] flash_unlock
[ ] flash_eraseall
 

注:[ ] 表示不选择
保存配置文件后开始编译和安装

?View Code MAKE
make
make install
此时在当前目录下生成了一个_install目录,里面就是busybox的执行文件

2.3: 制作文件系统
使用如下命令来创建一个虚拟文件系统磁盘文件,

在当前目录下创建一个名为busybox.img,大小为100M的文件,并将其格式化为ext3的文件系统

?View Code BUSYBOX
cd /usr/src/work
dd if=/dev/zero of=./busybox.img bs=1M count=100
mkfs.ext3 busybox.img
将这个虚拟磁盘文件到本地系统中,这样我们可以像访问本地文件一样访问它,
并将生成好的busybox的文件拷贝到这个文件里。

?View Code MOUNT
sudo mkdir /mnt/disk
sudo mount -o loop /usr/src/work/busybox.img /mnt/disk
sudo cp -rf /usr/src/work/busybox-1.17.0/_install
(gdb)
开始你的内核之旅吧~~~

如果gdb提示如下信息:
warning: Invalid remote reply:
可以使用Ctrl+C来终止当前gdb的操作,再次使用下面命令重新连接一次kgdb即可:
(gdb) target remote localhost:4321

6: gdb + kgdb 调试内核操作示例
待完善…

7: 引用/扩展阅读:
1: 使用 KGDB 调试 Linux 内核(on qemu)
该文章对qemu和kgdb的一些参数介绍得非常详细,本文的4和5章节都是参考它写的,强烈推荐大家看看。
2: setting up kgdb using kvmqemu
该文章也是关于qemu和kgdb,不过它介绍qemu如何联网等内容。PS:和上面的文章不同的是,它将qemu的虚拟串口导向到本地的一个”pty”设备上,
而前面我们是导向到一个socket端口上. qemu -serial参数介绍如下:

?View Code QEMU
-serial dev
Redirect the virtual serial port to host character device dev. Thedefault device
is "vc" in graphical mode and "stdio" in non graphical mode. Thisoption can be
used several times to simulate up to 4 serials ports.
本文地址:
http://www.kgdb.info/kgdb/use_kgdb/using_kgdb_base_qemu/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值