参考博客:https://blog.csdn.net/xiao_huocai/article/details/82225193
首先安装g++ (4.7版本及以上)、Python (2.5版本及以上)、 SCons (0.98.1版本及以上)、 SWIG (2.0.4版本及以上)、zlib、m4、 protobuf (2.1版本及以上)。(我有些版本比这里说的低,但是也编译成功了)
安装g++:
sudo apt-get install g++
安装python:
sudo apt-get install python
安装Scons:
sudo apt-get install scons
安装SWIG:
sudo apt-get install swig
安装zlib:
sudo apt-get install zlib1g-dev
安装m4:
sudo apt-get install m4
安装protobuf:
sudo apt-get install libprotobuf-dev
安装 libprotobuf-dev 和 libgoogle-perftools-dev:
sudo apt-get install libprotobuf-dev
sudo apt-get install libgoogle-perftools-dev
安装boost:
sudo apt-get install libboost-all-dev
安装完了就可以安装gem5了,首先从http://repo.gem5.org/gem5/archive/tip.tar.bz2下载压缩包,解压编译:
scons build/X86/gem5.opt
结构编译过程出现问题及时解决,比如缺少boost,就按照上面的命令安装boots。缺少python的pip,就去安装。我第一次编译出问题了,然后关机睡了一觉第二天重新试了一次就好了,真的很玄学。
测试命令
./build/X86/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/x86/linux/hello
如果成功输出了hello world则证明编译成功。
首先下载对应的全系统文件,本次实验使用的是x86体系结构。使用如下命令:
wget http://www.m5sim.org/dist/current/x86/x86-system.tar.bz2
wget http://www.m5sim.org/dist/current/m5_system_2.0b3.tar.bz2
完了在gem5目录下新建文件夹fs-image,并把x86-system.tar.bz2解压到fs-image文件夹下。将m5_system_2.0b3.tar.bz2解压后的disks目录下的linux-bigswap2.img放到x86-system的disks目录下。
修改环境变量
gedit ~/.bashrc
export M5_PATH=$M5_PATH:/home/jzy/gem5/fs-image/
source ~/.bashrc
进入gem5文件夹,启动X86架构的FS模式:
build/X86/gem5.opt configs/example/fs.py
修改gem5目录下的configs/common/SysPaths.py文件:
except KeyError:
path = [ '/dist/m5/system', '/home/jzy/gem5/fs-image' ]
修改gem5目录下的configs/common/Benchmarks.py文件,将x86root.img改为linux-x86.img:
elif buildEnv['TARGET_ISA'] == 'x86':
return env.get('LINUX_IMAGE', disk('/home/jzy/gem5/fs-image/x86-system/disks/linux-x86.img'))
执行运行命令:
sudo build/X86/gem5.opt configs/example/fs.py --kernel=/home/jzy/gem5/fs-image/x86-system/binaries/x86_64-vmlinux-2.6.22.9 --disk-image=/home/jzy/gem5/fs-image/x86-system/disks/linux-x86.img
打开另一个终端,用于连接FS模拟的全系统。这里使用的是m5term,先编译安装这个工具,在gem5的目录下有。
cd util/term/
make
make install
完成后执行如下命令:
./m5term 127.0.0.1 3456
显示如下信息表示链接成功:
==== m5 slave terminal: Terminal 0 ====
Linux version 2.6.22.9 (blackga@nacho) (gcc version 4.1.2 (Gentoo 4.1.2)) #2 Mon Oct 8 13:13:00 PDT 2007
Command line: earlyprintk=ttyS0 console=ttyS0 lpj=7999923 root=/dev/hda1
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 0000000020000000 (usable)
BIOS-e820: 0000000020000000 - 00000000c0000000 (reserved)
BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
end_pfn_map = 1048576
kernel direct mapping tables up to 100000000 @ 8000-d000
......
Freeing unused kernel memory: 232k freed
INIT: version 2.86 booting
mounting filesystems...
loading script...
Script from M5 readfile is empty, starting bash shell...
(none) / #
至此,工具已经准备好了。接下来的工作就是在gem5上执行测试程序。首先进入gem5目录下,可以新建一个文件夹mountfile,专门用于存放后面的往系统里mount的文件。把已经静态编译好的可执行文件放进mountfile,挂载:
mount -o,loop,offset=32256 /home/jzy/gem5/fs-image/x86-system/disks/linux-x86.img /mnt
如果执行ls /mnt
显示文件夹信息,则表示已经挂载好了。将可执行的程序文件复制进挂载的系统。
在使用linux的image文件重新开启gem5之前,应该执行umount操作:
sudo umount /mnt