问题描述:
在gem5上运行spec2006的bzip2,
./build/X86/gem5.opt ./configs/example/se.py -c ../installspec2006/benchspec/CPU2006/401.bzip2/exe/bzip2_base.amd64-m64-gcc41-nn -o ../installspec2006/benchspec/CPU2006/401.bzip2/data/test/input/control
时,出现错误:
Global frequency set at 1000000000000 ticks per second
0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
FATAL: kernel too old
panic: Tried to read unmapped address 0xffffffffffffffd0.
@ cycle 818500
[invoke:build/X86/arch/x86/faults.cc, line 160]
Memory Usage: 607892 KBytes
Program aborted at cycle 818500
我查找资料,说
在编译时使用的编译器的版本比较高,它所指定的最低linux内核版本应该高于m5声明的内核版本。
所以可以通过提高m5声明的kernel版本来解决这个问题。
对于arm结构和alpha架构可以修改src/arch/arm/linux/process.cc或者src/arch/alpha/linux/process.cc文件中的unameFunc函数中的kernel版本,
但是对于x86结构如何修改m5声明的kernel版本啊?我看x86中对应的process.cc文件没有unameFunc函数,x86是在哪里声明的kernel版本啊?
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------%
首先参见http://blog.csdn.net/sdupine/article/details/7940867可知到出现kernel too old的原因,但是按照他的说法在x86对应的
src/arch/x86/linux/process.cc的文件下找不到unameFunc函数,所以按照他第一种解决方法不能解决这个问题。
那么在那里可以找到unameFunc函数呢,通过查找资料,http://www.foxwolf.net/gihun/可知,要修改文件./src/arch/x86/linux/syscalls.cc
下的unameFunc函数,
具体如下:
unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
int index = 0;
TypedBufferArg
strcpy(name->sysname, "Linux");
strcpy(name->nodename, "hubuntu.kaist.ac.kr");
strcpy(name->release, "xxxx");
strcpy(name->version, "#43-Ubuntu SMP Fri Jul 6 14:25:57 UTC 2012");
strcpy(name->machine, "x86_64");
name.copyOut(tc->getMemProxy());
return 0;
}
将黄色阴影部分修改成的大一点即可,我的修改成2.6.35即可成功运新。
参考:http://blog.csdn.net/sdupine/article/details/7940867
,http://www.foxwolf.net/gihun/