2016-02-02 19 views
0

我想了解如何使用U启动PSCI接口启动内核进入HYP模式。如何使用PSCI接口在Hyp/EL2模式下启动内核?

通过u-boot源代码,我看到有一个通用的psci.S和其他psci.S这是板特定的,并有以下怀疑。

1)。 psci.S如何适用于正常的u-boot流程(在引导u-boot时调用cci_on和cpu_off时,何时以及如何使用psci服务)。

2)。如何使用u-boot的psci接口在HYP模式下启动内核(psci接口中的什么功能可以让Linux内核在HYP模式下启动)?

+0

没有答案,因为这个问题是无效的。 U-boot也伪装成固件,是PSCI的实现。这类似于询问“内核的系统调用接口如何在EL0启动init进程?”。就电源状态协调而言,负责以任何启动方式启动Linux的事情最初都是**向系统供电** - 内核本身在启动PSCI调用时已经启动很久。 – Notlikethat

+0

感谢您的回复。其实我已经通过HYP模式这个补丁集http://lists.denx.de/pipermail/u-boot/2013-December/168655.html它说,它(在u-boot的PSCI接口)帮助引导内核了。希望你现在看到我的观点? –

回答

2

1)。如何以及在哪里psci.S在正常的u-boot适合流动

的U-boot留出一些安全的世界的记忆并复制安全监控代码存在,所以它可以驻留的U-Boot退出后,提供一些PSCI SMC调用的最小处理。

他们不是(何时以及如何PSCI像cpu_on和cpu_off服务,同时启动的u-boot被调用)。 U-Boot只运行并切换到主CPU上的Linux。 Linux可能会在其自己的引导过程中引入辅助核心,但除了前面提到的安全监视器代码之外,U-Boot早已消失。

2)。如何使用u-boot的psci界面在HYP模式下启动内核

不是这样。

(它在psci接口中允许Linux内核在HYP模式下启动)?

什么都没有。


你指的是贴片系列背后的一点是,它是(不幸的是现在仍然是)非常普遍的32位ARM平台具有的TrustZone感知的硬件设计,但垃圾软件支持。供应商BSP只实现了足够的引导加载程序来启动它,并且从不从引导切换到安全的SVC模式,因此整个Linux运行在安全的世界中,并且它们的内核充满了高度平台特定的代码,像电源控制器直接硬件。如果你想使用虚拟化技术,这会带来一个问题(如果你是KVM/ARM的共同维护者,并且最近给自己买了一台CubieTruck,显然是一个紧迫的问题......) - 很容易就能把U-启动代码,然后在启动Linux之前将它切换到NS-HYP,从而启用KVM(上游U-boot在此时已经有一些基本的支持),但是一旦你退出了安全的世界,之后不能再使用原来的smp_operations来启动辅助CPU,这些接口依赖于只接触安全硬件。

通过实施挂载引导加载程序背后的一些简单的运行时“固件”,您可以根据需要以最简单的方式回拨到安全的世界,并且最有意义的是移动必需的特定于平台的代码有抽象出一个简单的固件调用接口后面的操作,尤其是如果已经有Linux支持一个合适的。

但绝对没有什么特别的PSCI本身 - 有大量的具有适当的安全固件与它们实现电源管理和SMP操作的ARM平台,而是通过自己的专有协议。只有依稀的相关方面是符合PSCI规范保证了所有CPU都将拿出相同模式,因此,如果你没有在最初进入HYP的Linux,你不会看到不匹配的次级即将在其他一些不兼容模式或安全状态。

+0

感谢您的详细解答。它确实有帮助。我没有几个后续查询1)。 “那么你有最简单的方式根据需要回拨到安全的世界中”,“固件”是指“PSCI”?我知道它已经使用“smc,0#”完成了,但我们为什么要这样做,PSCI服务仅在EL3中运行(我怀疑它)? 2)。有了这个补丁系列,主CPU会通过PSCI服务发生吗? –

+0

PSCI是[只是一个_protocol_](http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/index.html),该固件代码可以实现。在这种情况下,“固件”也可以包含管理程序(通常通过捕获客户操作系统的smc,但规范中规定通过'hvc'进行PSCI调用,其中EL3未实现)。正如我之前所说的那样,主CPU启动发生在**打开系统** - 您如何确切地认为CPU可以运行代码来安装某些异常向量,发出软件调用并运行进一步的代码以自动启动? – Notlikethat

相关问题