我使用ARMv7作为目标机器。我已经为target编译了linux源代码2.6.34.13
目标通过使用minicom的串行端口与主机(linux开发机)连接。
目标加载了新内核,并在命令提示符中启用了kgdb。

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc
$ echo g > /proc/sysrq-trigger

正在输入kgdb…显示消息并等待命令。
在主机端,
$arm-none-linux-gnueabi-gdb vmlinux

    gdb > set remotebaud 115200
    gdb > set debug remote 1
    gdb > target remote /dev/ttyS0

之后,默认情况下会进行一些命令通信。
qSupported从主机发送到目标。但目标不支持qsuppled,因此返回$00。类似地,发送了?HC-1命令,但收到了正确的响应。
但命令没有收到目标的任何响应。
我怀疑是vmlinux。因为如果我在gdb中给出qOffsets,它不会显示10行代码,而是说
arch/arm/kernel/head.S : No such file or directory.

注意:内核编译在服务器中完成。所以在开发机器中没有可用的源。但是手臂GDB在寻找头部。
我不知道我犯了什么错。我需要为整个内核加载符号。在这方面引导我。

最佳答案

KGDB正在寻找头部,这不是一个错误。如果您查看here您将看到源树中有一个head.s文件。只是一个汇编文件而已。这个平台有几个用汇编语言编写的源文件。
这是正常的,因为有些指令,特别是引导序列和其他“低级”功能,是用汇编程序编写的,因为它更容易。
正如已经在注释中所写的,gdb需要在调试时浏览源代码。在调试部分(包含调试符号,并在使用-g运行gcc时生成),除其他外,还有对源文件、行和列的“仅”引用。有关gcc调试符号的更多信息和进一步链接,请参见here
克格勃正在寻找head.S是一个好兆头,表明你做的事情是正确的。如果您有可用的源代码(它可以很简单地取消正确版本的tarball),只需在这个源代码树中运行kgdb,或者使用-d参数添加源代码搜索路径,当然,这是在您的开发机器上。

09-04 08:59