我对KGDB非常陌生,从主机连接目标时出现问题,出现以下错误。
(gdb) target remote /dev/ttyUSB0 Remote debugging using /dev/ttyUSB0 Ignoring packet error, continuing... warning: unrecognized item "swreak" in "qSupported" response warning: unrecognized item "ReloInsn" in "qSupported" response warning: unrecognized item "QTread' [3]kdb> " in "qSupported" response Bogus trace status reply from target: 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设置
agent-proxy充当TARGET串行端口的代理。它分裂 用于多路复用的串行端口。一个用于主控制台I / O, 其他用于GDB会话。因此,我们可以同时工作。您 应该在HOST机器上运行agent-proxy。
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
这将重定向:
- 目标主机为主机:5550的控制台
- TARGET的HOST:5551的kgdb监听端口
开始调试
首先,打开主控制台:
[Host] telnet localhost 5550
通过以下方式进入kdb模式:
[Target] echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc [Target] dmesg | tail
(您应该看到KGDB:注册的I / O驱动程序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 diag: -22: Permission denied
...,我希望您能按步骤给出明确的答案...,在此先感谢
答案 0 :(得分:0)
diag: -22: Permission denied
该错误意味着您的内核中默认情况下对调试器功能的访问为prohibited。为了解锁调试器,您需要执行以下命令:
echo 1> / sys / module / kdb / parameters / cmd_enable
或添加内核启动参数:
kdb.cmd_enable = 1
更多信息here