2014-03-26 60 views

回答

1

監視器模式設置NS=0會將CP15寄存器設置爲從監視器模式可見。請參閱:monitor mode IFAR/IFSR...。當監控模式切換到另一模式NS=0,那麼該模式是安全世界版本;這意味着分區CP15寄存器是安全版本。 總線週期也清除NS位。

如果NS=1被設置,則當監視模式開關,編組CP15寄存器是正常版本;主要是正常世界MMU將被激活。此外,NS位設置爲總線週期TZ vs hypervisor

如何安全OS被定?

監視模式執行此操作。所述SCR(CP15 C1,C1,0)具有確定監視器向量表是否使用位當前CPU世界(安全正常)。如果您處於正常的世界並且您希望定時器打斷該世界,您需要監視器模式來處理它。

您可以設置監控模式在兩種可能的方式,

  1. 讓所有安全中斷爲FIQ
  2. 捕獲所有要監視的中斷。

建議您首選。在這種模式下,顯示器的代碼必須確保SCR#FIQ(位2)設置在正常的世界中,但在安全世界中清除。在運行安全操作系統時(如果想讓正常的中斷來中斷安全操作系統),將會設置SCR#IRQ(位1),並在正常的世界中清除。

所以當安全定時器具有FIQ中斷,它捕捉到監控模式,它做了世界開關REF1和運行安全的OS計時器代碼。這安全計時器可能會導致安全的世界重新安排。世界日程安排程序互相交互的方式取決於軟件。也就是說,沒有通用的答案。這取決於,

  1. 監控模式
  2. 安全 OS。
  3. 正常世界操作系統。

主要ARM的TrustZone本身並不處理安全的OS調度。你需要編寫使用提供的原語來實現這個功能的軟件。 ARM TrustZone僅有助於實現它的不同方式。 TrustZone Whitepaper

參見:How to develop programs for TrustZone的一些替代設置。
Ref1:A 世界開關保存/恢復所有通用CPU寄存器使用模式。即,正常安全世界開關,R0-R15(和所有銀行拷貝)加上可能NEON/VFP必須保存到正常世界存儲。同樣,必須重新加載寄存器以用於安全世界。監視器模式sp爲訪問這些世界範圍提供了良好的錨點。監視模式sp應該在安全啓動期間在世界初始化之前被設置,在正常世界初始化之前。這很像傳統的OS上下文切換。 SCR#NS(位0)被適當設置;您可以在寄存器切換之前或之後執行此操作,具體取決於您如何保存寄存器(即按模式開關或按srs)。

+0

以上關於通過Monitor將模式從NonSecure世界切換到Secure World的說明適用於兩個世界都運行在同一個物理內核上的情況。這種理解是否正確?如果是多核環境,如果我們有一個TEE專用內核(假設安全操作系統是非SMP),另一個是非安全世界的核心,那麼解釋中解釋的工作原理是否會發生變化?我閱讀了ARM的白皮書 - 「使用TZ構建安全系統」(第5.4節)。在非安全操作系統(在TEE以外的核心運行)中進行SMC呼叫時會發生什麼情況? – Souvik

+0

當然可以。如果您的問題是如何在第二個核心上安排'安全操作系統',那麼這將毫無意義。這是你的問題嗎?在這種情況下,它與AMP(非對稱多處理)相同。不需要昂貴的TZ CPU,只需要支持TZ的CPU(Cortex-R等)。 –