安装与构建

gem5的安装是及其头痛的,由于gem5并未提供发行版而是采用了源码编译的方式,笔者付出了相当多的编译等待时间和错误处理时间

一旦完成构建, 我们就可以在 gem5 源码的基础上进行改进, 再次编译构建的速度就会快很多了

asdajkl爱神的箭啦ctrl + a asdjl

标准构建方式

使用Ubuntu22.04操作系统,双系统,英文语言,gcc版本11.3.0,32G交换区

gem5的编译强烈建议使用双系统,在虚拟机中启动gem5模拟有点太慢了

内存分配至少8GB,不然编译可能因为内存不足而失败.不要使用低版本gcc

不想装双系统麻烦的话 WSL2 也是一个不错的选择

可能遇到的问题

这里总结一下笔者初次编译时遇到的诸多问题

  1. 选择构建的系统和 gcc 版本

    官方推荐使用的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.

    217302a0c1001c0821d89a3f3d973bf

    所以推荐直接使用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

    暂时未找到直接的解决办法,笔者的解决办法是重装系统,语言选择英语.后期再去下中文输入法

    如果没有装过双系统可以参考双系统安装

  1. 两个warnning
    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

    笔者这里已经贴心的将其加入到 安装依赖 所需的库的最后了

  1. Python 找不到
    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的绝对路径,按其提示即可

  1. python版本不对

    可以使用如下命令代替 scons build/X86/gem5.opt -j4

    python3 `which scons` build/X86/gem5.opt

    Ubuntu为了向前兼容默认是python2,需要使用python3

  1. 其他问题

    这些问题笔者并没有经历,官网给出了构建过程中可能出现的一些问题的解答

    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 文件

20230331115911

如果您希望使用 png 格式的图片

dot -Tpng -o config.png config.dot
zood