慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第四部分

分析代码

	/* Populate ID registers. */
	mrs	x0, midr_el1
	mrs	x1, mpidr_el1
	msr	vpidr_el2, x0
	msr	vmpidr_el2, x1

#ifdef CONFIG_COMPAT
	msr	hstr_el2, xzr			// Disable CP15 traps to EL2
#endif

ID寄存器

第一行注释的含义是:填充 ID 寄存器簇。

第二行的含义是把 midr_el1 寄存器的内容填充到x0寄存器里。其中,midr_el1 的含义如下:
MIDR_EL1, Main ID Register
Provides identification information for the PE, including an implementer code for the device and a device ID number.
提供PE的身份鉴别信息,包括设备的实现者代码和设备ID号。
该寄存器有很多域,有的域提供了ARM的厂家编码信息,有的域提供了ARM的版本信息,细节详见芯片手册。

第三行的含义是把 mpidr_el1 寄存器的内容填充到x1寄存器里,其中,mpidr_el1的含义如下:
MPIDR_EL1, Multiprocessor Affinity Register
In a multiprocessor system, provides an additional PE identification mechanism for scheduling purposes.
该寄存器是一个多核亲和性寄存器,为调度目的提供了额外的PE识别机制。

第四行的含义是将x0寄存器的值存放到 vpidr 寄存器里面,根据芯片手册的描述,
Holds the value of the Virtualization Processor ID. This is the value returned by EL1 reads of  MIDR_EL1.
vpidr 寄存器是虚拟化芯片ID寄存器,与 midr_el1具有相同的字段分布
将x0的内容赋值到 vpidr_el2 寄存器;

第5行的含义是将x1的值赋值到 vmpidr_el2,根据芯片手册的描述
VMPIDR_EL2, Virtualization Multiprocessor ID Register
Holds the value of the Virtualization Multiprocessor ID. This is the value returned by EL1 reads of MPIDR_EL1.
该寄存器是虚拟化多核ID寄存器,该值是MPIDR_EL1的返回值。

CONFIG_COMPAT

第7行,CONFIG_COMPAT 在内核配置选项的含义如下:

  │ Symbol: COMPAT [=y]                                                                                                                                                                                 │  
  │ Type  : bool                                                                                                                                                                                        │  
  │ Defined at arch/arm64/Kconfig:1274                                                                                                                                                                  │  
  │   Prompt: Kernel support for 32-bit EL

CONFIG_COMPAT 是一个内核配置选项,用于控制内核是否支持32位应用程序在64位系统上运行。
当这个选项被启用时(通常在内核配置文件中设置为y或m),内核将包含必要的代码和机制来支持32位应用程序的兼容执行。

HSTR_EL2

第8行,根据芯片手册, HSTR_EL2 的描述如下:
HSTR_EL2, Hypervisor System Trap Register
Controls trapping to EL2 of EL1 or lower AArch32 accesses to the System register in the coproc == 0b1111 encoding space,
by the CRn value used to access the register using MCR or MRC instruction.
When the register is accessible using an MCRR or MRRC instruction,
this is the CRm value used to access the register.

含义如下:
HSTR_EL2 是ARM架构中的一个寄存器,全称是 Hypervisor System Trap Register EL2,属于异常级别2(EL2)的寄存器。
这个寄存器主要用于虚拟化环境中,特别是在hypervisor(宿主操作系统)层面,用于控制和管理虚拟机(guest OS)的异常和中断处理。

在ARM架构的虚拟化环境中,EL2是hypervisor运行的异常级别,而虚拟机操作系统(guest OS)则在更低的异常级别EL1运行。
HSTR_EL2 寄存器的作用是让hypervisor能够配置和控制哪些异常和中断应该被转交给虚拟机操作系统处理,哪些应该被hypervisor自己截获并处理。

在32位兼容模式下,希望访问CP15不会陷入到EL2,所以就将HSTR_EL2清零。

参考

参考1

arch/arm64/kernel/head.S文件——el2_setup函数分析

arch/arm64/kernel/head.S文件——el2_setup函数分析_mdcr-el2-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值