快速链接:
.
个人博客笔记导读目录(全部)
- ARMv8/ARMv9架构精选系列–目录
- ARMV8/ARMV9/Trustzone/TEE安全课程
目录
-
-
-
- 1、stage1的页表属性
- 2、stage2的页表属性
- 3、各标志位的详细介绍
-
- 3.1、MemAttr
- 3.1、NS
- 3.1、AP
- 3.1、SH
- 3.1、AF
- 3.1、nG
- 3.1、DBM
- 3.1、Contiguous
- 3.1、XN or UXN
1、stage1的页表属性
(Attribute fields in stage 1 VMSAv8-64 Block and Page descriptors)
- PBHA, bits[62:59] :for FEAT_HPDS2
- XN or UXN, bit[54] : Execute-never or Unprivileged execute-never
- PXN, bit[53] :Privileged execute-never
- Contiguous, bit[52] : translation table entry 是连续的,可以存在一个TLB Entry中
- DBM, bit[51] :Dirty Bit Modifier
- GP, bit[50] :for FEAT_BTI
- nT, bit[16] :for FEAT_BBM
- nG, bit[11] :缓存在TLB中的翻译是否使用ASID标识
- AF, bit[10] : Access flag, AF=0后,第一次访问该页面时,会将该标志置为1. 即暗示第一次访问
- SH, bits[9:8] :shareable属性
- AP[2:1], bits[7:6] :Data Access Permissions bits,
- NS, bit[5] :Non-secure bit
- AttrIndx[2:0], bits[4:2] :
2、stage2的页表属性
(Attribute fields in stage 2 VMSAv8-64 Block and Page descriptors)
- PBHA[3:1], bits[62:60] :for FEAT_HPDS2
- PBHA[0], bit[59] :for FEAT_HPDS2
- XN[1:0], bits[54:53] :Execute-never
- Contiguous, bit[52] :translation table entry 是连续的,可以存在一个TLB Entry中
- DBM, bit[51] :Dirty Bit Modifier
- nT, bit[16] :for FEAT_BBM
- FnXS, bit[11] :for FEAT_XS
- AF, bit[10] :Access flag
- SH, bits[9:8] :shareable属性
- S2AP, bits[7:6] :Stage 2 data Access Permissions
- MemAttr, bits[5:2] :
3、各标志位的详细介绍
3.1、MemAttr
3.1、NS
Non-secure比特 表示转换后的物理地址是secure的还是non-secure的。
在REE(linux)和TEE(optee)双系统的环境下,可同时开启两个系统的MMU.
在secure和non-secure中使用不同的页表.secure的页表可以映射non-secure的内存,而non-secure的页表不能去映射secure的内存,否则在转换时会发生错误
3.1、AP
Data access permissions 数据访问权限
3.1、SH
shareable属性
3.1、AF
Access flag, AF=0后,第一次访问该页面时,会将该标志置为1. 即暗示第一次访问
3.1、nG
对于 EL0/EL1 虚拟地址空间,Page Descriptor属性字段中的 nG 位将转换标记为Gloabl(G) 或non-Gloabl(nG)。例如,内核映射是Gloabl(G)翻译,应用程序映射是non-Gloabl翻译。Gloabl翻译适用于当前正在运的任何应用程序。非全局翻译仅适用于特定应用程序
non-Gloabl映射在 TLB 中使用 ASID进行标记。在 TLB 查找时,将 TLB 条目中的 ASID 与当前选择的 ASID 进行比较。如果它们不匹配,则不使用TLB 条目。下图显示了内核空间中没有 ASID 标记的全局映射和用户空间中具有 ASID 标记的非全局映射
3.1、DBM
TODO
3.1、Contiguous
TODO
3.1、XN or UXN
特权和非特权不可从该memory-region中执行指令的标志位:
Execute-never
Unprivileged execute-never