快速链接:
.
👉👉👉 [专题目录]–optee精选系列 👈👈👈
思考:在哪里配置安全中断的? 在哪里配置中断的G0、G1NS、G1S分组的?
1、optee
在optee中有一段默认的配置,将0-7配置成G1NS,8-15配置成G1S,16-31配置成G1NS,32之后的也全部都是G1NS
但是这段配置不一定会被调用,gic_init()
由平台的main_init_gic()
函数调用,在大多数的场景下,gic_init()
是不会被调用的。
如下也只是列举了plat-rockchip
平台对gic_init()
的调用。
不过呢,在optee中新增一个中断时,会将该中断号配置成G1S
2、ATF
ATF软件中定义了三种类型的中断
- INTR_TYPE_S_EL1 //给secure EL1使用的中断,会设置成G1S
- INTR_TYPE_EL3 //给EL3使用的中断,会设置成G0
- INTR_TYPE_NS //给non-secure EL1使用的中断,会设置成G1NS
ATF中提供了一个API,可以设置中断的类型
plat_ic_set_interrupt_type(map->intr, INTR_TYPE_EL3);
(trusted-firmware-a/plat/common/plat_gicv3.c)
void plat_ic_set_interrupt_type(unsigned int id, unsigned int type)
{
gicv3_set_interrupt_type(id, plat_my_core_pos(), type);
}
gicv3_set_interrupt_type()
的原型如下所示: