在 gem5 上运行 Bao hypervisor
1 Ritsumeikan University
本文介绍了一种通过 VExpress_GEM5_Foundation 平台在 gem5 上执行 Bao Hypervisor [1] 的方法,能够同时执行两个未修改的 Linux 虚拟机。
它在 “x86_64 Ubuntu 22.04” 上进行了测试。
获取和构建软件
安装在 gem5 上运行 Bao Hypervisor 所需的工具。
sudo apt update
sudo apt install git tree scons gcc g++ python3-dev \
make automake device-tree-compiler \
bison flex libssl-dev
创建目录以存储构建输出:
mkdir -p resources/binaries resources/semihosting
下载和设置工具链
从 Arm Developer’s 网站下载最新的裸机交叉编译工具链 “aarch64-none-elf“。 在 “arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf” 上进行了测试。
下载 aarch64 的交叉编译器后,应解压文件。 然后,将交叉编译器前缀定义为 CROSS_COMPILE 环境变量。
以下示例演示了 “arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf.tar.xz” 的安装。 设置环境变量时,请注意不要忘记末尾的 “-“。
# Downloaded "arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf.tar.xz"
# to current directory, then following command should be executed.
tar xvf arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf.tar.xz
export CROSS_COMPILE=$(pwd)/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
设置基础环境和构建自动化
获取用于构建 Bao Hypervisor 和 Linux 的 git 仓库。然后,使用 make 命令构建它。
git clone https://github.com/h1demasa/bao-demos.git
cd bao-demos
make -j $(nproc)
构建完成后,将生成的二进制文件复制到 gem5 将使用的目录。
cp wrkdir/imgs/fvp-a/fip.bin ../resources/binaries/fip.bin
cp wrkdir/imgs/fvp-a/bl1.bin ../resources/binaries/bl1.bin
cp wrkdir/imgs/fvp-a/linux+linux/bao.bin ../resources/semihosting/bao.bin
在继续之前,返回到父目录并检查您的资源目录是否具有以下结构:
cd ../
tree resources/
resources
binaries
bl1.bin
fip.bin
semihosting
bao.bin
gem5(模拟器)
要在 gem5 上运行 Bao Hypervisor,请构建 gem5。
由于性能监视器控制寄存器未在 gem5 中实现,当 Bao 运行时会产生大量警告日志。 这些日志影响 gem5 的执行性能。 为了防止这些警告日志,请将以下补丁应用到 gem5。
git clone https://github.com/gem5/gem5.git -b v24.0.0.1
cd gem5
git apply ../bao-demos/platforms/gem5/gem5.patch
使用上述更改构建 gem5:
scons -j $(nproc) build/ARM/gem5.opt
cd -
make -C gem5/util/term
运行并连接到模拟
现在您可以运行模拟:
export M5_PATH=resources/ && \
gem5/build/ARM/gem5.opt gem5/configs/example/arm/baremetal.py \
--workload ArmTrustedFirmware \
--num-cores 4 \
--mem-size 4GB \
--machine-type VExpress_GEM5_Foundation \
--semi-enable --semi-path resources/semihosting
并连接到它:
gem5/util/term/m5term 3456 # Trusted Firmware-A, U-boot 和 Bao Hypervisor
gem5/util/term/m5term 3457 # VM 1 (Linux)
gem5/util/term/m5term 3458 # VM 2 (Linux)
建议您观察引导加载程序的各个阶段以及指示 Bao Hypervisor 引导过程的文本,可以通过端口 3456 访问。 同样,Linux 内核引导序列可以通过端口 3457 和端口 3458 观察。 一旦引导过程完成,登录 shell 就会启动。 您可以通过端口 3457 和 3458 访问它。 此登录的用户名和密码是 “root”。
在我的环境中,Linux 登录 shell 启动需要一个小时。 请等待,同时享受一杯咖啡。
演示
这是在 gem5 上运行 Bao Hypervisor 的演示视频。
[1] José Martins, Adriano Tavares, Marco Solieri, Marko Bertogna, and Sandro Pinto. “Bao: A Lightweight Static Partitioning Hypervisor for Modern Multi-Core Embedded Systems”. In Workshop on Next Generation Real-Time Embedded Systems (NG-RES 2020). Schloss Dagstuhl-Leibniz-Zentrum für Informatik. 2020. https://drops.dagstuhl.de/opus/volltexte/2020/11779/