关于 kgdb
这里摘抄了网上一篇博客的一段话。
kgdb 实现了在开发机上使用 gdb 远程调试目标机的功能,包括命令处理、陷阱处理以及串口通信3个主要部分。
kgdb 会在 linux 内核中添加一个调试 stub ,调试 stub 是 linux 内核中的一小段代码,是运行 gdb 的开发机和目标机内核之间的媒介。
gdb 和调试 stub 之间通过 gdb 串行协议进行通信。 gdb 串行协议是一种基于消息的 ASCII 码协议,包含了各种调试命令。
当设置断点时, kgdb 将断点的指令替换为一条 trap 指令,当执行到断点时,控制权就转移到调试 stub 中去。
此时,调试 stub 的任务就是使用远程串行通信协议将当前内核环境传送给 gdb ,然后从 gdb 处接收命令。
gdb 命令告诉调试 stub 下一步该做什么,当调试 stub 收到继续执行的命令时,将恢复内核的运行环境,
把对 cpu 的控制权重新交还给内核。
总结几点:
- kgdb 是用于开发内核或者内核模块的工具,一般需要有一台开发机和目标机,他们通过网线或者串口线连在一起。我们在开发机上使用 gdb 调试目标机上的程序,包括内核代码及模块代码。
- kgdb 配置于目标机器上,现在一般的 Linux 内核都集成有 kgdb ,