我正在尝试在启用 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 的新手。请帮我。