歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 解決gem5/M5 模擬器“kernel too old”錯誤

解決gem5/M5 模擬器“kernel too old”錯誤

日期:2017/2/28 15:33:57   编辑:Linux教程

編譯安裝了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的版本將下來,對內核版本的要求自然就低了。

Copyright © Linux教程網 All Rights Reserved