WSL Ubuntu 18.04 编译安装GEM5模拟器
写在前面
GEM5是一款十分强大的模拟器,支持主流的X86、MIPS、ARM、RISC-V等多种架构的行为仿真模拟。
GEM5是M5和GEMS的结合,使用Python和C++编写(其中C++占越85%),提供大量标准化接口的同时保留了较好的灵活性。
因为研究需要,需要在Linux平台上使用GEM5模拟器,但我又无法忍受双系统切换的麻烦以及虚拟器无比卡慢的运行环境,选择尝试在Windows推出的WSL(Windows Support Linux) 平台上安装GEM5。GEM5可是个不折不扣的吃性能大户,WSL是为数不多不会带来计算性能损失的“双系统”运行环境,所以我选择WSL。
本文介绍GEM5在WSL Ubuntu18.04下的编译安装过程。
1. 安装编译所需支持包
- 安装g++以及扩展库
一般Linux系统会预装g++,如果没装,可通过以下命令安装:
扩展库通过以下命令安装:sudo apt-get install g++
sudo apt-get install build-essential
- 安装python
和g++一样,一般Linux系统预装python2.7,但还需要再安装一个python的开发库。sudo apt-get install python python-dev
- 安装Scons:
sudo apt-get install scons
- 安装SWIG:
sudo apt-get install swig
- 安装zlib:
sudo apt-get install zlib1g zlib1g-dev
- 安装m4:
sudo apt-get install m4
- 安装protobuf:
这里需要注意,部分文章有推荐编译安装protobuf,但编译安装耗时较长,而且安装后,可能会出现版本不匹配的错误,幸好Ubuntu是支持快速安装的,于是索性就直接使用apt-get快速安装。sudo apt-get install libprotobuf-dev python-protobuf protobuf-compiler libgoogle-perftools-dev
- 安装boost库:
sudo apt-get install libboost-all-dev
至此,编译GEM5需要的所有支持库已安装完毕,下面就可以开始编译GEM5了!
2. 下载GEM5
GEM5官方提供Google Cloud代码托管下载链接:
git clone https://gem5.googlesource.com/public/gem5
但众所周知,这在国内是无法通过正常方式访问的。官方还提供另一下载方式:
wget http://repo.gem5.org/gem5/archive/tip.tar.bz2
文件大约有37MB,外网访问速度较慢,请耐心等待。同时我也将文件上传到百度云盘,提取码:6ras
下载完成后,使用命令:
tar -xjf tip.tar.bz2
解压压缩包,解压后cd到文件夹内。
接下来就可以开始安装了!
3. 编译安装GEM5
GEM5支持包括X86、ARM、Power在内的多种商用架构,这里以ARM为例,开始我们的GEM5之旅。
进入到文件夹后,输入命令:
scons build/ARM/gem5.opt -j4
开始安装,需要注意,这里 “-j4”是指线程数,建议设置为与当前平台的CPU物理核心数相同。如,我的电脑是四核i7 6700,使用四线程并行加快编译速度。由于每个线程基本上都能够把一颗CPU核心吃满,所以超线程技术多出来的那一倍逻辑核心基本可以不用考虑进去了,以免遇到奇怪的错误。
编译耗时较长,会占用较大内存,内存4G以下机器可能会占用到虚拟内存空间,拖慢进度。编译基本上一个午觉的时间,当控制台上出现以下内容:
......
[ CXX] ARM/mem/ruby/structures/Prefetcher.cc -> .o
[ CXX] ARM/mem/ruby/structures/TimerTable.cc -> .o
[ CXX] ARM/mem/ruby/structures/BankedArray.cc -> .o
[ LINK] -> ARM/mem/ruby/structures/lib.o.partial
[ CXX] ARM/base/date.cc -> .o
[ LINK] -> ARM/gem5.opt
build/ARM/arch/arm/lib.o.partial: In function `ArmSemihosting::callTmpNam(ThreadContext*, bool, std::vector<unsigned long, std::allocator<unsigned long> >&)':
/home/zwmdr/gem5-22183ae13998/build/ARM/arch/arm/semihosting.cc:474: warning: the use of `tmpnam' is dangerous, better use `mkstemp'
scons: done building targe
即表示安装完成了!
4. 简单测试
安装完成之后,我们运行GEM5自带的测试程序,非常经典的Hello World!在控制台键入:
./build/ARM/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/arm/linux/hello
如果你能看到如下信息:
hello
gem5 Simulator System. http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.
gem5 compiled Nov 1 2019 14:26:00
gem5 started Nov 1 2019 15:37:59
gem5 executing on ZWMDR, pid 8516
command line: ./build/ARM/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/arm/linux/hello
Global frequency set at 1000000000000 ticks per second
warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (512 Mbytes)
0: system.remote_gdb: listening for remote gdb on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
Hello world!
Exiting @ tick 2924500 because exiting with last active thread context
Simulated exit code not 0! Exit code is 13
就说明安装成功啦!