将GDB通过串口连接到KGDB构建内核的问题

将GDB通过串口连接到KGDB构建内核的问题,第1张

概述我想通过串口ttyS0从我的64位suse机器调试MIPS linux驱动程序.使用的gdb通过LAN调试应用程序而不是kgdb over serial.我使用这个page以及其他一些来开始调试但没有最终结果.我的内核使用以下设置编译:CONFIG_MAGIC_SYSRQ=y CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y CON

我想通过串口ttyS0从我的64位suse机器调试MIPS linux驱动程序.使用的gdb通过LAN调试应用程序而不是kgdb over serial.我使用这个page以及其他一些来开始调试但没有最终结果.

我的内核使用以下设置编译:

CONfig_MAGIC_SYSRQ=yCONfig_HAVE_ARCH_KGDB=yCONfig_KGDB=yCONfig_KGDB_SERIAL_CONSolE=y# CONfig_KGDB_TESTS is not setCONfig_CMDliNE="kgdboc=ttyS0,115200"

如果我运行gdb:

gdb vmlinux(gdb) set remotebaud 115200(gdb) set deBUG remote 1(gdb) target remote /dev/ttyS0

我可以观察以下输出:

输出(GDB_TERMINAL):

(gdb) target remote /dev/ttyS0Remote deBUGging using /dev/ttyS0Sending packet: $qSupported:qReLocinsn+#9a...AckTimeout in mID-packet,retryingTimed out.Timed out.Ignoring packet error,continuing...Packet qSupported (supported-packets) is supportedwarning: unrecognized item "qSupported:qReLocins" in "qSupported" responseSending packet: $Hg0#df...NakSending packet: $Hg0#df...AckPacket received: Hg0Sending packet: $?#3f...Packet instead of Ack,ignoring itAckTimed out.Timed out.Timed out.Ignoring packet error,continuing...Sending packet: $Hc-1#09...NakSending packet: $Hc-1#09...AckReply contains invalID hex digit 36

输出(REMOTE_TARGET):

+$?#3f09n+#9a$Hg0#df+09

没有更多的事情发生!

我也测试了sysrq但是提到的sysrq-option’g’似乎不适合!

echo b > /proc/sysrq-trigger #successfully rebootecho g > /proc/sysrq-trigger #prints only the help message (SysRq : HELP : loglevel(0-9) reBoot Crash termin .....)

sysrq是否正常运行?
有没有我错过的东西?
有没有办法测试我的远程设备上运行的kgdb?最佳答案我有很多问题要通过串行链接运行gdb with kgdb.我的主机是Intel x86 linux机器,目标是ARM 32位RaspBerry Pi 2.目标是与USB to TTL Serial Cable连接.以下是关键问题及其解决方案.

1)不要与屏幕或minicom同时使用gdb.

在tty上连接了minicom,GDB挂起然后崩溃:

(gdb) target remote /dev/ttyUSB0Ignoring packet error,continuing...Ignoring packet error,continuing.../build/gdb-cXfXJ3/gdb-7.11.1/gdb/thread.c:89: internal-error: inferior_thread: Assertion `tp' Failed.A problem internal to GDB has been detected,further deBUGging may prove unreliable.```

当屏幕连接时,GDB无法连接:

(gdb) tar rem /dev/ttyUSB0/dev/ttyUSB0: Device or resource busy.

2)损坏的数据包和超时

InvalID packet,Bad checksum,Saw new packet start in mIDdle of old one,Timed out

使用支持目标体系结构的GDB. x86上的默认GDB(至少在Ubuntu上)不支持arm目标.请使用gdb-multiarch或与交叉编译工具集相对应的GDB,即arm-linux-gnueabihf-gdb.列出可用的(gdb)set architecture命令的architecutres.在我的情况下,自动架构正确地检测到手臂目标.

3)在连接之前必须在目标上触发KGDB

Remote replIEd unexpectedly to ‘vMustReplyEmpty’: vMustReplyEmpty

Malformed response to offset query,qOffsets

GDB尝试连接,但目标未处于调试模式.必须在连接GDB之前触发deBUG sysrq.键盘快捷键对我不起作用.运行命令echo g> / proc / sysrq-通过SSH作为root工作.

4)配置波特率

warning: InvalID baud rate 115200. Maximum value is 38400.
/dev/ttyUSB0: InvalID argument.

配置的波特率必须在kgdboc内核参数和GDB之间匹配.就我而言,不支持波特率115200.建议将波特率设置为38400是必要的.使用内核cmdline重新启动目标:kgdboc = ttyAMA0,38400然后:

(gdb) set remotebaud 38400(gdb) target remote /dev/ttyUSB0Remote deBUGging using /dev/ttyUSB00x800b4730 in kgdb_breakpoint ()

解决这些问题后,内核调试按预期工作. 总结

以上是内存溢出为你收集整理的将GDB通过串口连接到KGDB构建内核的问题全部内容,希望文章能够帮你解决将GDB通过串口连接到KGDB构建内核的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1050083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存