gem5的安装是及其头痛的,由于gem5并未提供发行版而是采用了源码编译的方式,笔者付出了相当多的编译等待时间和错误处理时间
一旦完成构建, 我们就可以在 gem5 源码的基础上进行改进, 再次编译构建的速度就会快很多了
asdajkl爱神的箭啦ctrl + a asdjl
使用Ubuntu22.04操作系统,双系统,英文语言,gcc版本11.3.0,32G交换区
gem5的编译强烈建议使用双系统,在虚拟机中启动gem5模拟有点太慢了
内存分配至少8GB,不然编译可能因为内存不足而失败.不要使用低版本gcc
不想装双系统麻烦的话 WSL2 也是一个不错的选择
sudo apt update
sudo apt install vim
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev \
libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
python3-dev python-is-python3 libboost-all-dev pkg-config libhdf5-dev libpng-dev
git clone https://gem5.googlesource.com/public/gem5
如果还没配置代理则使用如下gitee源
git clone https://gitee.com/koverlu/gem5.git
# git clone -c http.sslVerify=false https://gitee.com/koverlu/gem5.git/
cd gem5
scons build/X86/gem5.opt -j 4
最后j后面的数字为开启的线程数,并无大影响,改为2,8都可以
这里总结一下笔者初次编译时遇到的诸多问题
官方推荐使用的Ubuntu操作系统(本机或者服务器,不推荐虚拟机). 笔者个人的服务器是Debian10,gcc版本为 8.3.0 ,2核2G.尽管官方给出的gcc要求如下
gcc: gcc is used to compiled gem5. Version >=7 must be used. We support up to gcc Version 11.
但实际上如果不使用gcc11进行编译会报如下的一个警告,然后在最后链接显示失败
Warning:
Deprecated namespaces are not supported by this compiler.
所以推荐直接使用Ubuntu22.04,默认安装的gcc 11.3.0,不会出现此问题
笔者也尝试Debian去安装高版本gcc结果失败,似乎只能从源码编译,但这一过程又太过麻烦,故放弃
gcc 源码编译会有很多中间文件,且会自编译三次时间很长...
笔者也尝试了使用docker镜像创建容器去编译,但由于服务器内存不足在最后链接的过程失败
解决办法: 最后笔者选择了使用本机安装Win11与Ubuntu22.04双系统,分配了8GB swap area,成功编译
注意,Ubuntu系统安装请务必使用 英文, 中文系统会在编译初期产生如下报错
pybind11::error_already_set
what(): UnicodeDecodeError: 'ascii' codec an't decode byte 0xe6 in position 78:ordinal not in range(128
暂时未找到直接的解决办法,笔者的解决办法是重装系统,语言选择英语.后期再去下中文输入法
如果没有装过双系统可以参考双系统安装
Warning: Header file <png.h> not found.
This host has no libpng library.
Disabling support for PNG framebuffers.
Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... yes
Checking for C header file valgrind/valgrind.h... no
Checking for pkg-config package hdf5-serial... no
Checking for pkg-config package hdf5... no
Checking for H5Fcreate("", 0, 0, 0) in C library hdf5... no
Warning: Couldn't find HDF5 C++ libraries. Disabling HDF5 support.
如果出现如上的两个警告则还需要安装两个库
sudo apt-get install libhdf5-dev
sudo apt-get install libpng-dev
笔者这里已经贴心的将其加入到
安装依赖
所需的库的最后了
Error: Can't find a suitable python-config, tried ['python3-config','python-config']
Error: Can't find a working Python installation
这个很有可能是因为当前处于anaconda的虚拟环境,这里的安装需要使用系统的python3来进行安装.可使用如下命令退出conda环境
conda deactivate
或者此时应该会出现黄色的提示,提醒你指出使用的python的绝对路径,按其提示即可
可以使用如下命令代替 scons build/X86/gem5.opt -j4
python3 `which scons` build/X86/gem5.opt
Ubuntu为了向前兼容默认是python2,需要使用python3
这些问题笔者并没有经历,官网给出了构建过程中可能出现的一些问题的解答
M4 macro processor not installed
Protobuf 3.12.3 problem
Wrong gcc version
或许你可以在 https://www.gem5.org/documentation/learning_gem5/part1/building/ 找到答案
除此之外你可以到gem5-user去查询相关回答
不过开始之前我们先稍作更改以方便我们后续的工作, 修改 ~/.bashrc
并添加一个别名 alias
alias gem5=/home/kamilu/gem5/build/X86/gem5.opt
这里的路径你需要换成你的, 我们使用 gem5 来替代指明这个 gem5.opt 的绝对路径, 以后可以很方便的直接使用 gem5 调用了
source ~/.bashrc 激活环境
接着我们注意到在开始编译之前 gem5 会输出一些信息, gem5建议安装 pre-commit
pip install -r requirements.txt
sudo apt install pre-commit
这里需要注意的是如果安装 pre-commit 之后 commit message 需要满足
MAINTAINERS.yaml
的检查, 具体可参考 commit 时候的输出提示
不过我个人并不建议安装 pre-commit, 因为他会要求强制修改你的 commit message 习惯, 对我而言有一些难受
sudo apt rmeove pre-commit
rm -r .git/hooks
不过每次编译的时候都会提示使用 pre-commit 有点烦, 我们可以采用一个强硬一点的办法
修改 site_scons/git.py 110 行的函数, 直接返回忽略检查
def generate(env):
return
if exists(env) and not gem5_scons.util.ignore_style():
install_style_hooks(env)
此外我们注意到上述的输出信息中包含这样一行警告: warn: No dot file generated. Please install pydot to generate the dot file and pdf.
, 这个的意思是我们缺少一个绘图的工具
pip install pydot
sudo apt install graphviz
你可以使用
dot -V
查看 graphviz 版本
安装完成之后再次执行会发现生成的 m5out (这是一个默认的输出信息文件夹) 中多了pdf和svg文件, 其中 svg 文件
如果您希望使用 png 格式的图片
dot -Tpng -o config.png config.dot