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在Ubuntu18.04下的编译安装过程。
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python
依赖简单介绍如下:
SCons:gem5使用SCons作为它的构建环境。SCons类似于make,它将Python脚本用于构建过程的所有方面。这使得构建系统非常灵活(尽管速度较慢)。
protobuf 2.1+:协议缓冲区是一种语言无关、平台无关的可扩展机制,用于序列化结构化数据。在gem5中,protobuf库用于跟踪生成和回放。如果您没有计划将protobuf用于跟踪生成和回放,那么它就不是必需的包。
Boost:Boost库是一组通用c++库。如果需要使用SystemC实现的程序,那么它是一个必要的依赖项。这个库所占空间较大。
GITHUB被强,所以换GITEE作源:
git clone https://gitee.com/gao_hanyuan/gem5.git
担心版本的问题,避免夜长梦多,直接选择一个TAG版本编译,我选择的是v21.2.1.0
不知道处于什么原因,SCONS无法识别anaconda环境的python,在顶层目录直接执行Scons会报告如下错误:Error: Can't find a working Python installation
所以退出anaconda环境,执行
conda deactivate
退出anaconda,之后在GEM5顶层目录直接执行
scons
进行编译,如下是编译过程:
如果不加多线程编译,大概编译一个小时左右,编译完成,结果为gem5.debug。
编写helloworld.c文件,并用arm-linux编译
最好使用静态编译
arm-linux-gnueabi-gcc -static main.c
之后,执行如下命令测试:
./build/ARM/gem5.debug configs/example/se.py -c ./a.out
可以看到,结果准确输出出来:
python3 `which scons` build/X86/gem5.opt -j8
python3 `which scons` build/RISCV/gem5.opt -j9
平头哥芯片开放社区(OCC)
python3 `which scons` build/MIPS/gem5.opt -j8
GEM5只支持小端结构:
python3 `which scons` build/SPARC/gem5.opt -j8
python3 `which scons` build/POWER/gem5.opt -j8
gdb --args ./build/ARM/gem5.opt configs/example/se.py -c ./a.out
支持的架构包括 amdgpu,arm,mips,power,riscv,sparc,x86.
调试指令:
./build/ARM/gem5.debug --debug-flags=Exec configs/example/se.py -c ./a.out
可以看到,指令的操作类型IntAlu,MemRead,MemWrite被完整记录下来。
参考记录:
gem5: Building gem5
python3 `which scons` build/X86/gem5.opt -j9