gdb调试Linux内核

时间:2022-08-31 12:37:26

 http://hi.baidu.com/%C4%FE%BE%B2%B5%C4%B7%B1%BB%AA/blog/item/1c4c83192ac4dd158718bf66.html

 

 

原理
gdb可以支持远程的调试,串口连接和tpc/ip网络链接两种。
在Ubuntu 9.10Linux下面,virtualbox 作为虚拟机,装有待调试的Linux系统。
a.创建链接。
这里选择串口方式调试。在virtualbox的虚拟机配置中,把串口设置为"COM1","Host-pipe"模式,并勾选"创建",输入:"/tmp/v_pip0"作为和虚拟机串口链接的管道。至此,虚拟机和调试平台的链接完成。
b.测试串口工作:
在Gest OS里面输入stty ispeed 115200 ospeed 115200 -F /dev/ttyS0来设置串口COM1的工作速度。
在Host OS里面下载Minicom串口工具,设置它的配置文件(/etc/minicom/minirc.df1)写入如下:
pu port unix#/tmp/v_pip0
启动minicom,链接上以后,显示在线。在Gest OS一边可以通过cat、echo命令来读写串口,minicom这边可以直接输入,串口到达的数据将会直接显示在屏幕上面。
如果可以通讯,说明串口正常工作了。
c.编译可以被调试的内核:
选择通过串口调试内核
-------------------------------------------------------------------------------------------
make menuconfig  -> kernel hacking ->
[*] Kernel debugging  [*]
[*] Compile the kernel with debug info
[*]KGDB: kernel debugging with remote gdb  ---> 
--- KGDB: kernel debugging with remote gdb 
<*>   KGDB: use kgdb over the serial console  

-------------------------------------------------------------------------------------------

d.设置调试环境:
>写入/boot/grub/grub.cfg 启动项目:
linux /boot/... 条目后:kgdboc=1,115200
>将新内核拷贝到Host OS作调试用。记住:要拷贝vmlinux而非vmlinuz(是经过压缩的)。
e.启动gdb开始调试:
>启动新内核后,调试的时候,在Gest OS里面输入stty ispeed 115200 ospeed 115200 -F /dev/ttyS0来设
置串口COM1的工作速度,按下ALT+Print SysRq+g 魔法键,开启gdb调试,系统冻结,并显示KGDB
waiting

>在Host OS上面运行:
socat udp4-listen:6443 /tmp/v_pip0
将管道映射到udp端口
运行gdb ./vmlinux
进入后,设置gdb目标:
target remote udp:localhost:6443
等待一会儿,就和Gest OS链接上了
-----------------------------------------------------------------------------------------------------------------------------------
ps:模块调试
>
启动模块调试前,先将模块插入系统,并确保模块编译时候CFLAGS有-g选项。把模块文件,模块源文件拷
贝到Host OS中,运行:cat /proc/modules 查找模块的加载地址,记下来,在Host OS中gdb调试的时候
会用到。
>
gdb 运行后,通过 add-symbol-file 命令加载模块的符号:
(gdb) add-symbol-file my-module.ko address
此处address就是模块的加载地址,在已经上面得到。
至此,模块已经可以调试(设置断点等)。

 

 

*******************************************************

http://forum.linuxfans.org/thread-44268-1-89.html

 

for kernel, i suggest u to use kgdb


http://kgdb.sourceforge.net/connect.html

http://www.cs.wm.edu/~bob/ddd-with-modules.html

**********************************************************