This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Secure write与Secure寄存器的关系

在ARMv7中,对于Security Extension我有个疑惑,以下均是我自己的理解,如果有误还望指出:

一些通过Coprosessor访问的寄存器有些是Banked,也就是说从Secure world和Non-secure world访问这些寄存器时实际上访问到的是两个不同的寄存器。然而还有一些寄存器有类似于"In a system that uses security, this register is writable only by Secure write"这样的限制。Monitor Mode一定是Secure Mode,但是为了在Monitor中访问那些banked的寄存器,SCR.NS需要根据需要来调整。我的疑惑在于,SCR.NS=1时既然可以访问到那些banked寄存器中non-secure的版本,那么这个时候如果写寄存器还算是Secure write吗?对于那些没有banked的寄存器却有secure write限制的,在Monitor中写这样的寄存器需要把SCR.NS设置成0吗?

谢谢!

顺便问下..."a register is banked for secure world" 其中的bank有比较惯用的翻译方法吗?多谢!

Parents
  • 在Monitor mode下通过CP15 接口访问banked secure/non-secure寄存器,确实是通过SCR.NS进行选择。

    然而通过memory map访问的banked secure/non-secure寄存器,是根据总线上AxPROT.NS信号来确定该次访问是否是secure的。(我搜了一下ARM ARMv7, 有描述"In a system that uses security, this register is writable only by Secure write" 的寄存器都是Generic Timer的寄存器,都是memory map 访问的。)

    AxPROT.NS信号是由CPU当前状态和相应的MMU page中的NS位共同确定的:

    当CPU处在non-secure状态下,所有总线访问都是non-secure的;

    当CPU处在secure状态下(包含monitor模式,无论SCR.NS=1还是=0),根据MMU page中的NS位确定总线访问的secure属性。

    所以你需要先确定访问寄存器的方式,然后根据CPU状态来确定对寄存器的写操作是否是secure的。

    建议直接使用banked,一般人都看到的懂,没有特别好的中文翻译。

Reply
  • 在Monitor mode下通过CP15 接口访问banked secure/non-secure寄存器,确实是通过SCR.NS进行选择。

    然而通过memory map访问的banked secure/non-secure寄存器,是根据总线上AxPROT.NS信号来确定该次访问是否是secure的。(我搜了一下ARM ARMv7, 有描述"In a system that uses security, this register is writable only by Secure write" 的寄存器都是Generic Timer的寄存器,都是memory map 访问的。)

    AxPROT.NS信号是由CPU当前状态和相应的MMU page中的NS位共同确定的:

    当CPU处在non-secure状态下,所有总线访问都是non-secure的;

    当CPU处在secure状态下(包含monitor模式,无论SCR.NS=1还是=0),根据MMU page中的NS位确定总线访问的secure属性。

    所以你需要先确定访问寄存器的方式,然后根据CPU状态来确定对寄存器的写操作是否是secure的。

    建议直接使用banked,一般人都看到的懂,没有特别好的中文翻译。

Children