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

目录

一、Downloading ARM Binaries

二、Building gem5 to run ARM Binaries

三、Modifying simple.py to run ARM Binaries

四、Running gem5

五、ARM Full System Simulation

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】。

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基准测试二进制文件之一:

process.cmd = ['cpu_tests/benchmarks/bin/arm/Bubblesort']

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

process.cmd = ['tests/test-progs/hello/bin/arm/linux/hello']

四、Running gem5

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

build/ARM/gem5.opt configs/tutorial/simple.py

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

……
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/目录:

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

An aside on FS simulations

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信创平台迁移认知误区

误区一 问题&#xff1a;应用采用JDK1.5、JDK1.6进行开发&#xff0c;是否可以迁移到信创平台的TongWeb下&#xff0c;需要用TongWeb哪个版本 &#xff1f; 错误答复&#xff1a;JDK1.5需要采用TongWeb5.0、JDK1.6需要采用TongWeb6.1、JDK1.7需要采用TongWeb7.0、最新TongWe…

imgaug库指南(20):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

c# 文本加密解密

在C#中实现加密功能&#xff0c;您可以使用.NET框架提供的System.Security.Cryptography命名空间下的多种加密算法类。这里我将给出一个使用AES&#xff08;Advanced Encryption Standard&#xff09;对称加密算法的简单示例&#xff1a; using System; using System.IO; usin…

Android Jetpack中Lifecycle使用生命周期感知型组件处理生命周期

在使用Kotlin实现Android Jetpack中Lifecycle使用生命周期感知型组件处理生命周期的功能时&#xff0c;你需要以下步骤&#xff1a; 首先&#xff0c;在app的build.gradle文件中添加Lifecycle相关库的依赖项&#xff1a; implementation "androidx.lifecycle:lifecycle-…

各版本 操作系统 对 .NET Framework 与 .NET Core 支持

有两种类型的受支持版本&#xff1a;长期支持 (LTS) 版本和标准期限支持 (STS) 版本。 所有版本的质量都是一样的。 唯一的区别是支持的时间长短。 LTS 版本可获得为期三年的免费支持和补丁。 STS 版本可获得 18 个月的免费支持和修补程序。 有关详细信息&#xff0c;请参阅 .N…

Java重修第五天—面向对象2

通过学习本篇文章可以掌握如下知识 static&#xff1b;设计单例&#xff1b;继承。 之前文章我们已经对面向对象进行了入门学习&#xff0c;这篇文章我们就开始深入了解面向对象设计。 static 我们定义了一个 Student类&#xff0c;增加姓名属性&#xff1a;name &#xff1…

[paddle]paddlehub部署paddleocr的hubserving服务

步骤如下&#xff1a; 第一步&#xff1a;首先需要安装好paddleocr环境已经paddlehub环境 第二步&#xff1a;下载paddleocr源码&#xff1a; git clone https://github.com/PaddlePaddle/PaddleOCR.git 然后切换到paddocr目录执行 新建个文件夹叫Inference把paddleocr模型…

用通俗易懂的方式讲解:内容讲解+代码案例,轻松掌握大模型应用框架 LangChain

本文介绍了 LangChain 框架&#xff0c;它能够将大型语言模型与其他计算或知识来源相结合&#xff0c;从而实现功能更加强大的应用。 接着&#xff0c;对LangChain的关键概念进行了详细说明&#xff0c;并基于该框架进行了一些案例尝试&#xff0c;旨在帮助读者更轻松地理解 L…

最好的 8 个解锁 Android 手机的应用程序分析

如何解锁我的 Android 手机是一个困扰全球数百万人的问题。有多种Android解锁器可用于解锁手机。用户应确保选择最好的应用程序以轻松满意地完成工作。必须注意的是&#xff0c;数据在解锁手机的整个过程中都是安全可靠的。此类应用程序还应该能够在所有情况下检索数据。 锁屏移…

关于游戏工业化的小讨论

