在arm64 linux中,当linux要在EL2(EL3中的引导加载程序)中运行时,我是否必须在内核构建期间为此设置一些东西?

在arm64 linux中,当linux要在EL2(EL3中的引导加载程序)中运行时,我是否必须在内核构建期间为此设置一些东西?

https://stackoverflow.com/questions/39614772/how-to-know-the-linux-kernel-run-either-el2-non-secure-or-el3-secure-mode,我在最近的arm64 linux中看到,内核运行在EL2而不是EL1。最近我正在使用 u-boot-spl falcon 模式在测试板上进行 Linux 移植。同样,当CPU硬件从EL3启动时,linux似乎运行在EL2中(从arm64开始,请参见https://elixir.bootlin.com/u-boot/latest/source/arch/arm/lib/spl.c#L55https://elixir.bootlin.com/u-boot/latest/source/arch/arm/cpu/armv8/transition.S#L13)。我的问题是,为了使 linux 在 EL2 中运行,我是否应该在配置中设置任何内容,或者 linux 构建是否与它是否会在 EL1 或 EL2 中运行无关?

答案1

当我们使用 u-boot 作为引导加载程序时(我认为如果我们使用 UEFI 和 grub 或 Arm 参考设计来做到这一点,情况会是相同的)引导加载程序在 EL3 上运行,并在最终代码中设置 elr(要返回的地址)异常处理)到linux的入口地址。然后执行eret,使其跳转到elr中保存的linux地址,同时EL自动降低到EL2。在linux中,代码检查是否实现了FEAT_VHE(虚拟化硬件扩展),如果是,则保留在EL2中。当实现VHE时,许多对EL1寄存器的访问实际上是在访问EL2中的寄存器(这部分不是100%确定,我记得类似的事情)。所以对于构建linux,我们不需要设置任何东西。 (但我认为如果我们关闭 CONFIG_ARM64_VHE,它可能会在 EL1 中运行)。

相关内容