相关疑难解决方法(0)

将动态链接器与 qemu-arm 一起使用

我有一个使用工具链编译的非常简单的arm可执行文件arm-linux-gnueabiqemu-arm我可以毫无问题地执行它:

$ qemu-arm -L /usr/arm-linux-gnueabi/ ./a.out
Hello world !
Run Code Online (Sandbox Code Playgroud)

不带任何参数运行链接器似乎也有效:

qemu-arm /usr/arm-linux-gnueabi/lib/ld-linux.so.3
Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
You have invoked `ld.so', the helper program for shared library executables.
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望链接器运行我的可执行文件,则会发生以下情况:

$ qemu-arm -L /usr/arm-linux-gnueabi/ /usr/arm-linux-gnueabi/lib/ld-linux.so.3 a.out
a.out: error while loading shared libraries: a.out: cannot open shared object file
Run Code Online (Sandbox Code Playgroud)

这是 strace 的输出:https://pastebin.com/uJ7AhBdh

知道为什么会发生这种情况吗?

linux arm qemu

5
推荐指数
1
解决办法
6408
查看次数

如何在 gem5 中运行动态链接的可执行系统调用仿真模式 se.py?

如何解决:运行gem5在系统调用仿真SE模式时,“致命的内核太旧”?我设法在某些条件下运行了一个静态链接的 hello world。

但是,如果我尝试针对 stdlib 运行一个 ARM 动态链接的:

./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
Run Code Online (Sandbox Code Playgroud)

它失败了:

fatal: Unable to open dynamic executable's interpreter.
Run Code Online (Sandbox Code Playgroud)

如何让它找到解释器?希望不要在我的主机根目录上复制我的交叉工具链的解释器。

对于 x86_64,如果我使用我的本机编译器,它就可以工作,并且正如预期的strace那样,它使用本机解释器,但如果我使用交叉编译器,它就不起作用。

当前的常见问题解答说不能使用动态可执行文件:http : //gem5.org/Frequently_Asked_Questions但我不相信它,然后这些演示文稿提到了它:

但不是如何实际使用它。

QEMU 用户模式有这个-L选项。

在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 中测试

https://www.mail-archive.com/gem5-users@gem5.org/msg15582.html

gem5

3
推荐指数
1
解决办法
1858
查看次数

标签 统计

arm ×1

gem5 ×1

linux ×1

qemu ×1