在模拟系统上运行hello测试程序,就是一个简单的输出功能,结果报下面的FATAL: kernel too old的错误。
(none) / # ./hello
FATAL: kernel too old
hello[810]: segfault at 00002b7e1e58ade0 rip 00000000004069e7 rsp 00007fff58f6a590 error 4
Segmentation fault
查看下模拟系统的目前版本,可以看到内核是2.6.22.9的版本。
(none) / # uname -a
Linux (none) 2.6.22.9 #2 Mon Oct 8 13:13:00 PDT 2007 x86_64 GNU/Linux
这个时候我们可以修改gem5目录下的src/arch/x86/Linux/的process.cc,之前搜网上教程是修改syscalls.cc,可是我这个目录下根本就没有这个文件,而我在process.cc中找到了所需要修改的函数strcpy(name->release, “x.x.xx”)
zzh@ubuntu14:~/gem5$ cd src/arch/x86/linux/
zzh@ubuntu14:~/gem5/src/arch/x86/linux$ ls
linux.cc linux.hh process.cc process.hh system.cc system.hh
zzh@ubuntu14:~/gem5/src/arch/x86/linux$ vim process.cc
x.x.xx字段,具体的修改值是不固定的这和编译器有关,只要修改后的值比编译器所对应的值高就行,可以在终端用file 指令查看一个已经经过编译的文件中所对应的Linux版本,然后将gem5中的值改的比该值大就行。