构建 ARM 内核

本页包含为在 ARM 上运行的 gem5 构建最新内核的说明。

如果您不想自己构建内核(或磁盘镜像),您仍然可以下载 预构建版本

先决条件

这些说明适用于运行无头系统。这是一个更”服务器”风格的系统,没有帧缓冲区。描述是使用下面链接的仓库中最新已知工作标签创建的,但每个部分中的表格列出了已知可用的先前标签。要在 x86 主机上构建内核,您需要 ARM 交叉编译器和设备树编译器。如果您运行的是相当新版本的 Ubuntu 或 Debian,可以通过 apt 获取所需的软件:

apt-get install  gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler

如果您不能使用这些预制的编译器,从 ARM 获取 所需编译器的下一个最简单方法是:

下载(其中一个)并确保二进制文件在您的 PATH 上。

根据您的交叉编译器的确切来源,下面使用的编译器名称将需要小的更改。

要实际运行内核,您需要下载或编译 gem5 的 引导加载程序。有关详细信息,请参阅本文档中的引导加载程序部分。

Linux 4.x

较新的 gem5 ARM 内核(v4.x 及更高版本)基于原始 Linux 内核,通常有少量补丁以使它们更好地与 gem5 配合工作。补丁是可选的,您也应该能够使用原始内核。但是,这需要您自己配置内核。较新的内核都使用 VExpress_GEM5_V1 gem5 平台,适用于 AArch32 和 AArch64。

内核检出

要检出内核,请执行以下命令:

git clone https://gem5.googlesource.com/arm/linux

该仓库包含每个 gem5 内核发布的标签和主要 Linux 修订版的工作分支。查看项目页面以获取标签和分支列表。克隆命令默认将检出最新的发布分支。要检出 v4.14 分支,请在仓库中执行以下操作:

git checkout -b gem5/v4.14

内核构建

要编译内核,请在仓库中执行以下命令:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- gem5_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j `nproc`

测试刚刚构建的内核:

./build/ARM/gem5.opt configs/example/arm/starter_fs.py --kernel=/tmp/linux-arm-gem5/vmlinux \
    --disk-image=ubuntu-18.04-arm64-docker.img

引导加载程序

gem5 有两个不同的引导加载程序。一个用于 32 位内核,一个用于 64 位内核。可以使用以下命令编译它们:

make -C system/arm/bootloader/arm
make -C system/arm/bootloader/arm64

设备树 Blob

描述硬件给操作系统的所需 DTB 文件随 gem5 一起提供。要构建它们,请执行此命令:

make -C system/arm/dt

我们建议仅在您计划修改它们时使用这些设备树文件。如果不是,我们建议您依赖 DTB 自动生成:通过运行不带 –dtb 选项的 FS 脚本,gem5 将根据实例化的平台自动生成 DTB。

编译二进制文件后,将它们放在您的 M5_PATH 中的 binaries 目录中。