gem5学习(14):将gem5扩展到ARM——Extending gem5 for ARM

目录

[一、Downloading ARM Binaries](#一、Downloading ARM Binaries)

[二、Building gem5 to run ARM Binaries](#二、Building gem5 to run ARM Binaries)

[三、Modifying simple.py to run ARM Binaries](#三、Modifying simple.py to run ARM Binaries)

[四、Running gem5](#四、Running gem5)

[五、ARM Full System Simulation](#五、ARM Full System Simulation)

[An aside on FS simulations](#An aside on FS simulations)


这个是gem5-learning中Getting Started的最后一篇文章,其实我现在基本不用ARM的ISA,但是为了保持教程的连贯性,还是把最后一篇更新完。

这个教程的前提是:已经使用gem5构建了一个基本的X86系统,并创建了一个简单的配置脚本。

一、Downloading ARM Binaries

定位到gem5文件夹的根目录,下载一些ARM基准测试二进制文件。

这些二进制文件在后面将会对ARM系统进行进一步测试。

二、Building gem5 to run ARM Binaries

下载完二进制文件后,返回到gem5的根目录下。

和前面使用X86配置不同,这里使用默认的ARM配置进行编译【教程里给的线程数太多了,我的主机是4核,所以我用了CPU数+1】。

bash 复制代码
scons build/ARM/gem5.opt -j 5

初次编译时间有点长,大概半小时。

如果编译完成的话,会在build/ARM/目录中生成一个有效的gem5运行文件gem5.opt。

三、Modifying simple.py to run ARM Binaries

在=使用新系统运行任何ARM二进制文件之前,=需要对config中的配置文件simple.py进行一些修改。

前面在创建简单配置脚本时,有特别说明除了x86系统之外,不需要将PIO和中断端口连接到内存总线。因此,需要删除或者注释掉这三行代码:

然后将进程的命令设置为刚才下载的ARM基准测试二进制文件之一:

bash 复制代码
process.cmd = ['cpu_tests/benchmarks/bin/arm/Bubblesort']

如果想测试一个简单的hello程序,只需将x86替换为arm:

bash 复制代码
process.cmd = ['tests/test-progs/hello/bin/arm/linux/hello']

四、Running gem5

运行一个比较简单的程序。

bash 复制代码
build/ARM/gem5.opt configs/tutorial/simple.py

如果将进程设置为Bubblesort基准测试,输出应如下所示:

bash 复制代码
......
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 Full System Simulation

要运行ARM FS模拟,需要对设置进行一些更改。

从gem5根目录中,通过运行以下命令进入util/term/目录:

bash 复制代码
cd util/term/

然后通过运行以下命令编译m5term二进制文件:

bash 复制代码
make

gem5存储库附带了示例系统设置和配置。这些可以在configs/example/arm/目录中找到。

在这里提供了一组完整的系统Linux镜像文件。将它们保存在一个目录中,并记住其路径。例如,你可以将它们存储在以下目录中:

bash 复制代码
/path/to/user/gem5/fs_images/

在接下来的示例中,假设fs_images目录包含提取的FS映像。

下载完镜像后,在终端中执行以下命令:

bash 复制代码
export IMG_ROOT=/absolute/path/to/fs_images/<image-directory-name>

将"<image-directory-name>"替换为从下载的镜像文件中提取的目录名称【最终名称不带尖括号】。

准备运行FS ARM模拟。从gem5存储库的根目录中运行以下命令:

bash 复制代码
./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

将尖括号中的任何内容替换为目录或文件的名称,不包括尖括号。

然后,在另一个终端窗口中,通过运行以下命令连接到模拟:

bash 复制代码
./util/term/m5term 3456

要获取fs_bigLITTLE.py脚本支持的完整详细信息,可以运行:

bash 复制代码
./build/ARM/gem5.opt configs/example/arm/fs_bigLITTLE.py --help

An aside on FS simulations

FS模拟时间比较长,比如"加载内核需要1小时"。

有关FS的更多详细信息,可以直接查看gem5: X86 Full-System Tutorial

【因为还没编译完成,所以我就不贴最后的结果图了】

相关推荐
deng-c-f3 小时前
Linux C/C++ 学习日记(28):KCP协议(四):如何实现更复杂的业务:将连接状态的管理进行封装,用户只需实现发送、接收、断开的处理逻辑。
学习·网络编程·kcp
立志成为大牛的小牛6 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
QT 小鲜肉7 小时前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
QT 小鲜肉10 小时前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法
A9better10 小时前
嵌入式开发学习日志40——stm32之I2C协议层
stm32·单片机·嵌入式硬件·学习
ha204289419411 小时前
Linux操作系统学习之---线程控制
java·linux·学习
Laplaces Demon13 小时前
Spring 源码学习(十四)—— HandlerMethodArgumentResolver
java·开发语言·学习
青衫码上行13 小时前
【从0开始学习Java | 第22篇】反射
java·开发语言·学习
hmbbcsm13 小时前
python学习之路(四)
学习
Greedy Alg13 小时前
Socket编程学习记录
网络·websocket·学习