133 lines
4.0 KiB
Markdown
133 lines
4.0 KiB
Markdown
|
- 写在前面
|
|||
|
- 寄存器大小写不敏感 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?
|
|||
|
- ELR Related **重要**
|
|||
|
- ELR
|
|||
|
- 说明 记录异常地址返回值 看一下LR寄存器
|
|||
|
- 典型应用场景
|
|||
|
- 进入异常时,硬件设置
|
|||
|
- kernel_entry 处理异常 ?
|
|||
|
- kernel_exit 异常退出
|
|||
|
- `msr elr_el1, x21`
|
|||
|
- SPSR Related **重要**
|
|||
|
- SPSR
|
|||
|
- 说明 用于进入异常之前备份Pstate
|
|||
|
- 典型应用场景
|
|||
|
- 进入异常时硬件设置
|
|||
|
- kernel_entry 处理异常
|
|||
|
- kernel_exit 异常退出
|
|||
|
- `msr spsr_el1, x22`
|
|||
|
- Floating Point Related 补充
|
|||
|
- FPCR
|
|||
|
- FPSR
|
|||
|
- 系统寄存器 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开头
|
|||
|
- 通用系统寄存器列表
|
|||
|
- VBAR **Vector Base Address Register**
|
|||
|
- 说明 中断向量基地址
|
|||
|
- 典型使用场景
|
|||
|
- Linux \_\_primary_switched中设置为vectors中的地址
|
|||
|
- `adr_l x8, vectors` // load VBAR_EL1 with virtual
|
|||
|
- `msr vbar_el1, x8` // vector table address
|
|||
|
- Rt-thread rt_hw_set_current_vbar
|
|||
|
- `MSR VBAR_EL1,X0`
|
|||
|
- Cache相关
|
|||
|
- CTR **Cache Type Register** 只有EL0
|
|||
|
- 说明
|
|||
|
- 典型使用场景
|
|||
|
- Linux read_cpuid_cachetype()
|
|||
|
- 地址转换相关 TCR/SCTLR/TTBR
|
|||
|
- TCR **Translation Control Register**
|
|||
|
- 说明 控制页表转换控制, 一堆可配置bit位
|
|||
|
- SCTLR **System Control Register** EL1-EL3
|
|||
|
- 说明 系统控制,一堆可配置bit位
|
|||
|
- 典型使用场景
|
|||
|
- 设置大小端
|
|||
|
- 设置MMU
|
|||
|
- TTBR
|
|||
|
- 说明 页表基地址
|
|||
|
- 典型使用场景
|
|||
|
- 设置页表基地址
|
|||
|
- 异常相关
|
|||
|
- ESR **Exception Syndrome Register**
|
|||
|
- 说明 记录了异常原因的寄存器 一共有5个有效bit,叫做exception class
|
|||
|
- 典型使用场景 ?没分析对
|
|||
|
- ID寄存器 MIDR/MPIDR/REVIDR/TPIDR
|
|||
|
- MPIDR **Multiprocessor Affinity Register** EL1
|
|||
|
- 说明 只读寄存器,记录PE亲和信息 aff0-3 由小到大记录PE的id,有超线程会记录超线程
|
|||
|
- ![[mpidr说明.png]]
|
|||
|
- 观测方法
|
|||
|
- 未知
|
|||
|
- 典型场景
|
|||
|
- Linux ==调查==
|
|||
|
- Rt-thread
|
|||
|
- 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
|
|||
|
- 使用场景
|
|||
|
- 与中断路由有关系
|
|||
|
- TVAL
|
|||
|
- MAIR
|
|||
|
- , Memory Attribute Indirection Register
|
|||
|
- CLIDR
|
|||
|
- CSSELR
|
|||
|
- CCSIDR
|
|||
|
- DCZID
|
|||
|
- MODE
|
|||
|
- RMR
|
|||
|
- RVBAR
|
|||
|
- CPACR
|
|||
|
- ZCR
|