大家好&#xff0c;我是阿赵。   上周末讨论了一下游戏美术人员的技术与艺术之间的问题。这个问题其实攻击性挺强&#xff0c;很多从事游戏美术工作的朋友可能都觉得受到了一定伤害。对于这点&#xff0c;我先对从事美术工作的朋友们道个歉。我个人感觉&#xff0c;这个问题不…

时间差异导致数据缺失,如何调整Grafana时间与Prometheus保持同步?

Grafana时间如何调快或调慢&#xff1f; 在k8s环境中&#xff0c;常使用prometheusgrafana做监控组件&#xff0c;prometheus负责采集、存储数据&#xff0c;grafana负责监控数据的可视化。 在实际的使用中&#xff0c;有时会遇到这样的问题&#xff0c;k8s集群中的时间比真实…

力扣:209.长度最小的子数组

1.题目分析&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 …

Vue的api接口封装以及使用说明、模块说明

在Api目录下面建立user.js&#xff0c;如果以后有不同的接口请求地址都可以单独创建不同的&#xff0c;目的是方便维护&#xff01; import request from /utils/request 这个代码是引入之前封装好的 request.js 文件&#xff0c;具体可以参考上门一篇文档 Vue的request.js模…

jQuery 面试题

jQuery 面试题 1. 请解释 jQuery 是什么以及它的主要特点。 答案&#xff1a;jQuery 是一个快速、简洁、功能丰富的 JavaScript 库&#xff0c;用于简化 HTML 文档遍历、事件处理、动画效果和 Ajax 操作等。jQuery 的主要特点包括&#xff1a; 简化 DOM 操作&#xff1a;jQu…

「BUG」启动jar配置文件里的参数无法替换。

项目场景&#xff1a; linux系统中启动springboot项目的jar&#xff0c;替换掉jar中原有的mysql配置。 问题描述&#xff1a; 启动脚本里&#xff0c;已经用通用的方式&#xff0c;java -jar xxx.jar --mysql.hostx.x.x.x:3306 -v,进行替换&#xff0c;但是执行的还是jar里boo…

传奇手游详细图文架设教程

开始架设 1. 架设条件 传世手游架设需要准备&#xff1a; linux 服务器&#xff0c;建议 CentOs 7.6 版本&#xff0c;游戏源码&#xff0c; 游戏运行大约占 2.5G 左右内存。 2. 安装宝塔及环境 宝塔是一个服务器运维管理软件&#xff0c;安装命令&#xff1a; yum inst…

在QT中使用POST方式发送HTTP数据

在QT中使用POST方式发送HTTP数据可以通过QNetworkAccessManager和QNetworkRequest来实现。具体步骤如下&#xff1a; 1. 创建一个QNetworkAccessManager对象。 QNetworkAccessManager *manager new QNetworkAccessManager(this); 2. 创建一个QNetworkRequest对象&#xff0…

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

提到NVMe over Fabric&#xff0c;我就会想到它的几种应用场景&#xff1a; 1、 存储阵列到主机的网络连接&#xff08;替代FC、iSCSI等&#xff09;&#xff1b; 2、 服务器、本地NVMe存储解耦&#xff08;跨机箱/JBOF&#xff09;&#xff0c;SSD存储资源池化共享&#xff…

Android Framework 常见解决方案(25-1)定制CPUSET解决方案-framework部分修改

1 原理说明 这个方案有如下基本需求&#xff1a; 构建自定义CPUSET&#xff0c;/dev/cpuset中包含一个全新的cpuset分组。且可以通过set_cpuset_policy和set_sched_policy接口可以设置自定义CPUSET。开机启动后可以通过zygote判定来对特定的应用进程设置CPUSET&#xff0c;并…

序章 搭建环境篇—准备战士的剑和盾

第一步&#xff1a;安装node.js Node.js 内置了npm&#xff0c;只要安装了node.js&#xff0c;就可以直接使用 npm&#xff0c;官网地址&#xff1a; Download | Node.js 在这里不建议安装最新版本的node.js&#xff0c;可以选跟我一样的版本&#xff0c;node版本v16.13.2 链…