我正在将Buildroot 2018.02用于IMX6板和基于GCC 2017.11(GCC 7.2.1)的Linaro外部太链2017.11
现在,我在目标上添加了一些调试工具,例如gdbserver。
如果我使用选项"Build cross gdb for the host"
并在BR2_PACKAGE_GDB_SERVER
菜单中为主机选择gdb调试器版本7.11.x以及gdbserver("Target Packages > Debugging,.."
),一切都很好。 Buildroot中还有其他版本的gdb,例如7.12.x和8.0.x。
但是,对于外部工具链,推荐的方法是:
https://github.com/mbats/eclipse-buildroot-bundle/wiki/Tutorial-:-How-to-debug-a-remote-application-%3F意味着仅激活Buildroot中的"Copy gdb server to the Target"
选项(尽管该帖子有些陈旧)
我注意到BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
描述说Linaro gdb基于gdb 8.0,因此是我正在使用的新版本(7.11.x)。
但是当我这样做时,我在目标板上有以下消息:
# gdbserver
-sh: gdbserver: not found
尽管有以下几点:
# which gdbserver
/usr/bin/gdbserver
gdbserver二进制文件位于目标上。
如何在Buildroot中解决此问题?
此外,我还有两个问题:
谢谢您的帮助。
答案 0 :(得分:3)
Linaro 2017.11工具链中的gdbserver二进制文件已损坏:它请求/usr/lib/ld.so.1
作为程序解释器(请参见下文),但该程序解释器不存在。
您可以尝试创建符号链接/usr/lib/ld.so.1 -> /lib/ld-linux-armhf.so.3
(如果可以,请将其添加到文件系统覆盖图中)。另外,您可以通过将程序解释器放在可执行文件/lib/ld-linux-armhf.so.3 /usr/bin/gdbserver
之前来明确指定程序解释器。
“程序解释器”是ELF文件的参数,它指向一个程序,该程序用于将ELF文件加载到内存中并开始执行它。程序解释器的主要职责是查找并加载程序所需的动态库。因此,通常将其称为“动态库加载器”或ld.so
。它是与工具链(特别是标准C库(glibc))一起构建和安装的。链接程序时,链接器还将设置程序解释器(从libc.so
复制)。显然,Linaro做了一些特别的事情,最终导致gdbserver
可执行文件中的程序解释器错误。
答案 1 :(得分:2)
# gdbserver
-sh: gdbserver: not found
后视以下内容:
# which gdbserver
/usr/bin/gdbserver
最有可能:
gdbserver
是动态链接的二进制文件,并且使用readelf -l /usr/bin/gdbserver | grep -i interpreter
来找出gdbserver
需要什么运行时加载器。验证目标上不存在该文件。将其复制到目标并享受。