昨天搭建的kgdb调试环境,今天面临的第一个问题就是调试我的模块。调试内核根据上一篇文章的介绍已经够了http://blog.csdn.net/zr_lang/article/details/8107015,但是调试模块还需要一些额外的工作。下面针对用kgdb调试内核模块的问题的重点部分简要说明一下。
首先,有一个小技巧先说明一下,那就是如果你想在gdb没有进入断点的情况下从目标机运行中将主动权转回给gdb的话(这个比较常用的),可以在命令行下这样写:
echo g>/proc/sysrq-trigger这样就可以切换回gdb主动控制了。(谁还有什么办法可以分享一下,我很想知道,谢谢)
下面开始模块的调试。
1. 模块的编译。
在目标机上 的模块的编译要借助你编译的这个已安装内核的代码,把它放到你指定的目录下,然后在模块编译的时候指向这个目录。需要注意的是,模块的编译需要加入-g选项。如果你是写的Makefile,那么可以在Makefile的开头加入
ccflags-y += -O -g这样一句就会让编译时加入gdb调试所需的信息了如果你直接使用gcc那就不用我多说了。
2. 模块拷备。
把你写的模块的源码和编译出的结果也放到调试机上,拷贝的地方要和在目标机上编译的所在的路径相同,这样符号名才能完好的对应上,比如两个系统的模块源码目录都在/home/zrlang/mymodule/里。