3

我正在尝试在启用 TrustZone 的开发板(Samsung exynos 4412)上运行 Linux 内核作为安全操作系统。尽管有人会说安全操作系统应该小而简单。但我只是想试试。如果可能的话,那么编写或移植一个 trustlet 应用程序到这个安全的操作系统将很容易,特别是对于具有 UI(可信 UI)的应用程序。

我购买了基于Xv6的可运行安全操作系统的开发板,正常操作系统是Android(android版本4.2.2,内核版本3.0.15)。我试过用android Linux内核替换简单的安全操作系统,也就是前面加一点汇编代码,比如清除SCR寄存器的NS位,直接调用Linux内核入口(传入必要的内核标记列表) .

内核未压缩代码正确执行,内核的第一个 C 函数 start_kernel() 也被执行。除了运行到 calibrate_delay() 之外,几乎所有的初始化函数都运行良好。此函数将等待 jiffies 更改:

/* wait for "start of" clock tick */
ticks = jiffies;
while (ticks == jiffies);

我猜原因是没有产生时钟中断(我在时钟中断回调函数中打印日志,它们从未进入)。我在 local_irq_enable() 函数之前和之后检查了 CPSR 状态。IRQ 和 FIQ 位设置正确。我还在中断向量表中定义的 Linux 内核的 IRQ 处理程序中打印了一些日志。没有任何记录。

我知道安全世界和非安全世界之间的中断系统可能存在一些差异。但是我在任何文档中都找不到差异。有人可以指出他们吗?而最重要的问题是,由于 Linux 是一个非常复杂的操作系统,Linux 内核能否作为 TrustZone 安全操作系统运行?

我是 Linux 内核和 ARM TrustZone 的新手。请帮我。

4

3 回答 3

2

默认情况下,将Linux 作为安全世界操作系统运行应该是标准配置。即,安全世界监督者是最受信任的并且可以轻松地转换到其他模式。安全世界是 ARM CPU 的一个操作概念。

注意:仅仅因为 Linux 在安全的世界中运行,并不能使您的系统安全!TrustZone 和安全世界是您可以用来构建安全系统的功能。

但我只是想试试。如果可能的话,那么编写或移植一个 trustlet 应用程序到这个安全的操作系统将很容易,特别是对于具有 UI(可信 UI)的应用程序。

TrustZone 允许对软件进行分区。如果在同一层同时运行 Linux 和trustlet应用程序,则没有任何用处。trustlet只是一个普通的应用程序。

trustlets的正常模式是在启动时设置监控向量页面并锁定物理访问。然后,Linux 内核可以使用该smc指令调用trustlet中的例程,以访问 DRM 类型的功能以解密媒体等。在这种模式下,Linux 作为普通世界操作系统运行,但可以通过SMC您定义的 API。

几乎所有的初始化函数都运行良好,除了运行到calibrate_delay().

这是无功能中断的症状。 calibrate_delay()在等待通过系统定时器中断增加滴答计数时运行一个紧密的循环。如果您在安全的世界中运行,您可能需要路由中断。该寄存器GICD_ISPENDR可用于强制中断。您可以使用它来验证 ARM GIC 是否正常运行。此外,内核命令行选项lpj=XXXXX(其中 XXXX 是某个数字)可以跳过此步骤。

很可能某些外围中断路由器、时钟配置或其他中断/定时器初始化是由正常系统中的引导加载程序完成的,而您错过了这一点。启动新电路板总是很困难;TrustZone 更是如此。

于 2014-09-02T16:03:38.007 回答
1

你所说的有几个问题需要澄清。首先,您是要运行安全世界内核还是普通世界内核?您说您想在 SW 中运行 Linux 并在 NW 中运行 Android,但您的问题是:“我试图用 android Linux 内核替换简单的安全操作系统”。那么您遇到的问题是哪个内核?

其次,您提到清除 NS 位。这真的没有意义。如果设置了 NS 位,需要清除它意味着您已经在 NW 中运行(正如设置的位所指示的那样),您已经执行了 SMC 指令,切换到监控模式,将 NS 位设置为 0,然后恢复 SW 寄存器。是这样吗?

就中断而言,您是否为每种执行模式正确初始化了 VBAR,即安全世界 VBAR、普通世界 VBAR 和 MVBAR。这三个都需要设置,除了在 NSACR 和其他中设置正确的值以确保中断被引导到正确的执行世界,而不仅仅是由 SW 处理。此外,对于所有三种模式,您确实需要单独的异常向量表和处理程序。最初您可能只使用一组,但一旦使用 TZASC 对内存系统进行分区,您将需要将所有内容分开。

TZ 需要大量配置,而不是简单地通过设置/取消设置 NS 位来处理。对于 Exynos 4412,必须正确设置大量 TZ 控制寄存器才能在 NW 中执行。不幸的是,公共版本的用户指南中没有包含关于它们的任何信息。您需要完整版本才能获得在此处理器上实际运行 SW 和 NW 内核所需的所有值和地址。

于 2015-04-01T23:56:45.070 回答
1

技术上没有什么可以阻止 Linux 在 ARM 处理器的安全状态下运行。但这违背了 TrustZone 的全部目的。大型、复杂的内核和操作系统(如 Linux)无法正式验证到可以认为是“安全”的程度。

有关这方面的进一步阅读,请参阅http://www.ok-labs.com/whitepapers/sample/sel4-formal-verification-of-an-os-kernel

至于您面临的具体问题 - 安全与非安全状态下的中断处理应该没有什么特别之处(除非您明确将其配置为不同)。但可能是您删除的安全操作系统正在执行一些现在没有发生的初始计时器初始化。

3.0.15 也是一个绝对古老的内核——它是在 2.5 年前发布的,基于 3 年前发布的内容。

于 2014-09-02T15:17:24.167 回答