Linux kernel 如何使用PSCI接口在Hyp/EL2模式下引导内核?

Linux kernel 如何使用PSCI接口在Hyp/EL2模式下引导内核?,linux-kernel,virtualization,u-boot,armv7,arm64,Linux Kernel,Virtualization,U Boot,Armv7,Arm64,我试图理解如何使用U-boot PSCI接口将内核引导到HYP模式 通过u-boot源代码,我确实看到有一个通用的psci.S和其他psci.S,它是特定于板的,并且有以下疑问 1) 。psci.S在正常u-boot流中的位置和方式(在启动u-boot时,何时以及如何调用psci服务,如cpu_on和cpu_off) 2) 。u-boot的这个psci接口是如何用于在HYP模式下引导内核的(psci接口中有什么允许Linux内核在HYP模式下引导) 1) 。psci.S在正常u-boot流程中的

我试图理解如何使用U-boot PSCI接口将内核引导到HYP模式

通过u-boot源代码,我确实看到有一个通用的psci.S和其他psci.S,它是特定于板的,并且有以下疑问

1) 。psci.S在正常u-boot流中的位置和方式(在启动u-boot时,何时以及如何调用psci服务,如cpu_on和cpu_off)

2) 。u-boot的这个psci接口是如何用于在HYP模式下引导内核的(psci接口中有什么允许Linux内核在HYP模式下引导)

1) 。psci.S在正常u-boot流程中的安装方式和位置

U-boot留出一些安全世界内存,并在其中复制安全监视代码,以便在U-boot退出后保持驻留状态,并提供对一些PSCI
SMC
调用的最小处理

(在启动u-boot时,何时以及如何调用psci服务,如cpu_on和cpu_off)

他们不是。U-Boot仅在主CPU上运行并移交给Linux。Linux可能会在其自己的引导过程中稍后启动辅助内核,但U-boot早已过时,除了前面提到的安全监控代码

2) 。如何使用u-boot的psci接口在HYP模式下引导内核

事实并非如此

(psci接口中允许Linux内核以HYP模式启动的是什么)

没什么


您提到的补丁系列背后的要点是,对于32位ARM平台来说,具有TrustZone感知的硬件设计但却支持蹩脚的软件,这一点太普遍了(不幸的是,现在仍然如此)。供应商BSP实现了足够的引导加载程序来启动,并且从未从引导中切换出安全SVC模式,因此整个Linux都在安全的世界中运行,它们的内核充满了高度平台特定的代码,直接插入仅安全的硬件,如power controller。如果您想使用虚拟化(如果您是KVM/ARM的共同维护者,并且最近为自己购买了一台CubieTruck,这显然是一个紧迫的问题……),那么这就带来了一个问题——在启动Linux之前,很容易为这样一个平台编写U-boot代码并将其切换到NS-HYP,从而启用KVM(upstream U-boot当时已经对此提供了一些基本的支持),但是一旦你退出了安全世界,你就不能再使用原始的
smp\U操作启动你的辅助CPU了,这些操作依赖于只接触安全硬件

通过实现一些简单的运行时“固件”挂在引导加载程序的后面,您就有了根据需要调用回安全世界的最简单方法,将必要的特定于平台的代码移到那里以将操作抽象到一个简单的固件调用接口后面是最有意义的,特别是如果Linux已经支持一个合适的固件调用接口的话

PSCI本身绝对没有什么特别之处——有很多ARM平台都有适当的安全固件,通过它们自己的专有协议来实现电源管理和SMP操作。唯一模糊相关的方面是,符合PSCI规范可以保证所有CPU在在相同的模式下,因此,如果您最初在HYP中进入Linux,您将不会看到在其他不兼容模式或安全状态下出现不匹配的二级

1) 。psci.S在正常u-boot流程中的安装方式和位置

U-boot留出一些安全世界内存,并在其中复制安全监视代码,以便在U-boot退出后保持驻留状态,并提供对一些PSCI
SMC
调用的最小处理

(在启动u-boot时,何时以及如何调用psci服务,如cpu_on和cpu_off)

他们不是。U-Boot仅在主CPU上运行并移交给Linux。Linux可能会在其自己的引导过程中稍后启动辅助内核,但U-boot早已过时,除了前面提到的安全监控代码

2) 。如何使用u-boot的psci接口在HYP模式下引导内核

事实并非如此

(psci接口中允许Linux内核以HYP模式启动的是什么)

没什么


您提到的补丁系列背后的要点是,对于32位ARM平台来说,具有TrustZone感知的硬件设计但却支持蹩脚的软件,这一点太普遍了(不幸的是,现在仍然如此)。供应商BSP实现了足够的引导加载程序来启动,并且从未从引导中切换出安全SVC模式,因此整个Linux都在安全的世界中运行,它们的内核充满了高度平台特定的代码,直接插入仅安全的硬件,如power controller。如果您想使用虚拟化(如果您是KVM/ARM的共同维护者,并且最近为自己购买了一台CubieTruck,这显然是一个紧迫的问题……),那么这就带来了一个问题——在启动Linux之前,很容易为这样一个平台编写U-boot代码并将其切换到NS-HYP,从而启用KVM(upstream U-boot当时已经对此提供了一些基本的支持),但是一旦你退出了安全世界,你就不能再使用原始的
smp\U操作启动你的辅助CPU了,这些操作依赖于只接触安全硬件

通过实现一些简单的运行时“固件”挂在引导加载程序的后面,您就有了根据需要调用回安全世界的最简单方法,将必要的特定于平台的代码移到那里以将操作抽象到一个简单的固件调用接口后面是最有意义的,特别是如果Linux已经支持一个合适的固件调用接口的话

PSCI本身绝对没有什么特别之处——有很多ARM平台都有适当的安全固件,通过它们自己的专有协议实现电源管理和SMP操作。唯一模糊相关的方面是符合PSCI规范可以保证所有CPU都是g