我对 KGDB 非常陌生,当我从主机连接目标时遇到问题,出现以下错误。
(gdb) 目标远程 /dev/ttyUSB0 使用 /dev/ttyUSB0 进行远程调试 忽略数据包错误,继续... 警告:“qSupported”响应中无法识别的项目“swreak” 警告:“qSupported”响应中无法识别的项目“ReloInsn” 警告:无法识别的项目“QTread” [3]kdb> " 在 "qSupported" 响应中 来自目标的虚假跟踪状态回复:qTStatus ...#
我下面的程序是:
#[Target] stty -F /dev/ttyS0 115200 [Host] stty -F /dev/ttyUSB0 115200
确保串行连接双向工作。您可以使用:
[Host] cat /dev/ttyUSB0 [Target] echo 'from TARGET to HOST' > /dev/ttyS0 [Target] cat /dev/ttyS0 [Host] echo 'from HOST to TARGET' > /dev/ttyUSB0
您应该会在机器的两侧看到消息。如果不是,则电缆或驱动程序可能存在一些问题。
编译内核
在内核配置中启用 KGDB*、KGDB_SERIAL*、KGDB_USB*、DEBUG_INFO、DEBUG_INFO_DWARF4、MAGIC_SYSRQ。在 TARGET 上编译并安装。
这里的主要目的是启用 KGDB 功能并在 vmlinux 中保留调试信息。
代理-代理设置
agent-proxy 充当 TARGET 串行端口的代理。它拆分串行端口以进行多路复用。一个用于主控制台 I/O,另一个用于 GDB 会话。因此,我们可以同时处理两者。您应该在 HOST 机器上运行代理代理。
git clone http://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git cd agent-proxy ; make ./agent-proxy 5550^5551 0 /dev/ttyUSB0,115200
这将重定向:
- TARGET 的控制台到 HOST:5550
- TARGET 到 HOST:5551 的 kgdb 监听端口
开始调试
首先,打开主控制台:
[Host] telnet localhost 5550
通过以下方式进入 kdb 模式:
[Target] echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc [Target] dmesg | tail
(你应该看到 KGDB: Registered I/O driver kgdboc,否则会失败)
[Target] echo g >/proc/sysrq-trigger Host> gdb vmlinux (gdb) target remote localhost:5551 Remote debugging using localhost:5551 kgdb_breakpoint () at kernel/debug/debug_core.c:1072 1072 wmb(); /* Sync point after breakpoint */ (gdb)
当我在目标任务中键入 kgdb 时,出现错误,因为权限被拒绝,如下所示
[3]kdb>kgdb 诊断:-22:权限被拒绝
...,我将不胜感激逐步明确的答案...,在此先感谢