gem5(1)——环境搭建
iamywang

引言

之前曾经接触过gem5,不过只是停留在利用gem5完成一些简单的工作,并没有对gem5的源代码以及具体的配置做深入的学习。
本次的目标是打算对gem5的配置文件(即具体的System配置)以及源代码(即gem5每个功能的实现)有深入的学习和理解。

虚拟机环境

我使用的是最新的Ubuntu 22.04:

环境 版本
虚拟机 VMware Workstation 16.2.4
系统 Ubuntu Server 22.04.1 LTS
CPU Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
内存 8GB

安装依赖

首先,更换apt源为阿里云源,以加快下载速度:

1
2
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vim /etc/apt/sources.list

插入以下内容:

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

然后,更新apt源并安装所需的依赖:

1
2
3
4
$ sudo apt update
$ 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

编译gem5

从gem5的官方仓库克隆源码:

1
$ git clone https://gem5.googlesource.com/public/gem5

利用SCons命令编译gem5,以编译x86架构的处理器为例:

1
2
$ cd gem5
$ scons build/X86/gem5.opt -j4

编译完成后的输出如下图所示:

image

build/X86目录下生成的gem5.opt文件,即为编译好的gem5可执行文件。

此外,除了支持x86架构,gem5还支持ARMMIPSRISC-V等架构,具体的参数为修改build/ISA中的ISA为对应的架构名即可。
gem5的后缀名代表的含义是编译时的优化参数,除了opt外,还有debugfast,具体的含义可以参考官方文档。

运行gem5

以gem5自带的测试程序为例,运行gem5的命令为:

1
2
3
4
5
$ build/X86/gem5.opt \
configs/example/se.py \
--cpu-type=TimingSimpleCPU \
--caches \
--cmd=tests/test-progs/hello/bin/x86/linux/hello

其中,--cpu-type参数指定了使用的CPU类型,--caches参数指定了使用的缓存类型,--cmd参数指定了运行的程序。

运行结果如下图所示:

image

参考文献

  1. https://www.gem5.org/documentation/general_docs/building
 评论