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

于是按照网上的说法


https://blog.csdn.net/sdupine/article/details/7940867
找到源文件:

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,但是实际操作后发现内核版本并没有变化,没有任何效果,依然报同样的错误.
这个问题对当前其他测试工作影响不大,留作日后处理.

你可能感兴趣的:(linux)