解决gem5/M5 模拟器“kernel too old”错误

编译安装了gem5 ARM架构的模拟器,,运行使用arm-linux-gcc-4.4.3交叉编译链编译的文件时,出现了如下错误:

%——————————————————————————————————————–%

**** REAL SIMULATION ****info: Entering event queue @ 0. Starting simulation…FATAL: kernel too oldpanic: Page table fault when accessing virtual address 0x18@ cycle 351000[invoke:build/ARM/sim/faults.cc, line 70]Memory Usage: 624444 KBytesProgram aborted at cycle 351000Aborted (core dumped)

%——————————————————————————————————————–%

在google搜索一些资料之后,原因和解决方法如下:

出现“kernel too old” 的原因是不同版本的glibc库文件要依赖于不同版本的linux内核版本,并且编译器会限定运行该可执行文件所需的最低的内核版本。在编译时使用的编译器的版本比较高,它所指定的最低linux内核版本要高于m5声明的内核版本。

所以有两种解决方案。

第一种,调高m5声明的kernel版本。

找到源文件:

src/arch/arm/linux/process.cc: //不同架构请修改对应的arch

如下代码段:67-71行

strcpy(name->sysname, “Linux”); strcpy(name->nodename, “m5.eecs.umich.edu”); strcpy(name->release, “x.x.xx”); strcpy(name->version, “#1 Mon Aug 18 11:32:15 EDT 2003”); strcpy(name->machine, “armv7l”);

修改 strcpy(name->release, “x.x.xx”) —–>strcpy(name->release, “2.6.35”);

我的arm-linux-gcc版本是4.4.3,将上述代码修改为 “2.6.35”。如有需要,请查找内核版本号历史,修改更高一点。

保存,重新编译m5,即可成功运行。

第二种,使用较低版本的arm-linux-gcc。

我没有测试第二种,应该是可以的,只要将arm-linux-gcc的版本将下来,对内核版本的要求自然就低了。

你并不一定会从此拥有更美好的人生,

解决gem5/M5 模拟器“kernel too old”错误

相关文章:

你感兴趣的文章:

标签云: