3

我正在尝试使用 GDB 使用 OpenOCD 和 GNU ARM 工具链(随 MacPorts 安装)调试 Stellaris LM3S8962 评估板,每当我在 GDB 中设置远程目标时,它总是返回“Malfomred 对偏移查询的响应,qOffsets”。关于可能出现问题的任何想法?有什么我想念的吗?

[bcochran@narada arm]$ arm-none-eabi-gdb
GNU gdb (GDB) 7.3
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin10.7.0 --target=arm-none-eabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) set remotebaud 115200
(gdb) set debug remote 1
(gdb) file ~/dev/eclipse_workspace/hello_world_arm/bin/main.axf
Reading symbols from /Users/bcochran/dev/eclipse_workspace/hello_world_arm/bin/main.axf...(no debugging symbols found)...done.
(gdb) target remote localhost:4444
Remote debugging using localhost:4444
Sending packet: $qSupported:qRelocInsn+#9a...putpkt: Junk: {{}~Open On
Nak
Sending packet: $qSupported:qRelocInsn+#9a...putpkt: Junk: Chip Debugger
> 
Ack
Packet received: qSupported:qRelocInsn+
Packet qSupported (supported-packets) is supported
...
Packet qAttached (query-attached) is supported
Sending packet: $qOffsets#4b...Ack
Packet received: qOffsets
Malformed response to offset query, qOffsets

这是 openocd 输出...一旦出现格式错误的响应,openocd 就会断开 telnet 连接...

[bcochran@narada bin]$ openocd -f ../openocd/luminary.cfg -f ../openocd/stellaris.cfg
Open On-Chip Debugger 0.6.0-dev-00014-g827057f (2011-08-09-22:02)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
500 kHz
Info : clock speed 500 kHz
Info : JTAG tap: lm3s.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Info : lm3s.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'telnet' connection from 4444
Error: error during read: Connection reset by peer
Info : dropped 'telnet' connection

这是我的 arm-none-eabi-* 工具链的版本输出...

[bcochran@narada tcl]$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/arm-none-eabi/4.6.1/lto-wrapper
Target: arm-none-eabi
Configured with: ../gcc-4.6.1/configure --prefix=/opt/local --target=arm-none-eabi --enable-languages=c,objc,c++,obj-c++ --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/arm-none-eabi-gcc --with-system-zlib --disable-nls --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --enable-stage1-checking --enable-multilib --with-newlib --enable-interwork
Thread model: single
gcc version 4.6.1 (GCC)

[bcochran@narada tcl]$ arm-none-eabi-gdb -v
GNU gdb (GDB) 7.3
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin10.7.0 --target=arm-none-eabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.

我能够使用工具链进行编译,并使用 OpenOCD 刷新生成的 .bin 文件。仅通过搜索网络,我无法找到“格式错误的响应”问题的解决方案。

提前感谢您的任何建议或帮助!

更新

多亏了@turbo-j 和@guy-sirton 的回答,我才能更进一步……到目前为止,最有帮助的是我确实使用了错误的端口(4444 而不是 3333),但现在我得到了以下是否添加-c "init" -c "halt" -c "reset halt"到我的 openocd 命令字符串:

(gdb) target remote localhost:3333
Remote debugging using localhost:3333
Remote 'g' packet reply is too long:     0080004000000000040000220f0000002833405451332abc009600a4d2b86092c0c118c03040d6f0284dbb93204b40c2000000000c010020ffffffff550400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000001

(这是在 qOffsets req/resp 之后,现在通过了)

在 OpenOCD 方面:

Info : accepting 'gdb' connection from 3333
Warn : acknowledgment received, but no packet pending
Info : dropped 'gdb' connection

有时undefined debug reason 6 - target needs reset在 OpenOCD 控制台上会出现...不知道现在发生了什么,但它似乎更接近正常运行

更新 2

似乎如果我不加载文件“main.axf”或“main.o”,我不会遇到Remote 'g' packet reply is too long但我没有得到任何符号......我注意到其他网站主要处理 .elf 扩展名。有什么不同?我正在使用来自 StellarisWare 的“Hello World”示例,它从make命令生成 main.axf、main.bin(闪存写入和运行良好)、main.d、main.o。我的 Makefile 有什么奇怪的吗?

4

5 回答 5

4

这是一个类似于@athquad 提到的补丁。有关更多信息,请参阅他的答案。感谢他有效地将我指向正确的位置,并且非常遗憾地提供了补丁但没有提供它。:-P

http://pastebin.com/rdFF2eZd

补丁针对 openocd 提交 631b80fd0835055bb385314f569f589b99d7441d

要使用:(./configure 选项取决于 jtag 硬件)

git clone git://git.code.sf.net/p/openocd/code openocd
cd openocd
patch -p1 < /path/to/patch/file
./bootstrap
./configure --enable-maintainer-mode --enable-ft2232_libftdi
nice make && sudo make install
于 2012-03-28T22:55:53.087 回答
3

你使用了错误的端口。用于target remote localhost 3333GDB 到 OpenOCD 的连接。端口 4444 旨在通过终端进行人机交互,并且可以与 GDB 连接一起使用。

于 2011-08-15T13:41:17.747 回答
1

我刚刚遇到了同样的“'g'数据包回复太长”错误并追踪它的原因。

似乎很长一段时间以来,GNU ARM 工具一直使用具有 9 个过时浮点寄存器的 ARM 模型。OpenOCD 对此很明智,并响应 GDB 的寄存器请求提供虚拟值。但是,包括 GDB 在内的最近的 eabi 工具链已经更新,因此您的 GDB 不再需要这些寄存器 - 因此消息。

在 OpenOCD 源代码中,我在 armv7m.c 中修补了 armv7m_get_gdb_reg_list() 以使其工作,但我的补丁不够聪明,无法知道正在使用哪个 GDB 版本 - 它只是使用 #ifdef 开关 - 所以它需要一点与 OpenOCD 源代码集成的更多工作。

任何想要的人都可以使用补丁。

于 2011-10-05T12:47:11.277 回答
1

如果您不想编译 OpenOCD,作为 tacos 和 atquad 的回答,您可以使用较旧版本的 GNU ARM 工具链(例如 7.2.5 很好)。(预编译的 0.4.0 和 0.5.0 窗口都存在这个问题)。

于 2012-08-17T11:12:29.620 回答
0

我在 ARM 上进行了很多远程调试,但使用了不同的处理器、操作系统和工具链 :-) 不过,这里有一些想法。

这个建议:

openocd -f openocd.cfg -c "init" -c "halt" -c "reset halt"

来自这里: http: //michaldemin.wordpress.com/2010/02/22/part-2-debugging-with-gdb-and-openocd/

除此以外:

  • 远程和您的 gdb 之间的远程 gdb 协议不匹配。您可以尝试使用不同版本的工具链。谷歌并找到对其他人有用的东西。

  • 一个沟通问题。尝试降低波特率?确保串口参数正确。

于 2011-08-14T19:27:05.177 回答