在vmware虚拟机上调试内核
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安装系统(在创建一个新的虚拟机时一定要用IDE硬盘)
1、在vmware上安装一个linux虚拟机(我用的软件版本:vmware 5.5, fedora 6)
从Internet下载源代码
1、linux-2.6.16
2、kgdb-2.6.16
编译内核
1、将kgdb-2.6.16补丁打到Linux内核源码里。
2、编译内核(make menuconfig, make, make modules_install, make install)
在内核配置菜单的Kernel hacking选项中选择kgdb调试项,例如:
[*] KGDB: kernel debugging with remote gdb
[*] KGDB: Console messages through gdb
Method for KGDB communication (KGDB: On generic serial port (8250)) --->
< > KGDB: On ethernet
[*] Simple selection of KGDB serial port
(115200) Debug serial port baud rate
(0) Serial port number for KGDB
3、修改grub.conf
例如:
title Fedora Core (2.6.16)
root (hd0,0)
kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.16_debug.img
改为:
title Fedora Core (2.6.16)
root (hd0,0)
kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00 kgdb8250=0,115200
initrd /initrd-2.6.16_debug.img
4、请检验新编译的内核是否可用。
如果不能启动,可能是编译选项没有选好(一直困扰我的问题。
实在不行就多选点)。
如果没有问题,关闭这个linux虚拟机,进入下一步。
Clone linux虚拟机(请参考vmware手册)
注:我将clone出的虚拟机命名为develop虚拟机。
将原来的linux虚拟机命名为target 虚拟机。
配置虚拟机
1、在每个虚拟机中分别添加一个串口设备,并配置成命名管道\\.\pipe\com_1
2、指定target虚拟机的串口为server端,并选择"The other end is a virtual machine"属性,对于IO mode属性,选中"Yield CPU on poll"复选择框;
3、指定develop虚拟机的串口为client端,并选择"The other end is a virtual machine"属性。
注:此时两个虚拟机都处于关机状态
避免develop虚拟机和target 虚拟机的配置冲突
启动develop虚拟机(启动不带kgdb补丁的内核境象,此时也不要启动target 虚拟机),修改与target虚拟机的配置相冲突的地方。
如ip地址,mac地址等(我只改了这两个,不知道还有没有别的。
)。
调试内核(以调试网络功能为例)
1、启动target虚拟机
2、在develop虚拟机的linux-2.6.16源代码目录下,执行下面的命令:
gdb ./vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
(gdb) break ip_rcv
(gdb) c
3、给target 虚拟机发数据包(如ping)
4、现在就像调试应用程序那样调试内核了。
Good luck。