1. 程式人生 > >Gem5在全系統(FS)模式下執行自己的測試程式

Gem5在全系統(FS)模式下執行自己的測試程式

上一篇文章講了怎麼用Gem5構建和啟動FS模式,這一次想看看怎麼在模擬的環境中測試自己的程式.
我這裡還是用的上次提到的X86的環境,整體過程是以下幾個步驟:

1.掛載映象

ypf@ypf-PC:~/ws$ sudo mount -o,loop,offset=32256 full_system_images/disks/linux-x86.img /mnt

2.將可執行程式拷貝到掛載的映象中

ypf@ypf-PC:~/ws$ sudo cp mountfile/hello /mnt/test

3.解除安裝映象

ypf@ypf-PC:~/ws$ sudo umount /mnt

4.啟動全系統

一個終端啟動:

ypf@ypf-PC:~/ws$ sudo gem5-40c18bb90501/build/X86/gem5.opt gem5-40c18bb90501/configs/example/fs.py

另外一個終端連線:

ypf@ypf-PC:~/ws/gem5-40c18bb90501/util/term$ sudo m5term 127.0.0.1 3456

5.執行程式

(none) test # ./hello
FATAL: kernel too old
hello[810]: segfault at 00002ba4ed02dde0 rip 0000000000406227 rsp 00007fff1fca5270 error 4
Segmentation fault

這裡遇到一個問題,提示FATAL: kernel too old,查了網上相關資料

出現“kernel too old” 的原因是不同版本的glibc庫檔案要依賴於不同版本的linux核心版本,並且編譯器會限定執行該可執行檔案所需的最低的核心版本。在編譯時使用的編譯器的版本比較高,它所指定的最低linux核心版本要高於m5宣告的核心版本

按照這個意思,就是要調高m5宣告的kernel版本
使用,uname -a檢視核心版本

(none) test # uname -a
Linux (none) 2.6.22.9 #2 Mon Oct 8 13:13:00 PDT 2007 x86_64 GNU/Linux

於是按照網上的說法

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,即可成功執行。

我將我的對應版本號改為4.9.30,但是實際操作後發現核心版本並沒有變化,沒有任何效果,依然報同樣的錯誤.
這個問題對當前其他測試工作影響不大,留作日後處理.