【发布时间】:2014-09-02 07:48:22
【问题描述】:
我正在尝试在支持 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 的新手。请帮帮我。
【问题讨论】:
-
内核是为“真实”硬件而不是硬件 TrustZone(甚至不太可能存在驱动程序)编译的。
-
感谢您的回复。但是我已经看到了几个可以做很多事情的 trustzone 实现,比如 UI 显示和触摸屏。你可以看到 Genode 的实现。 DocumentationVideo
-
您的问题似乎有点不清楚。查看标签trust-zone 中的所有问题,尤其是问题How to develop programs for arm trust zone。您不需要安全的操作系统来拥有安全的trustlet;只需安全启动、带启动锁的分区检查器和带安全 API 的监控表。
-
是的,安全启动可以解决一些问题。但是在安全的世界中做的事情越多,它就越安全。例如,UI 输入可能会被其他应用程序拦截。如果 UI 在安全环境中运行,可能会调用 trustui,那么它们就无法被拦截。此时在非安全世界中无法访问整个屏幕物理外围设备。
标签: linux-kernel arm interrupt trust-zone