2014-04-26 45 views
1

按照CortexA編指南安全模式可以訪問安全/非安全內存如何?

TrustZone硬件還有效地提供了兩個虛擬MMU,每個虛擬處理器一個。這使得每個世界都可以擁有一套本地翻譯表,並且將安全世界映射隱藏起來,並保護它們免受正常世界的影響。

頁表說明包括NS位,它被用來確定訪問是否到安全或非安全的物理地址空間中進行。

雖然頁表條目的位仍然存在,正常虛擬處理器硬件不使用此字段,和存儲器訪問總是與NS = 1安全虛擬處理器作出的,因此可以訪問安全或普通存儲器。高速緩存和TLB硬件允許普通和安全條目共存。

所以,如果一個代碼(在安全模式下運行)將被寫入訪問說地址0xA0000000開始[NS]和0xA0000000開始[S]會是怎樣編碼?

回答

1

最簡單的方法是在安全MMU轉換表中設置兩個映射,這兩個映射都使用物理地址0xA0000000,其中一個NS位置1,另一個副本位於NS位清零的不同虛擬地址。然後安全狀態可以使用這兩個虛擬地址來進行不同的訪問。

你也可以只使用一個映射和改變NS位,但是這需要在每次更改後沖洗TLB。

2

所以如果一個代碼(以安全模式運行)被寫入訪問說地址0xA0000000 [NS]和0xA0000000 [S]它將如何編碼?

很可能你有一個概念問題在這裏。沒有物理地址0xA0000000 [NS]0xA0000000 [S],只有物理地址0xA0000000。總線控制器使用NS位,如HPROT(用戶/主管)訪問權限訪問;之後,只有一個物理內存地址存儲結果。通過這種方式,SDRAM設備不需要知道TrustZone,而只需要總線控制器。

您需要安裝the partition checker有一個世界共享映射。這是兩個世界的讀/寫訪問。然後信息作爲scott給出適用。如果兩個操作系統都有一個MMU,則創建兩個具有相同物理地址的映射。內存和MMU條目的兩個副本可能存在於L1緩存和TLB中。重複的TLB沒有問題。在寫入此內存之後,L1可能需要刷新。將有兩條線都具有相同的數據,但有一條標籤爲NS,另一條不帶。

Hyperthreading for fun and profit可能是這方面的一個有趣的紙。

+0

* cache行*有一個** NS **標籤。通常,* secure world *訪問將填充沒有* NS標記*集的L1/L2緩存,因此當緩存刷新時,他們將使用*安全訪問*來訪問內存。我讀了MMU中安全的NS位;這裏沒有什麼能夠回答到底是什麼...... –