扩展 gem5 以支持 ARM
本章假设您已经使用 gem5 构建了一个基本的 x86 系统并创建了一个简单的配置脚本。
下载 ARM 二进制文件
让我们从下载一些 ARM 基准测试二进制文件开始。从 gem5 文件夹的根目录开始:
mkdir -p cpu_tests/benchmarks/bin/arm
cd cpu_tests/benchmarks/bin/arm
wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/Bubblesort
wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/FloatMM
我们将使用这些来进一步测试我们的 ARM 系统。
构建 gem5 以运行 ARM 二进制文件
就像我们第一次构建基本的 x86 系统时所做的那样,我们运行相同的命令,只是这次我们要使用默认的 ARM 配置进行编译。为此,我们只需将 x86 替换为 ARM:
scons build/ARM/gem5.opt -j 20
编译完成后,您应该在 build/ARM/gem5.opt 处拥有一个可工作的 gem5 可执行文件。
修改 simple.py 以运行 ARM 二进制文件
在我们用新系统运行任何 ARM 二进制文件之前,我们必须对 simple.py 进行一些微调。
如果您还记得我们创建简单配置脚本的时候,我们注意到除了 x86 系统之外,任何 ISA 都不需要将 PIO 和中断端口连接到内存总线。所以让我们删除这 3 行:
system.cpu.createInterruptController()
#system.cpu.interrupts[0].pio = system.membus.mem_side_ports
#system.cpu.interrupts[0].int_requestor = system.membus.cpu_side_ports
#system.cpu.interrupts[0].int_responder = system.membus.mem_side_ports
system.system_port = system.membus.cpu_side_ports
您可以删除或注释掉它们,如上所示。接下来,我们将进程命令设置为我们的一个 ARM 基准测试二进制文件:
process.cmd = ['cpu_tests/benchmarks/bin/arm/Bubblesort']
如果您想测试一个简单的 hello 程序,就像以前一样,只需将 x86 替换为 arm:
process.cmd = ['tests/test-progs/hello/bin/arm/linux/hello']
运行 gem5
像以前一样运行它,只是将 X86 替换为 ARM:
build/ARM/gem5.opt configs/tutorial/simple.py
如果您将进程设置为 Bubblesort 基准测试,您的输出应如下所示:
gem5 Simulator System. http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.
gem5 compiled Oct 3 2019 16:02:35
gem5 started Oct 6 2019 13:22:25
gem5 executing on amarillo, pid 77129
command line: build/ARM/gem5.opt configs/tutorial/simple.py
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 7002
Beginning simulation!
info: Entering event queue @ 0. Starting simulation...
info: Increasing stack size by one page.
warn: readlink() called on '/proc/self/exe' may yield unexpected results in various settings.
Returning '/home/jtoya/gem5/cpu_tests/benchmarks/bin/arm/Bubblesort'
-50000
Exiting @ tick 258647411000 because exiting with last active thread context
ARM 全系统模拟
要运行 ARM FS 模拟,需要对设置进行一些更改。
如果您还没有这样做,请从 gem5 仓库的根目录,运行以下命令 cd 进入 util/term/ 目录
$ cd util/term/
然后运行以下命令编译 m5term 二进制文件
$ make
gem5 仓库附带了示例系统设置和配置。这些可以在 configs/example/arm/ 目录中找到。
一系列全系统 Linux 镜像文件可在 此处 获得。 将这些保存在一个目录中并记住其路径。例如,您可以将它们存储在
/path/to/user/gem5/fs_images/
在本例的其余部分,将假定 fs_images 目录包含提取的 FS 镜像。
下载镜像后,在终端中执行以下命令:
$ export IMG_ROOT=/absolute/path/to/fs_images/<image-directory-name>
将 “<image-directory-name>” 替换为从下载的镜像文件中提取的目录名称,不带尖括号。
我们现在准备好运行 FS ARM 模拟了。从 gem5 仓库的根目录运行:
$ ./build/ARM/gem5.opt configs/example/arm/fs_bigLITTLE.py \
--caches \
--bootloader="$IMG_ROOT/binaries/<bootloader-name>" \
--kernel="$IMG_ROOT/binaries/<kernel-name>" \
--disk="$IMG_ROOT/disks/<disk-image-name>" \
--bootscript=path/to/bootscript.rcS
将尖括号中的任何内容替换为目录或文件的名称,不带尖括号。
然后,您可以通过在不同的终端窗口中运行以下命令来连接到模拟:
$ ./util/term/m5term 3456
通过运行以下命令可以获得 fs_bigLITTLE.py 脚本支持的完整详细信息:
$ ./build/ARM/gem5.opt configs/example/arm/fs_bigLITTLE.py --help
FS 模拟旁白:
请注意,FS 模拟需要很长时间;就像“加载内核需要 1 小时”那么长!有一些方法可以“快进”模拟,然后在感兴趣的点恢复详细模拟,但这超出了本章的范围。
