【ARM】SMMU:boot_code.s中转换页表的配置方式

news2024/9/22 4:09:28

#工作记录#

拖了非常久的页表转换整理,补坑!废话不多说开整。

MMU相关的知识点可以参考我之前的博客,这篇博客主要介绍如何在boot_code.s中配置页表。

目录

1.boot_code.s简介

2. MMU配置相关

2.1系统寄存器

2.2 ttb0_base的配置


1.boot_code.s简介

在ARMv8架构中,boot_code.s是一个特殊的汇编语言源文件,通常用于编写启动代码。启动代码是系统启动时首先执行的代码,负责初始化系统环境,设置堆栈,以及跳转到操作系统的启动例程。

以下是boot_code.s的一些常见用途和特点:

  1. 初始化堆栈:在系统启动时,需要设置一个初始堆栈,以便程序可以正常执行函数调用和返回。

  2. 设置BSS段:BSS段(Block Started by Symbol)是未初始化的全局变量和静态变量的区域。启动代码通常需要将这个区域清零。

  3. 设置控制寄存器:启动代码可能需要设置一些控制寄存器,以配置处理器的工作模式和行为。

  4. 跳转到操作系统启动例程:一旦系统环境被初始化,启动代码会跳转到操作系统的启动例程,通常是操作系统内核的入口点。

  5. 异常处理:启动代码可能需要处理一些早期的异常,例如内存访问错误或非法指令。

  6. 平台特定配置:不同的硬件平台可能需要不同的启动代码来配置硬件,例如设置时钟、初始化I/O设备等。

  7. 安全性:在一些系统中,启动代码还负责设置安全特性,如安全启动模式,以确保系统的安全性

2. MMU配置相关

2.1系统寄存器

系统寄存器用于控制和管理CPU的操作模式、特权级别、内存管理、中断处理等关键系统功能。主要的系统寄存器包括:

  1. SCTLR_ELx(System Control Register):系统控制寄存器,用于控制和配置处理器的系统级特性,如内存保护、缓存策略等。
  2. TTBR0_ELx(Translation Table Base Register):转换表基地址寄存器,用于定义页表的基地址,支持内存地址转换和虚拟内存管理。
  3. MAIR_ELx(Memory Attribute Indirection Register):内存属性指示寄存器,用于定义不同内存区域的属性,如缓存策略、访问权限等。
  4. TCR_ELx(Translation Control Register):转换控制寄存器,用于控制地址转换的行为和特性,如地址范围、页大小等。
  5. ESR_ELx(Exception Syndrome Register):异常综合症寄存器,用于存储异常发生时的状态信息,帮助调试和错误处理。

这些系统寄存器根据不同的异常级别(EL0, EL1, EL2, EL3)有不同的实例,如SCTLR_EL1, SCTLR_EL2等,分别对应用户态、内核态、虚拟化和安全态的控制。

以EL3为例:

1.首先配置SCTLR_EL3无效化CPU内部的L1 cache

mrs x0,SCTLR_EL3
and x0, x0, #12
msr SCTLR_EL3, x0

2.初始化页表信息配置tcr,mair系统寄存器

ldr x1,=0x80803520
msr tcr_el3,x1
ldr x1,=0xccee77bb0444ff00
msr mair_el3,x1
ldr x0,=ttb0
msr ttbr0_el3,x0

tcr_el3各bit含义如下

这个T0SZ又把我引到计算页表大小的章节了,继续探索一下这个到底是怎么个事。

由文档描述可以知道T0SZ用来描述输入address的size,那假设当我们输入的地址范围是44bits的时候,是不是我们输入的地址T0SZ就配置成44呢?

根据文档当我们地址范围为44bits的时候,需要将T0SZ配置为20。

mair_el3寄存器

设置不同的memory attribute属性。共可以配置成8种类型,后面由table translation descriptor 来选择使用哪个attribute。

上例中的ttb0_base在后面会描述,这里只是一个传参的作用,传递配置给ttbr0_el3。

ttbr0_el3寄存器

3.开启mmu和cache

mrs x0, s3_1_c15_c2_1
orr x0, x0, #(0x1<<6)
msr s3_1_c15_c2_1, x0

s3_1_c15_c2_1可以参考下面这个博客。

ARMv8架构u-boot启动流程详细分析(2)_armv8 atf+bootloader-CSDN博客

2.2 ttb0_base的配置

对于ttb0_base的配置就是需要进行页表的配置,将地址与attribute带上分配好。

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

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

相关文章

设计模式的优点

设计模式的优点 1、可重用性2、架构指导3、经验传承4、设计透明5、实践验证 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、可重用性 设计模式允许开发者在遇到相似问题时复用解决方案&#xff0c;节省时间并减少错误。 2、架构指导 …

汽车网络安全 -- MAC介绍:CMAC与CBC-MAC不能混为一谈

目录 1.什么是MAC 2.CMAC 3.HMAC 4.小结 1.什么是MAC MAC全称Message authentication code&#xff0c;是经过特定算法后产生的一小段数据信息&#xff0c;用于校验某数据的完整性和真实性。在数据传递过程中&#xff0c;可检查其内容是否被更改过&#xff0c;不管更改的原…

C语言——分支结构程序设计

分支结构程序设计&#xff08;选择结构&#xff09; 定义&#xff1a;根据条件是否成立&#xff0c;选择相应的操作 条件判断&#xff1a;根据某个条件成立与否&#xff0c;决定是否执行指定的任务。 选择结构中的常见形式&#xff1a; if&#xff08;关系表达式&#xff09…

含锡废水处理的主体处理

