1,在vmware中安装Ubuntu 10.04 LTS,该虚拟机命名为client
2,在unbuntu中手动安装ncurses-6.0.tar.gz
3,make menuconfig 设置编译选项
make menuconfig
File System --> 下面把ext3,ext2都编译进内核(就是把前面的M变成*)
Kernel Hacking -->
1,选中Compile the kernel with frame pointers
2,选中KGDB:kernel debugging with remote gdb
3,选中[*] KGDB: kernel debugger --->
<*> KGDB: use kgdb over the serial console
4,并确认以下两项也是选中的(他们应该默认是选中的)
> kernel debugging
> Compile the kernel with debug info
5,去掉Writeprotect kernel read-only data structures(否则不能用软件断点)
4,在client虚拟机中编译内核以及内核模块
编译内核:
make -j10 bzImage
-j10表示使用10个线程进行编译.
内核模块:
make modules
5,使用vmware的clone功能新建一个ubuntu虚拟机,命名为server。
6,在server的虚拟机中安装内核
make modules_install
安装内核模块
make install
安装内核
7,在server的虚拟机中使用下边的命令生成initrd.img-2.6.36
mkinitramfs-kpkg -o initrd.img-2.6.36 2.6.36
8,添加串行端口
12,server选择kgdb启动,在client端添加串口,类型选Use named pipe:
\\.\pipe\com_1
Thisend is the client
Theother end is a virtual machine
在server端添加抽口,功能选Usenamed pipe:
\\.\pipe\com_1Thisend is the server
9,在server的虚拟机中用下边的命令生成vmlinuz
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.36-kgdb
10,在server的虚拟机中,相关文件的拷贝
将生成的System.map和
initrd.img拷贝到/boot下,重新命名为
System.map-2.6.34.1-kgdb
vmlinuz-2.6.34.1-kgdb
initrd.img-2.6.34.1-kgdb
运行update-grub11,在server的虚拟机中,修改配置文件
vi /etc/default/grub
vi /boot/grub/grub.cfg
/etc/default/grub修改如下:
GRUB_DEFAULT=0 //设定默认启动项
#GRUB_HIDDEN_TIMEOUT=30 //注释掉这行会显示引导菜单
GRUB_HIDDEN_TIMEOUT_QUIET=false //如果为true,黑屏且不会显示倒计时
GRUB_TIMEOUT=30 //倒计时
GRUB_DISTRIBUTOR=`lsb_release -i-s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=90 quiet splash text" //text表示命令行方式启动
GRUB_CMDLINE_LINUX=""
/boot/grub/grub.cfg修改如下:
### BEGIN /etc/grub.d/10_linux###
menuentry 'Ubuntu, with Linux2.6.36-kgdb' --class ubuntu --class gnu-linux --class gnu --classos {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid--set 78727361-022c-4790-8d39-a17565a4e155
linux /boot/vmlinuz-2.6.36-kgdbroot=UUID=78727361-022c-4790-8d39-a17565a4e155 ro rootdelay=90 quiet splash text kgdboc=ttyS1,115200
initrd /boot/initrd.img-2.6.36-kgdb
}
登录后echog > /proc/sysrq-trigger
开启kgdb
Server上显示:
SysRq:DEBUG
Entering KGDB
13,client中运行gdb vmlinux以后,
输入:
set remotebaud 115200
target remote /dev/ttyS1
然后设置断点,然后执行
break sys_init_module
continue
14,insmod cramfs.ko
参考了下边的一些博客
http://www.xuebuyuan.com/1796014.html
http://blog.chinaunix.net/uid-20672257-id-2936794.html