【问题标题】:How PSCI interface can be used to boot kernel in Hyp/EL2 mode?如何使用 PSCI 接口在 Hyp/EL2 模式下启动内核?
【发布时间】:2016-05-11 16:59:06
【问题描述】:

我正在尝试了解如何使用 U-boot PSCI 接口将内核引导到 HYP 模式。

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

1)。 psci.S 如何以及在何处适合正常的 u-boot 流程(在引导 u-boot 时何时以及如何调用 cpu_on 和 cpu_off 等 psci 服务)。s

2)。 u-boot的这个psci接口是如何在HYP模式下启动内核的(psci接口是什么让Linux内核以HYP模式启动)?

【问题讨论】:

  • 这个问题没有答案,因为问题无效。 U-boot,也伪装成固件,是 PSCI 实现。这类似于询问“内核的系统调用接口如何用于在 EL0 处启动 init 进程?”。在电源状态协调方面,负责以任何启动模式启动 Linux 是最初为系统供电 - 内核本身在进行 PSCI 调用时早已启动。
  • 感谢您的回复。实际上,我已经通过了这个补丁集lists.denx.de/pipermail/u-boot/2013-December/168655.html,上面写着它(u-boot 中的 PSCI 接口)帮助在 HYP 模式下启动内核。希望你现在明白我的意思了吗?

标签: linux-kernel virtualization u-boot armv7 arm64


【解决方案1】:

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

U-boot 留出一些安全世界内存并在其中复制用于保护监控代码的安全,以便在 U-Boot 退出后保持驻留并提供对某些 PSCI SMC 调用的最少处理。

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

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

【讨论】:

  • 感谢您的详细解答。它真的很有帮助。我很少有后续查询 1)。 “然后,您可以根据需要以最简单的方式回叫安全世界”,“固件”是指“PSCI”吗?我知道它是使用“smc ,0#”完成的,但我们为什么要这样做,PSCI 服务是否仅在 EL3 中运行(我对此表示怀疑)? 2)。有了这个补丁系列,主 CPU 的启动是通过 PSCI 服务发生的?
  • PSCI 是固件代码可以实现的just a protocol。在这种情况下,“固件”还可以包括管理程序(通常通过捕获来宾操作系统的smc,但规范中有规定通过hvc 进行 PSCI 调用,其中 EL3 未实现)。正如我之前所说,主要 CPU 启动是通过 打开系统 发生的 - 你认为 CPU 究竟如何运行代码来安装一些异常向量、发出软件调用并运行进一步的代码来为 本身向上?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2013-01-16
相关资源
最近更新 更多