鸿蒙轻内核A核源码分析系列六 MMU协处理器(1)

在前面系列分析虚实映射时,涉及到了一些MMU协处理器与相关的汇编代码没有深入讲解。本文来专门分析那些协处理器与汇编代码。

本文中所涉及的源码,以OpenHarmony LiteOS-A内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 获取。如果涉及开发板,则默认以hispark_taurus为例。MMU相关的操作函数主要在文件arch/arm/arm/src/los_arch_mmu.c中定义。

本系列首先了解下ARM CP15协处理器的知识,接着介绍下协处理器相关的汇编指令,最后分析下MMU相关汇编代码。

1、 ARM C15 协处理器

在ARM嵌入式应用系统中, 很多系统控制由ARM CP15协处理器来完成的。CP15协处理器包含编号0-15的16个32位的寄存器。例如,ARM处理器使用C15协处理器的寄存器来控制cache、TCM(Tightly-Coupled Memory)和存储器管理。CP15的各个寄存器的概要信息如下图,图片来自官方资料《ARM® Cortex™-A Series Version: 4.0 Programmer's Guide》。

在这些C15寄存器中和MMU关系较大的有C2、C7、C17寄存器,这些寄存器的作用,从上图可以看出,分别是:

  • CP15 C2寄存器

Memory protection and control registers,内存保护和控制寄存器,包含Translation Table Base Register 0 (TTBR0)、Translation Table Base Register 1 (TTBR1)和Translation Table Base Control Register (TTBCR)。TTBR0、TTBR1是L1转换页表的基地址,TTCR控制TTBR0和TTBR1的使用。

  • CP15 C7寄存器

Cache and branch predictor maintenance functions、Data and instruction barrier operations用于高速缓存和写缓存控制。

  • CP15 C13寄存器

Context ID Register (CONTEXTIDR)、Software thread ID registers用于保存进程标识符(asid地址空间编号)。

2、ARM C15 协处理器汇编指令

访问CP15寄存器的指令主要是MCR和MRC这两个指令。本小节详细介绍下这2个汇编指令。先看下指令的含义,MCR是ARM处理器寄存器到协处理器寄存器的数据传送指令,英文为Move CPU register to coprocessor register,MRC是协处理器寄存器到ARM处理器寄存器的数据传送指令,英文为Move from coprocessor register to CPU register。这2个指令的语义格式如下,可以看出语义格式是一样的,但是读取写入含义会有差异。MCR是读取Rt寄存器写入协处理器寄存器CRn、CRm,而MRC是读取协处理器寄存器CRn、CRm写入Rt寄存器。

复制代码
MCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
MRC{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

MCR详细的语义介绍如下:

复制代码
Syntax
MCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

where:
cond
is an optional condition code. 可选的条件码。
coproc
is the name of the coprocessor the instruction is for. The standard name is pn, where n is an integer in the range 0 to 15.协处理器的名称,标准名称为pn,其中n为0-15,例如p14、p15。
opcode1
is a 3-bit coprocessor-specific opcode. 3位的操作码。
opcode2
is an optional 3-bit coprocessor-specific opcode.可选的3位操作码。
Rt
is an ARM source register. Rt must not be PC. 要读取的ARM寄存器,不能为PC寄存器。
CRn, CRm
are coprocessor registers.要写入的协处理器寄存器。

MRC详细的语义介绍如下:

复制代码
Syntax
MRC{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

where:
cond
is an optional condition code.  可选的条件码。
coproc
is the name of the coprocessor the instruction is for. The standard name is pn, where n is an integer in the range 0 to 15.协处理器的名称,标准名称为pn,其中n为0-15,例如p14、p15。
opcode1
is a 3-bit coprocessor-specific opcode.3位的操作码。
opcode2
is an optional 3-bit coprocessor-specific opcode.可选的3位操作码
Rt
is the ARM destination register. Rt must not be PC.要写入的ARM寄存器,不能为PC寄存器。
Rt can be APSR_nzcv. This means that the coprocessor executes an instruction that changes the value of the condition flags in the APSR. Rt也可以为APSR_nzcv。
CRn, CRm
are coprocessor registers.要读取的协处理器寄存器。

如果大家想更加深入的学习 OpenHarmony 开发的内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ......

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ......

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://qr21.cn/FV7h05
相关推荐
●VON6 小时前
HarmonyKit | 时间戳转换:自动识别秒/毫秒与双向转换器实现
华为·harmonyos·鸿蒙
国服第二切图仔7 小时前
HarmonyOS APP《画伴梦工厂》开发第44篇-页面路由注册与动态加载——main_pages配置
深度学习·华为·harmonyos
我是小a8 小时前
「财务管家」智能记账应用:HarmonyOS NEXT 页面布局设计与实现详解
华为·harmonyos·鸿蒙·鸿蒙系统
SuperHeroWu79 小时前
HarmonyOS7特性解读
harmonyos·特性·智能化·多窗形态·场景协同·空间化
心中有国也有家11 小时前
使用 DevEco Studio 配置 Flutter 鸿蒙签名
学习·flutter·华为·harmonyos
如此风景11 小时前
鸿蒙开发状态管理 V2 全部装饰器详解速查表
harmonyos
爱吃大芒果12 小时前
鸿蒙 ArkTS 网络工程进阶:@ohos.net.http 模块下的长连接、超时与防内存泄漏实战
华为·harmonyos
FrameNotWork12 小时前
HarmonyOS 6.0 沉浸式状态栏与安全区域适配实战
华为·harmonyos
绝世番茄12 小时前
鸿蒙原生ArkTS布局方式之Stack+Opacity叠加淡入淡出深度解析
华为·harmonyos·鸿蒙
心中有国也有家13 小时前
鸿蒙Flutter开发环境从零搭建教程(Windows/macOS双平台·避坑版)
学习·flutter·华为·harmonyos