有许多可能的错误和解决方法散布在不同的地方,任何人都可以提供至少一个详细的工作设置,以及准确的gem5和编译器版本,希望能在Ubuntu上使用吗?
答案 0 :(得分:2)
最小化Ubuntu设置
从gem5 8162e0da0285d346046151b2a45ceeb1baf63b8f开始,到2018年10月,适用于所有x86,arm和aarch64的C hello世界仅适用于Ubuntu 16.04和18.04。 x86以前可以正常工作,但是commit最终完成了一些必要的更改,以使glibc int代码run before main
正常工作。
鉴于gem5版本和其中一个Ubuntu版本,您可以运行以下C程序:
main.c
#include <stdio.h>
int main(int argc, char **argv) {
size_t i;
for (i = 0; i < (size_t)argc; ++i)
printf("%s\n", argv[i]);
return 0;
}
简单地为:
sudo apt-get install gcc
gcc -O0 -ggdb3 -std=c99 -static -o x86.out main.c
build/X86/gem5.opt \
configs/example/se.py \
-c x86.out \
-o 'asdf qwer' \
;
sudo apt-get install gcc-arm-linux-gnueabihf
arm-linux-gnueabihf-gcc -O0 -ggdb3 -std=c99 -static -o arm.out main.c
build/ARM/gem5.opt \
configs/example/se.py \
-c arm.out \
-o 'asdf qwer' \
;
sudo apt-get install gcc-aarch64-linux-gnu
aarch64-linux-gnu-gcc -O0 -ggdb3 -std=c99 -static -o aarch64.out main.c
build/ARM/gem5.opt \
configs/example/se.py \
-c aarch64.out \
-o 'asdf qwer' \
;
并在所有情况下都能产生正确的输出:
asdf
qwer
如How to run a dynamically linked executable syscall emulation mode se.py in gem5? 所述, -static
在ARM上是必需的
如果有人找到了较新的gem5版本或Ubuntu版本的安装程序,而在上述提到的其中一个拱门中无法正确执行此类最小C程序,请向电子邮件列表和CC发送详细描述您的系统设置的电子邮件我。
缺少系统调用
然后,当然,当您尝试运行更复杂的userland程序时,不可避免地会遇到未实现的syscall,因为其中有很多。
请不要将这些错误报告为错误,除非它们出现在glibc设置代码中(作为最小的C示例),因为我们已经在源代码本身上列出了缺少的系统调用。
相反,不要拖延,而是尝试打补丁!
许多系统调用很容易实现,例如参见8162e0da0285d346046151b2a45ceeb1baf63b8f。
然后,如果您尝试了补丁程序但失败了,请开始ping通邮件列表中的人员,并寻求有关如何使补丁程序正常工作的指导。
多线程
这是已知的主要痛点。我不知道状态是什么,但我听说它是片状的。
使ARM工作的最新修补程序
随着事情不可避免地再次发生,您可能可以从我们已完成的以下修复中汲取灵感,并可能自己解决问题:
FATAL: kernel too old
:How to solve "FATAL: kernel too old" when running gem5 in syscall emulation SE mode?固定于:260b0fc5381a47c681e7ead8e4f13aad45069665 openat
未实现。 Ubuntu 18.04上的glibc ARM启动代码开始使用它,这打乱了世界。由8162e0da0285d346046151b2a45ceeb1baf63b8f panic: Attempted to execute unimplemented instruction 'mrs'
。由6efe7e1abf9d289859eb23b52b3a319f15f2736a crosstool-NG
使用crosstool-NG而不是glibc来启用ulibc有时可以作为glibc初始化代码的解决方法,因为ulibc比glibc最少,所执行的代码更少。这不是理想的方法,但是如果您真的无法修补gem5,则可能会起作用。描述于:How to solve "FATAL: kernel too old" when running gem5 in syscall emulation SE mode?