我在 QEMU 上成功运行了 OP-TEE,并想弄清楚调度程序是如何工作的。我修改了源代码以在进入 Secure World 之前和返回 Normal World 之后获取变量jiffies 。这是一段代码。
i=jiffies;
tee_smc_call(¶m);
j=jiffies
这里tee_smc_call是发出SMC调用的 asm 函数。如果定时器中断导致离开 SW,我发现j将大于i 。我认为这意味着定时器中断在某处处理。如果我的推论不正确,请纠正我。
我转到链接https://lists.linaro.org/pipermail/tee-dev/2015-August/000160.html和https://github.com/OP-TEE/optee_os/issues/332。OP-TEE 开发人员表示,一旦切换回 NW,定时器中断将由 NW 提供服务。
我阅读了 SW 的 IRQ 处理程序的源代码。我以为 SW 处理程序会找到 NW 的 VBAR 并将返回地址更改为 NW 处理程序。但是我发现没有这样的代码。
我在这个站点上阅读了一些帖子
TrustZone: Scheduling processes from the two worlds和
ARM TrustZone - Behavior of the scheduler in Secure and Non-Secure OS。后者与我的相似,但答案并未说明 OP-TEE 实现中发生了什么。
所以我想知道在返回 NW 后再次处理定时器中断的魔力是什么,因为它已经在 SW 中服务过一次。
我不熟悉 OP-TEE。这是我的第一个问题。如果不清楚或愚蠢,请原谅我。谢谢。