当前位置:嗨网首页>书籍在线阅读

03-使用KGDB进行内核调试

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.2 使用KGDB进行内核调试

有两种常见的方法允许我们在Linux内核中进行带符号的源码级调试:

  • 使用KGDB作为一个远程GDB代理;
  • 使用一个硬件JTAG探测器来控制处理器。

14.4节会介绍JTAG调试。

KGDB(Kernel GDB)是一系列Linux内核补丁,它们通过GDB的远程串行协议向它提供了一个接口[3]。KGDB实现了一个GDB stub,它和运行于主机开发工作站上的交叉调试器(cross-gdb)通信。直到最近,目标板上的KGDB都需要和开发主机之间进行串行连接。不过,有一些目标板支持基于以太网甚至USB的KGDB连接。对KGDB的完整支持还没有合入主线内核中(kernel.org发布的内核版本)。你需要自己将KGDB移植到所选的目标板上,或是购买一个针对所选架构和平台的嵌入式Linux发行版,并且其中包含对KGDB的支持。如今大多数商业嵌入式Linux发行版都支持KGDB。

[3] 一个简化版的KGDB已经合入Linux 2.6.26主线版本中,但它缺乏对某些特性的支持,包括通过KGDB以太网调试及其他特性。

值得注意的一点是,你会发现在对KGDB的支持程度上,不同架构和平台之间是有些差异的。除非这个平台的开发人员特别启用了KGDB,否则它可能不会在特定平台上正常工作。另外,在不同的平台和架构上,有关KGDB的内核配置选项也有所不同。确保你的平台支持KGDB的唯一方法就是自己移植,或者购买商业Linux内核和发行版,而它支持在你的平台上运行KGDB。请参考本章最后一节的参考文档。

图14-1显示了一个使用KGDB时的调试环境设置。开发主机和目标板之间最多存在3个连接。以太网用于NFS挂载根文件系统以及主机通过Telnet会话远程登录到目标板上。如果目标板的闪存中有一个ramdisk镜像,而且它会被挂载为根文件系统,你就可以去掉这个以太网连接。

380.png

图14-1 使用KGDB时的调试环境设置

目标板上有一个串行端口专门用于KGDB和运行于开发主机上的GDB之间的连接,另一个串行端口则充当一个控制台。在只有一个串行端口的系统中,KGDB使用起来会比较麻烦。

正如图14-1所示,调试器(交叉版本的GDB)运行在开发主机上。而KGDB则是运行在目标板上的内核的一部分。KGDB实现了一些必要的钩子函数(hook),借助这些钩子函数,GDB能够连接到你的目标板,从而能够利用设置断点、查看内存和单步执行程序等功能。