阅读:6154回复:12
[原创]如何在vmware上搭建环境调试内核
如何在vmware上搭建环境调试内核
author: cyliu 一 安装linux虚拟机 1 在vmware上安装新的linux虚拟机.创建一个新的虚拟机,并一定要用IDE硬盘 2 从Internet下载源代码 1、linux-2.6.18(www.kernel.org -ftp站点) 2、kgdb-2.6.18 patch 3、gdbmod-2.4(可选):调试module使用此gdb 3 编译内核 a、将kgdb-2.6.18补丁打到Linux内核源码里。注意按照顺序打patch,因为此版本的patch是散的,需要手动一个一个添加,共12个文件。 b、编译内核(make clean , make mrproper, make menuconfig, make, make modules , 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 在device drivers选择项中选择kgdb相关项,例如 Character devices--> KGDB: On generic serial port(8250) c、安装gdbmod-2.4 4 修改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.img 改为: title Fedora Core (2.6.18) root (hd0,0) kernel /vmlinuz-2.6.18 ro root=/dev/VolGroup00/LogVol00 kgdb8250=0,115200 (kgdbwait) initrd /initrd-2.6.18.img 5 请检验新编译的内核是否可用。如果不能启动,可能是编译选项没有选好。如果没有问题,关闭这个linux虚拟机,进入下一步。 二 Clone linux虚拟机(请参考vmware手册) 1 Clone linux.在vmware上选择刚安装的linux虚拟机,然后vmware的clone方式。建议选择链接copy. 2 两台虚拟机:一台作target机,一台作develop机。 3 配置两台虚拟机串行通信 a、在每个虚拟机中分别添加一个串口设备,并配置成命名管道 \\.\pipe\com_1 b、指定target虚拟机的串口为server端,并选择"The other end is a virtual machine"属性,对于IO mode属性,选中"Yield CPU on poll"复选择框; c、指定develop虚拟机的串口为client端,并选择"The other end is a virtual machine"属性。 4 注意:这里的delelop的Linux虚拟机不要使用打了kgdb patch的linux系统,否则无法配置串行口。因为kgdb占用了ttyS0口,禁止使用。我这里使用的是2.6.16内核的系统。 三 调试内核(以调试网络功能为例) 1、启动target虚拟机 2、在develop虚拟机的linux-2.6.18源代码目录下,执行下面的命令: gdb ./vmlinux (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0 (gdb) break ip_rcv (gdb) c 3、给target 虚拟机发数据包(如ping) 4、现在就像调试应用程序那样调试内核了。 |
|
|
沙发#
发布于:2007-05-29 16:51
作了一些修改,主要是调试内核变为2.6.18,同时给出一些注意事项.
|
|
|
板凳#
发布于:2007-06-08 15:10
版主可否贴一份好用的2.6.18在vmware上的配置出来.
|
|
地板#
发布于:2007-06-25 22:07
我用的是debian etch 有点不明白的是:
kernel /vmlinuz-2.6.18 ro root=/dev/VolGroup00/LogVol00 kernel /vmlinuz-2.6.18 ro root=/dev/VolGroup00/LogVol00 kgdb8250=0,115200 (kgdbwait) 这两个是什么意思? |
|
|
地下室#
发布于:2007-06-26 09:56
我认为最好把映像文件放上来,这样就省了很多事!
|
|
5楼#
发布于:2007-06-27 11:00
那个kgdb-2.6.18的补丁哪来的 好像最新的也就是2.6.16.5的
|
|
|
6楼#
发布于:2007-06-27 17:02
kgdb-2.6.18网站上有,但不是打包的,分散的。需要一个个按照顺序Pack,顺序不能错,否则内核编译不过。
|
|
|
7楼#
发布于:2007-06-29 00:46
呵呵,正合我意,感谢ing
|
|
8楼#
发布于:2007-07-04 19:50
kgdb-2.6.18网站上有,但不是打包的,分散的。需要一个个按照顺序Pack,顺序不能错,否则内核编译不过。
========================================= 哪个网址 麻烦说下 kgdb.linsyssoft.com上面我找不到 谢谢 |
|
|
9楼#
发布于:2007-07-04 22:36
|
|
|
10楼#
发布于:2008-01-14 11:26
cyliu你好
我急需一份2.6.18.1的补丁,网上说好像没有2.6.18.1的补丁,其他的版本,比如2.6.18.2 .3 。。的也可以,但是你说的网站我上不去,能不能麻烦你发一份给我?我的邮箱:hxp2003@163.com 谢谢 |
|
11楼#
发布于:2008-02-15 12:06
好帖!
|
|
12楼#
发布于:2009-03-28 15:18
我不明白的是 两台PC或者两个linux都要安装到2.6.18吗?
|
|