gem5 ARM中缺少系统调用

时间:2018-07-10 01:47:25

标签: linux arm cross-compiling system-calls gem5

我在gem5中出现以下错误。这仅在ARM中发生。使用X86时,我看到一些系统调用被忽略了,但是没有一个致命错误。

null

我在gem5的常见问题解答中找到了this的答案。但是现在它显示了此错误:

tomas@ubuntu:~/gem5$ ./build/ARM/gem5.opt configs/example/arm/starter_se.py ../tests_gem5/hello
gem5 Simulator System.  http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.

gem5 compiled Jul  9 2018 17:09:01
gem5 started Jul  9 2018 18:07:37
gem5 executing on ubuntu, pid 5064
command line: ./build/ARM/gem5.opt configs/example/arm/starter_se.py ../tests_gem5/hello

info: 1. command and arguments: ['../tests_gem5/hello']
Global frequency set at 1000000000000 ticks per second
warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (1024 Mbytes)
warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (1024 Mbytes)
0: system.remote_gdb: listening for remote gdb on port 7000
info: Entering event queue @ 0.  Starting simulation...
fatal: syscall openat (#322) unimplemented.
Memory Usage: 2246296 KBytes

我正在使用以下命令在Ubuntu 18.04中进行编译:

warn: ignoring syscall openat(...)
FATAL: kernel too old
warn: ignoring syscall rt_sigprocmask(...)
      (further warnings will be suppressed)
fatal: syscall gettid (#224) unimplemented.

是否有人找到一种针对ARM的简单hello世界的编译方法,该方法不使用gem5不支持的syscall?有预编译的示例,因此必须有一种方法。

2 个答案:

答案 0 :(得分:1)

更新:x86,arm和aarch64 C hello world正在使用Ubuntu 18.04预打包的工具链,请参见:How to compile and run an executable in gem5 syscall emulation mode with se.py?

以前曾在“ How to solve "FATAL: kernel too old" when running gem5 in syscall emulation SE mode?

中询问过“致命:内核太旧”

如该页所述,该消息来自glibc完整性检查,ct-ng是克服该问题的最明智的方法。

对于未实现的系统调用,我不知道为什么x86会忽略它们并导致arm炸毁,但是如果您给出x86 syscall忽略的消息,则应该很容易在源代码中对此加以重复。

但是炸毁行为似乎是明智的:当程序尝试运行未实现的系统调用时,您如何期望程序正常运行?

两个体系结构中大多数系统调用都未实现,如:

所以,我只看到两个明智的解决方案:

  • 实施syscall,这对大多数人来说都很容易,并给gem5发送补丁
    • 看看其他拱门是否通过grepping实现了它,有时另一个拱门已经实现了它,您只需要把事情写下来
    • 您还可以尝试忽略syscall,即TODO:ARM中有什么好方法吗?但是您必须确保这没有关系。
  • 放弃syscall仿真,只使用更精巧的完整系统:When to use full system FS vs syscall emulation SE with userland programs in gem5?

答案 1 :(得分:0)

uclibc是针对gem5进行编译的答案。它不使用glibc使用的一堆syscall,gem5尚未实现。因此,使用crosstool-ng和arm-unknown-linux-uclibcgnueabi解决了该问题。