【发布时间】:2019-01-26 12:05:43
【问题描述】:
我对 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 时,出现 Permission denied 错误,如下所示
[3]kdb>kgdb 诊断:-22:权限被拒绝...,我将不胜感激步骤中的明确答案...,提前致谢
【问题讨论】:
-
请正确格式化您的问题,它会增加可读性:stackoverflow.com/help/formatting