解决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 old
panic: Page table fault when accessing virtual address 0x18

 @ cycle 351000
[invoke:build/ARM/sim/faults.cc, line 70]
Memory Usage: 624444 KBytes
Program aborted at cycle 351000
Aborted (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的版本将下来,对内核版本的要求自然就低了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21061.html