含锡废水处理是一个综合性的环保过程&#xff0c;旨在去除废水中的锡离子和其他有害物质&#xff0c;确保废水达到国家排放标准。以下是对含锡废水处理技术的详细阐述&#xff1a; 一、处理技术概述 含锡废水处理技术主要包括化学法、生物法和物理法三大类。每种方法都有其独特…

论文阅读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face https://proceedings.neurips.cc/paper_files/paper/2023/file/77c33e6a367922d003ff102ffb92b658-Paper-Conference.pdf HuggingGPT: 解决与ChatGPT及其在Hugging Face的朋友们相关的AI任务 Yon…

乐尚代驾十订单支付

账单信息 司机结束代驾之后&#xff0c;生成账单&#xff08;包含账单信息和分账信息&#xff09;司机发送账单给乘客乘客获取账单之后&#xff0c;进行支付 获取账单信息 order_bill表记录的账单信息&#xff0c;我们直接获取即可 Operation(summary "根据订单id获…

递归~~~

一.定义 计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 比如单链表递归遍历的例子&#xff1a; void f(Node node){if (node null){return;}f(node.next);} 说明&#xff1a; 1.自己调用自己&#xff0c;如…

基于SpringBoot+Vue的汽车服务管理系统(带1w+文档)

基于SpringBootVue的汽车服务管理系统(带1w文档) 基于SpringBootVue的汽车服务管理系统(带1w文档) 在开发系统过程中采用Java语言、MySQL数据库存储数据。系统以B/S为基础&#xff0c;实现管理一体化、规范化&#xff0c;为用户提供一个高效快捷的交流系统[5]。利用springboot架…

LearnOpenGL之3D显示

前序 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;https://github.com/wangyongyao1989/AndroidLearnOpenGL 系列文章&#xff1a; 1、LearnOpenGL之入门基础 2、LearnOpenGL之3D显示 显示效果 根据上一篇文章的LearnO…

结构型设计模式:桥接/组合/装饰/外观/享元

结构型设计模式&#xff1a;适配器/代理 (qq.com)

浮动IP(Floating IP)计费;OpenStack算力共享;OpenStack实现资源虚拟化;算力调度策略

目录 浮动IP(Floating IP)计费 浮动IP的定义与作用 计费中的浮动IP数据 浮动IP在计费中的作用 OpenStack算力共享 一、OpenStack在算力共享中的角色 二、OpenStack与算力共享的结合方式 三、实际应用案例 算力调度策略 算力计费策略 OpenStack实现资源虚拟化 1.虚…

用于仅摄像头闭环驾驶的视觉语言模型

CarLLaVA: Vision language models for camera-only closed-loop driving 用于仅摄像头闭环驾驶的视觉语言模型 Abstract In this technical report, we present CarLLaVA, a Vision Language Model (VLM) for autonomous driving, developed for the CARLA Autonomous Driv…

【云原生】kubernetes最新版本1.30.2,集群搭建部署全方位攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

SimGCL graph contrastive learning by finding homophily in heterophily

发表于: Knowledge and Information Systems, ccfb 推荐指数: #paper/ ⭐ 总结: 重新定义了相似度矩阵, 重新定义了特征, 重新设计了节点删除概率等, 但是, 换汤不换药, 引入了大量的超参 (快 10 个了吧). 创新点不够, 所以 ccf B 期刊理所应该. (甚至我觉得更低) 相关知识: 本…

详细教程 MySQL 数据库 下载 安装 连接 环境配置 全面

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。 首先数据有两种&#xff0c;一种是关系型数据库&#xff0c;另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据&#xff0c;表和表之间可以有很多复杂的关系&a…

通俗易懂玩Qt:时间滑动选择器实现(内附主要源码)

时间滑动选择器实现 组件说明&#xff1a; 本组件命名为时间滑动选择器&#xff0c;主要运用于 arm 平台下的触摸屏上&#xff0c;虽然 QT 自带有时间选择组件&#xff0c;但是对触摸屏的使用并不友好&#xff0c;为了提升项目界面的交互性&#xff0c;于是就有了时间滑动选择器…

【深海王国】初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发(1)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛苦工作的你今天也辛苦啦(/≧ω) 今天大都督为大家带来电路板的番外系列——初中生也能画的电路板&#xff1f;番外1&#xff1a;Arduino其他家族成员的拓展板开发&#xff0c;带你给其他Arduino家族成…

数据库漫游记:表、视图、函数、存储过程及触发器之跨平台兼容性分析(上)

先言之 &#x1f31f;余撰此文&#xff0c;乃为导引初窥数据库之学人&#xff0c;俾其明了表、视图、函数、存储过程及触发器之义理&#xff0c;及其于诸般平台之上创建、修改与废弃之法式。盖初学之人&#xff0c;常陷于迷雾之中&#xff0c;难辨东西&#xff0c;故须详述而明…

lombok使用@slf4j 运行时提示找不到符号log(Missing POM for org.projectors:lombok:jar)

1.问题表现 原本是之前搭建好的工程&#xff0c;只是换了个开发环境重新启动就不行了。一直编译不通过&#xff01; 可以看到IDEA其实是引入了依赖的 都没有出现红色波浪线 <mapstruct.version>1.5.5.Final</mapstruct.version> <lombok.version>1.18.30<…

鸿蒙(API 12 Beta2版)NDK开发【JSVM-API使用规范】

JSVM-API使用规范 生命周期管理 【规则】 合理使用OH_JSVM_OpenHandleScope和OH_JSVM_CloseHandleScope管理JSVM_Value的生命周期&#xff0c;做到生命周期最小化&#xff0c;避免发生内存泄漏问题。 每个JSVM_Value属于特定的HandleScope&#xff0c;HandleScope通过OH_JSV…