【问题标题】:Trustzone: CPU0 non-secure and CPU1 Secure inTrustzone:CPU0 non-secure 和 CPU1 Secure in
【发布时间】:2019-09-02 12:43:29
【问题描述】:

我正在使用带有 A9 处理器(双核)的 zynq-7000(zed 板)。我正在尝试使用 Trustzone。

我想将 cpu1 配置为仅在安全世界中运行,并将 cpu0 配置为运行普通世界应用程序 (petalinux)。我阅读了 ug1019 和其他一些文档,但我不知道如何实现这一点。我找到了这个,

MRC p15,0,<Rt>,c1,c1,0 ; Read SCR into Rt

MCR p15,0,<Rt>,c1,c1,0 ; Write Rt to SCR

我可以在哪里配置 NS 位,但我不确定它是否会工作,它会将哪个 cpu 置于安全/非安全状态。如果有人可以指导我举一些例子或想法。

【问题讨论】:

    标签: linux arm xilinx zynq trust-zone


    【解决方案1】:

    我想将 cpu1 配置为仅在安全世界中运行,并将 cpu0 配置为运行普通世界应用程序 (petalinux)。

    CPU0 是典型的启动 CPU,需要在启动时启动 CPU1。通常无需执行任何操作即可以安全模式启动。所以我认为需要在 CPU0 启动期间的步骤是,

    • 安全/正常世界之间的分区内存。
    • 创建监视器向量/代码来处理普通世界请求。
    • 以安全模式启动 CPU1。
    • 在普通世界中启动 petalinux

    您需要阻止正常世界访问安全世界中的内存(或者这没有什么意义)。这可以包括安全世界所需的设备。

    Linux 需要更新一些只能通过安全世界访问的寄存器。例如cache-l2x0 需要编写一些仅安全的寄存器。您最终需要使用SMC 指令来更改 CP0 上的世界,以获得更改这些寄存器的权限,然后在正常世界中返回 Linux。如果您希望在 CPU0 和 CPU1 Linux 之间进行通信,SMC 也很有用。

    您可能必须打开早期引导调试才能找到 Linux 可能需要安全访问的所有问题。部分原因可能是 Zync 系统上的驱动程序和安全/正常世界问题。其他问题是存储的普通世界 CP15 寄存器在启动时通常是垃圾,而安全存储的寄存器具有已知值。

    您还需要使用您在分区内存步骤中所做的任何更改来更改设备树。例如,您可能希望定时器等在 CPU1 上有一个 RTOS。 Linux 显然不能使用这些。

    boot petalinux in normal world需要像uboot would provide一样。


    【讨论】:

    • 非常感谢您的详细回答。我会仔细看看的。巴西,KA
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2012-12-12
    相关资源
    最近更新 更多