2013-01-04 42 views
14

使用ARMv7作为目标机器。我编译了Linux源文件2.6.34.13作为目标。如何在ARM上使用kgdb?

目标通过使用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 

在此之后,一些命令通信在默认情况下发生的。

  1. qSupported从主机发送到目标。但是qSuppoted不被目标支持,所以返回$#00。类似地,?,HC-1命令被发送但是收到适当的响应。

  2. 但是qOffsets命令没有收到来自目标的任何响应。

我怀疑vmlinux。因为如果我给list在gdb,它没有显示10行的代码,而不是它说

arch/arm/kernel/head.S : No such file or directory. 

注::编译内核服务器来完成。所以在开发机器中没有可用的资源。但是arm-gdb寻找head.S似乎。

我不知道我在做什么错误。我需要为整个内核加载符号。在这方面指导我。

+0

我不知道,但你有没有“主机”上编译内核被用于调试? &你没有把代码移动到其他地方? – anishsane

+1

这就是为什么它无法找到源代码? – anishsane

+0

'kgdb'是否需要源代码可用?也许有一个命令行选项告诉'kgdb'不要查找代码。 – BenjiWiebe

回答

1

最后主机到目标通信建立只是线路延迟的bcos。开发机器中的内核源与超时问题之间没有任何关系。

对于一些命令的超时问题的种类说qOffsetqSupported通过使用GtkTerm代替小型机作为串口通讯工具解决。 区别是GtkTerm“行延迟”选项。所以当它被配置为〜250时,此后没有超时消息。只需建立连接并在默认中断点等待。如果有人知道如何给这个"line delay" Minicom中将会给大家更多的帮助。

是ofcourse,我们需要为list要执行的命令的源代码。但如果没有这些人士还,我们可以调试即si, bt可与vmlinuxsystem.map的帮助下执行。

注::设置调试远程1是没有必要的。这给出了主机到命令通信的详细显示。有关更详细的视图,set debug serial 1

+0

这是一个答案? – unwind

+0

其观察。 – Jeyaram

1

kgdb正在寻找head.S不是错误。如果你看here你会看到源树中有一个head.S文件。这是一个汇编文件。这个平台有几个以汇编器编写的源文件。

这很正常,因为某些指令尤其是引导序列和其他“低级”功能是用汇编语言编写的,因为它更容易。

正如已经写过的评论,gdb需要资源在调试时浏览它们。在包含调试符号并在运行gcc时生成的debug-sections中,只有对源文件,行和列等的引用是唯一的。有关更多信息,请参阅here以及有关使用gcc调试符号的更多链接。

kgdb正在寻找head.S是一个很好的迹象,表明您正在做的事情是正确的。如果你有可用的源代码(并且可以像解开正确版本的tarball一样简单),只需在源代码树中运行kgdb,或者使用-d参数来添加源搜索路径,当然在你的开发机器上。

+0

那翔实。谢谢。 – Jeyaram