Skip to main content
KGDB(Kernel GNU Debugger)为运行中的 Qualcomm® Linux 内核提供实时的源代码级调试。运行 GDB 的主机通过串行端口连接到目标设备,可以设置断点、检查寄存器并单步执行内核代码,包括动态加载的模块。

必需的内核配置

启用以下 Kconfig 选项并重新构建内核:
在运行中的系统上验证:

串行设置

KGDB 使用 kgdboc(KGDB over console)驱动通过串行端口进行通信。

内核命令行参数

将以下内容添加到 meta-qcom/conf/machine/include/qcom-<SoC>.conf 中的 KERNEL_CMDLINE_EXTRA

禁用看门狗

如果内核停止响应,Qualcomm SoC 看门狗会重置设备。请在启动 KGDB 会话之前禁用它,以防止意外重置:

进入调试模式

选择以下方法之一暂停内核并激活 KGDB stub。

方法 1:kgdbwait(启动时)

当内核命令行中包含 kgdbwait 时,内核会在启动期间停止,并在串行控制台上打印以下消息:
在内核继续之前,从主机连接 GDB。

方法 2:Magic SysRq(运行时)

在目标设备的 shell 中:
内核会立即挂起并等待 GDB。

方法 3:编译时断点

在驱动源代码中插入硬断点:
重新构建并刷写内核。当代码路径执行到该行时断点触发。

方法 4:内核 panic(异常驱动)

当发生未处理的异常或 panic 时,内核会自动进入 KGDB 模式。要为测试目的故意触发崩溃:

从主机连接 GDB

在主机上安装 gdb-multiarch

Linux 主机

Windows 主机

在 Windows 上,请在设备管理器中将 COM 端口号设置为 16 以上,并使用 \\.\comN 路径语法:
连接后的预期输出:

GDB 调试会话

基本 GDB 命令

表:GDB 命令参考

加载模块符号

要调试动态加载的内核模块,请从目标设备获取 .text 段地址:
然后在 GDB 中加载符号文件:
示例:
有关完整的上游 KGDB 文档,请参阅 Debugging kernel and modules via gdb