2024年3月17日发(作者:)

安装系统(在创建一个新的虚拟机时一定要用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、修改

例如:

title Fedora Core (2.6.16)

root (hd0,0)

kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00

initrd /initrd-2.6.16_

改为:

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_

4、请检验新编译的内核是否可用。如果不能启动,可能是编译选项没有选好(一直困

扰我的问题。实在不行就多选点)。如果没有问题,关闭这个linux虚拟机,进入下一步。

Clone linux虚拟机(请参考vmware手册)

注:我将clone出的虚拟机命名为develop虚拟机。将原来的linux虚拟机命名为

target 虚拟机。

配置虚拟机

1、在每个虚拟机中分别添加一个串口设备,并配置成命名管道 .pipecom_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