4.0 KiB
4.0 KiB
- 写在前面
- 寄存器大小写不敏感 currentel currentEL都可以
- 通用寄存器 General-Purpose Register
- x0-x31
- w0-w31
- 特殊寄存器 Special-Purpose Register
- Pstate (跟spsr是对应的,只不过可以拆开来用)
- CurrentEL
- 例子
mrs x0 CurrentEL
- 典型应用场景
- 例子
- DAIF
- 例子
mrs x0 daif
- 典型应用场景
- 例子
- NZCV
- 例子
mrs x0 nzcv
- 典型应用场景
- 例子
- PAN Privileged Access Never 可选
- ARMv8.1-PAN
- UAO User Access Override 可选
- ARMv8.2-UAO
- DIT Data Independent Timing 可选
- ARMv8.4-DIT
- 例子
- 典型应用场景
- TCO Tag Check Override
- ARMv8.5-MemTag
- SSBS
- ARMv8.0-SSBS 8.5?
- CurrentEL
- ELR Related 重要
- ELR
- 说明 记录异常地址返回值 看一下LR寄存器
- 典型应用场景
- 进入异常时,硬件设置
- kernel_entry 处理异常 ?
- kernel_exit 异常退出
msr elr_el1, x21
- ELR
- SPSR Related 重要
- SPSR
- 说明 用于进入异常之前备份Pstate
- 典型应用场景
- 进入异常时硬件设置
- kernel_entry 处理异常
- kernel_exit 异常退出
msr spsr_el1, x22
- SPSR
- Floating Point Related 补充
- FPCR
- FPSR
- Pstate (跟spsr是对应的,只不过可以拆开来用)
- 系统寄存器 Reg_ELn n=0-3
- 基本分类
- 通用系统控制寄存器 General System Control Register
- 重要
- 调试寄存器 Debug Register
- 部分寄存器DBG开头
- 性能监控寄存器 Performance Monitor Register
- PM开头
- 活动监控寄存器 Activity Monitor Resister
- AM开头
- 统计扩展寄存器 Statistical Profiling Extention Register
- PM开头
- RAS 寄存器 Reliability, Availability, and Serviceability Extension Register
- 大部分ER开头
- 通用定时器寄存器 Generic Timer Resister
- CNT开头, CNTP开头
- 通用系统控制寄存器 General System Control Register
- 通用系统寄存器列表
- VBAR Vector Base Address Register
- 说明 中断向量基地址
- 典型使用场景
- Linux __primary_switched中设置为vectors中的地址
adr_l x8, vectors
// load VBAR_EL1 with virtualmsr vbar_el1, x8
// vector table address
- Rt-thread rt_hw_set_current_vbar
MSR VBAR_EL1,X0
- Linux __primary_switched中设置为vectors中的地址
- Cache相关
- CTR Cache Type Register 只有EL0
- 说明
- 典型使用场景
- Linux read_cpuid_cachetype()
- CTR Cache Type Register 只有EL0
- 地址转换相关 TCR/SCTLR/TTBR
- TCR Translation Control Register
- 说明 控制页表转换控制, 一堆可配置bit位
- SCTLR System Control Register EL1-EL3
- 说明 系统控制,一堆可配置bit位
- 典型使用场景
- 设置大小端
- 设置MMU
- TTBR
- 说明 页表基地址
- 典型使用场景
- 设置页表基地址
- TCR Translation Control Register
- 异常相关
- ESR Exception Syndrome Register
- 说明 记录了异常原因的寄存器 一共有5个有效bit,叫做exception class
- 典型使用场景 ?没分析对
- ESR Exception Syndrome Register
- ID寄存器 MIDR/MPIDR/REVIDR/TPIDR
- MPIDR Multiprocessor Affinity Register EL1
- TPIDR Read/Write Software Thread ID Register EL0-EL3
- 说明 PE不用这个寄存器 纯给OS软件用 我理解就是软件自己定义的cpuid,从mpidr转化而来
- 典型场景
- Linux ==不清楚==
- Rt-thread 存Lwp ID用?
- MIDR
- 说明 用于显示厂商,架构等 EL1
-
观测方法
- 典型场景 没啥用
- REVIDR
- 说明 提供次要修订信息 厂商自己实现,全0
- SCR/HCR
- HCR Hypervisor Configuration Register 只有EL2
- 功能 用来配置EL2
- SCR Secure Config Register 只有EL3
- 功能 用来配置EL3
- 使用场景
- 与中断路由有关系
- HCR Hypervisor Configuration Register 只有EL2
- TVAL
- MAIR
- , Memory Attribute Indirection Register
- CLIDR
- CSSELR
- CCSIDR
- DCZID
- MODE
- RMR
- RVBAR
- CPACR
- ZCR
- VBAR Vector Base Address Register
- 基本分类