arm信任区监控模式开关设计
基本的世界切换流程是: 将FIQ设置为监控模式arm信任区监控模式开关设计,arm,trust-zone,Arm,Trust Zone,基本的世界切换流程是: 将FIQ设置为监控模式 正常世界->触发FIQ ->进入监控模式(切换到安全世界,恢复安全世界上下文) ->在安全世界系统模式下 ->FIQ不清楚,请在安全世界中输入FIQ处理程序 步骤3和步骤4,在我们恢复目标上下文之后, arm将触发异常以输入异常 这种行为正确吗?(如果我们不在监视器模式向量表中分支到FIQ句柄) 我们需要如下流程: (无世界上下文切换情况,只需进入监控模式检查是否需要世界切换,并直接从监控模式输入irq异常。由于我们的硬件限制,我们需要这个,我们
正常世界操作系统usr模式->irq->usr模式
正常世界操作系统usr模式->监视器到irq处理程序->usr模式 流量是否可能,井设计是否合理 流量是否可能,井设计是否合理 这是可能的。”“精心设计”是主观的。它有几个失败或不理想的问题。我猜你的系统没有;这是一个信任区感知中断控制器。GIC存储了寄存器,允许正常世界的操作系统(几乎)像在安全世界一样使用它 你的问题不清楚你是否希望安全的世界有中断?我从“对于非世界开关情况…”的陈述中猜测。如果只有正常世界处理的中断,事情就简单了。不要在IRQ(或FIQ)上切换到监控模式。有一个寄存器可以设置此行为() 对于双世界中断情况,您有两个问题
使用GIC,使用GICC_CTLR位
FIQEnb
将组0(安全世界)中断设置为FIQ,将组1(正常世界)设置为IRQ。也就是说,您将GIC中DIST的中断分类为安全或正常(因此FIQ/IRQ)
您必须解决计划问题,以及您希望不同操作系统如何抢占先机。通常(最简单的)是始终运行安全操作系统,但这意味着某些Linux(正常世界)中断可能会因安全世界(RTOS)主线代码而延迟。如果您引用了您正在使用的特定SOC(并提供了指向参考PDF的链接),可能会有所帮助?这是一种不受欢迎的SOC。在我们的开发环境中,GIC只有与arm核心的IRQ连接,没有FIQ。我们希望在每个世界运行两个操作系统。Linux在普通世界,rtos在安全世界。两个操作系统都有单独的中断,基本上我们希望它们单独运行。ARM有一个推荐的设计,IRQ为正常世界FIQ为正常世界切换为安全世界。但我们只有IRQ,所以我们需要寻找是否有任何好的解决方案来解决IRQ唯一的情况。我相信“组0”中断是FIQ,“组1”是IRQ。也就是说,您将GIC中DIST的中断分类为安全或正常(因此FIQ/IRQ)。文件不清楚“组0”和“组1”的含义(参见GICD_IGROUPR和GICC_CTLR w.bit
FIQEnb
)。您可能需要重新编写一些RTOS代码,尤其是独立的系统计时器。此外,Linux中的任何“pinctrl”都需要与RTO同步(出于安全和竞争原因)。非常感谢,我理解。我还将检查SoC中GIC状态的FIQ。术语“FIQn”是一条物理线。您的硬件可能没有此功能。明确地说,常规中断源可以路由到IRQ或FIQ。我记得,GICC_CTRL.FIQEnb将导致组0全部为FIQ,但对于GIC的某些版本可能会有所不同。这是一种不受欢迎的SOC。在我们的开发环境中,GIC只有与arm核心的IRQ连接,没有FIQ。我们希望在每个世界运行两个操作系统。Linux在普通世界,rtos在安全世界。两个操作系统都有单独的中断,基本上我们希望它们单独运行。ARM有一个推荐的设计,IRQ为正常世界FIQ为正常世界切换为安全世界。但我们只有IRQ,所以我们需要寻找任何IRQ