★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★

以SCTLR寄存器来阐述在armv7、armv8-arch64、armv8-arch64的使用方式
(其实大多数的系统寄存器,都是这种处理方式)

SCTLR是系统控制寄存器(SCTLR : system control registers)

在ARMV8上有如下sctlr寄存器
(aarch64)
SCTLR_EL1
SCTLR_EL2
SCTLR_EL3

(aarch32)
SCTLR (NS) – banked
HSCTLR
SCTLR (S) – banked

在ARMV8上有如下sctlr寄存器

SCTLR寄存器的位定义

SCTLR的使用方式

SCTLR是system control register,系统控制寄存器。如果跑了双系统(linux,tee),那么在两份系统中对于该寄存器会产生不同的配置的,如linux中enable mmu,tee中disable mmu, 这样就导致在两份系统中的SCTLR值不同.
那么我们看看ARM的设计

(1)、在armv7中,这些通用的系统寄存器是有两组的,即根据SCR.NS比特位的不同,会自动访问相应的那一组寄存器。也就是说,你在linux中和在tee中读写的SCTLR是两个不同的寄存器;
(2)、在armv8-arch64中,有SCTLR_EL1、SCTLR_EL2、SCTLR_EL3三个系统控制寄存器,这里我们只看SCTLR_EL1. 该寄存器只有一组,在双系统切换时(linux,tee),会在ATF代码中save/restore 该寄存器. 其实对于大多数通用的系统寄存器都是如此.
(3)、在armv8-arch32中,SCTLR_EL1的低32位map成了SCTLR,该寄存器也是只有一组,在双系统切换时(linux,tee),也需在ATF代码中save/restore 该寄存器

在armv8-arch64中,是以MRS/MSR来访问SCR寄存器的,而在armv7/armv8-arch32中是以操作协处理器cp15来访问的

例如:
(1)、armv8-arch64 enable MMU

__enable_mmu:mrs x18, sctlr_el1          // preserve old SCTLR_EL1 valuemrs  x1, ID_AA64MMFR0_EL1ubfx    x2, x1, #ID_AA64MMFR0_TGRAN_SHIFT, 4cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTEDb.ne   __no_granule_supportmsr ttbr0_el1, x25          // load TTBR0msr    ttbr1_el1, x26          // load TTBR1isbmsr sctlr_el1, x0    //将x0写入到sctlr_el1isb/** Invalidate the local I-cache so that any instructions fetched* speculatively from the PoC are discarded, since they may have* been dynamically patched at the PoU.*/ic ialludsb    nshisb

(2)、armv8-arch32或armv7 enable MMU

ENTRY(__turn_mmu_on)mov  r0, r0instr_syncmcr p15, 0, r0, c1, c0, 0       @ write control reg  //操作协处理器,将r0写入到sctlrmrc    p15, 0, r3, c0, c0, 0       @ read id reginstr_syncmov r3, r3mov   r3, r13ret  r3
__turn_mmu_on_end:
ENDPROC(__turn_mmu_on)

armv8/armv7中SCTLR的区别相关推荐

  1. linux arm寄存器,【寄存器】在armv8/armv7中ARM system control registers的区别

    以SCTLR寄存器来阐述在armv7.armv8-arch64.armv8-arch64的使用方式 (其实大多数的系统寄存器,都是这种处理方式) SCTLR是system control regist ...

  2. MyBatis中#{}和${}的区别

    ------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1.在 MyBatis 的映射配置文件中,动态传递参数有两种方式: (1)#{} ...

  3. Mybatis 中$与#的区别

    1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select i ...

  4. mybatis 中#与$的区别

    2019独角兽企业重金招聘Python工程师标准>>> MyBatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #u ...

  5. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

  6. Activity中与ListActivity中使用listview区别

    一.Activity中与ListActivity中使用listview区别(本身没多大区别,只是ListActivity在listview的显示上做了一些优化) Activity中使用Listview ...

  7. js中onload和jQuery中的ready区别

    js中onload和jQuery中的ready区别 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. ------>不能写多个(如果有多个,只会执行一个) $(do ...

  8. Go语言中*和的区别

    Go语言中*和&的区别 总结 示例 老是分不清*和&的区别,今天特意总结了一下. 1. 总结 &是取地址符. *可以表示一个变量是指针类型,也可以表示指针类型变量所指向的存储单 ...

  9. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)

    文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...

最新文章

  1. 如何爬取知乎中问题的回答以及评论的数据?
  2. 解决SqlServer2008修改表后保存时出现“save changes is not permitted…”问题
  3. 使用Node.js部署智能合約(Smart Contract)
  4. 那位标榜技术驱动的开发者去哪了?
  5. 程序员新人怎样在复杂代码中找 bug?
  6. android.util.Base64 和 org.apache.commons.codec.binary.Base64
  7. OSChina 周六乱弹 —— 运维狗的背锅日常
  8. es6 Node加载
  9. Scipy信号分析处理(基线漂移、滤波)(笔记01)
  10. IT男出轨概率最高是哪家机构得出的统计结论?
  11. cad解除块的快捷命令_47个快捷键50个CAD技巧,快收藏起来
  12. 摩托罗拉linux软件下载,摩托罗拉手机软件驱动下载
  13. 字节架构师:来说说 Kafka 的消费者客户端详解,你都搞懂了吗,Javaweb面试总结
  14. 罗兰贝格 | 适者生存:VUCA的世界
  15. ListView优化机制及滑动时数据时出现的数据错乱重复问题 图片、checkBox等
  16. D2x神符之语中英文对照图文豪华版
  17. 【论文阅读笔记】基于分类器预测置信度的集成选择| Ensemble Selection based on Classifier Prediction Confidence
  18. 8583组包解包及银联3des签到消费java示例
  19. ESD二极管各项参数字母的解释-优恩
  20. 大学生关于激励自己的名言座右铭(合集)

热门文章

  1. 数据中心的供配电与空调
  2. 什么?这个机房没人了?
  3. 浅谈如何防范电池事故
  4. JAVA项目实训struts2_Java Web项目搭建过程记录(struts2)
  5. Py之matplotlibseaborn :高级图可视化之​​​​​​​Q-Q分位数图probplot、​​​​​​​boxplot箱线图、stripplot分类散点图案例应用及代码实现
  6. CV之IS:计算机视觉之图像分割(Image Segmentation)算法的挑战任务、算法演化、目标检测和图像分割(语义分割/实例分割/全景分割)的对比
  7. AI公开课:19.05.16漆远-蚂蚁金服集团CF《金融智能的深度与温度》课堂笔记以及个人感悟—191017再次更新
  8. TF之TF flags:TF flags(命令行解析)的简介、安装、使用方法之详细攻略
  9. TF之DD:利用Inception模型+GD算法生成带背景的大尺寸、高质量的Deep Dream图片
  10. 从C++Primer某习题出发,谈谈C语言标准I/O的缓存问题