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

支持的目标平台

KGDB 需要一个专用串口,且该串口不能与内核日志控制台共用。以下目标平台已在 Qualcomm Linux 上完成 KGDB 验证: 表:各目标平台的 KGDB 支持情况
在所有受支持的目标平台上,开发套件都通过调试接头将 ttyMSM0 作为 Qualcomm GENI UART 暴露出来。在开始会话之前,请先确认该端口在您的开发板上可用:

所需的内核配置

启用以下 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。