【问题标题】:KGDB, Remote connection ErrorKGDB,远程连接错误
【发布时间】: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:权限被拒绝

...,我将不胜感激步骤中的明确答案...,提前致谢

【问题讨论】:

标签: gdb kgdb


【解决方案1】:
diag: -22: Permission denied

这个错误意味着在你的内核中默认访问调试器函数是prohibited。为了解锁调试器,您需要执行以下命令:

echo 1 > /sys/module/kdb/parameters/cmd_enable

或添加内核启动参数:

kdb.cmd_enable=1

更多信息here

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多