• 資料介紹
    • 引言
    • CM33 內(nèi)核的安全擴展
    • 內(nèi)核的 SAU 與 IDAU
    • 資源的安全屬性及其配置
    • CPU 訪問資源的安全規(guī)則
    • TrustZone Memory 安全配置常見問題及分析方法
    • 小結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32 TrustZone 開發(fā)調(diào)試技巧(1)—— 地址安全區(qū)及資源安全屬性配置

03/24 14:20
548
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

STM32 TrustZone 開發(fā)調(diào)試技巧(1)—— 地址安全區(qū)及資源安全屬性配置

2.33 MB

引言

STM32 MCU 中較新的產(chǎn)品系列例如 STM32L5、STM32U5 采用了 ARM Cortex V8M 的CM33 內(nèi)核,并引入了 TrustZone 概念。在此基礎(chǔ)上,從內(nèi)核到存儲器再到外設(shè)等設(shè)計了完整的支持 TrustZone 架構(gòu)的系統(tǒng)隔離機制。

在新的 TrustZone 架構(gòu)下,軟件的開發(fā)由原來的單一工程,變成了 Secure 安全和NonSecure 非安全兩個工程的聯(lián)合開發(fā),系統(tǒng)上電首先從 Secure 工程開始運行,完成必要初始化之后跳轉(zhuǎn)至 NonSecure 工程運行,之后 NonSecure 工程還可以通過調(diào)用 Secure 工程經(jīng)由 NSC(Secure NonSecure Callable)區(qū)提供的 API 調(diào)用 Secure 工程的函數(shù)。由于此時系統(tǒng)的所有資源,包括 Memory、外設(shè)等等都區(qū)分了安全和非安全屬性,而CPU 也區(qū)分安全和非安全運行狀態(tài),其對應(yīng)的安全或非安全代碼及其使用的數(shù)據(jù)都需要有相應(yīng)的存儲空間存放,且該存儲空間需要具有相同的安全或者非安全屬性,否則代碼無法正常運行。因此,在 TrustZone 架構(gòu)下首先需要針對不同物理區(qū)間做地址安排及相應(yīng)安全屬性的正確配置。對于 V8M 內(nèi)核來說,這涉及到 SAU/IDAU 的配置,且取指令與取數(shù)據(jù)可能有不同的訪問規(guī)則,同時指令以及數(shù)據(jù)是否能夠從 memory 中正確取得,除了和 SAU/IDAU 的配置有關(guān)以外,還與 Memory 自身的安全屬性配置有關(guān)。

本文將對 SAU/IDAU 配置,Memory 的自身安全屬性配置,以及內(nèi)核訪問指令與數(shù)據(jù)時的安全訪問規(guī)則加以闡述,希望可以幫助相關(guān)開發(fā)者更好地理解 V8M TrustZone 的架構(gòu)以及在 STM32 中的實現(xiàn),同時,還會列舉一些與 memory 的 TrustZone 安全配置相關(guān)的常見問題及分析方法,給開發(fā)者做參考。

CM33 內(nèi)核的安全擴展

CM33 內(nèi)核使用 AHB5 總線,具有可選安全擴展(Security Extension)功能。使能安全擴展的內(nèi)核則支持 V8M TrustZone 架構(gòu),此時 AHB5 總線上將攜帶安全訪問標(biāo)記信號(HNONSEC),這個標(biāo)記將指示當(dāng)前訪問的 Transaction 是安全訪問還是非安全訪問,總線上的從設(shè)備需要識別這個標(biāo)記信號,根據(jù) Transaction 攜帶的安全、非安全權(quán)限信息,決定是

否允許最終的物理訪問。

內(nèi)核的安全擴展除了總線攜帶的安全標(biāo)記信號以外,還包括 CPU 本身的安全/非安全運行狀態(tài),有對應(yīng)安全/非安全狀態(tài)的 CPU 寄存器(例如各自的 stack pointer MSP 和PSP),中斷等等。

內(nèi)核的 SAU 與 IDAU

SAU 是 CM33 內(nèi)核的單元,負責(zé)內(nèi)核對地址的安全訪問控制。IDAU 同樣作為內(nèi)核安全訪問控制的一部分,與 SAU 共同作用,只不過 IDAU 是芯片廠商實現(xiàn)的獨立接口,其行為由芯片廠商的設(shè)計決定。

資源的安全屬性及其配置

片上 Flash

Flash 控制器屬于 TZ aware 外設(shè),直接支持 AHB5 總線,能夠識別總線上面攜帶的HNONSEC 信號(標(biāo)記是否為 Secure 訪問),F(xiàn)lash 控制器自身有相關(guān)寄存器用于配置Flash 區(qū)域的 S 安全與 NS 非安全屬性。具有 S 安全訪問屬性的 Flash 區(qū)域只能接受安全訪問(即 Transaction 的 HNONSEC=0),具有 NS 非安全訪問屬性的 Flash 區(qū)域只能接受非安全訪問(即 Transaction 的 HNONSEC=1)。這里注意不要將安全/非安全訪問與 CPU 的安全/非安全狀態(tài)混為一談。這二者未必是一致的,后面講 CPU 運行狀態(tài)與訪問規(guī)則的時候會進行解釋。

CPU 訪問資源的安全規(guī)則

CPU 對資源訪問的一般規(guī)則

CPU 的運行分為安全和非安全兩種狀態(tài),CPU 處于哪種狀態(tài)取決于當(dāng)前 PC 的指令來自于安全地址還是非安全地址。簡單地說,如果 CPU 執(zhí)行的指令來自安全地址(以 SAU/IDAU 角度看),則 CPU 正在執(zhí)行安全代碼,處于安全狀態(tài);當(dāng) CPU 執(zhí)行的指令來自于非安全地址(同樣從 SAU/IDAU 角度看),則 CPU 正在執(zhí)行非安全代碼,處于非安全狀態(tài)。

TrustZone Memory 安全配置常見問題及分析方法

小結(jié)

本文簡單介紹了 ARM CM33 內(nèi)核 TrustZone 架構(gòu)下內(nèi)核中 SAU/IDAU 如何區(qū)分安全非安全地址,存儲器以及外設(shè)資源如何設(shè)置自身的安全訪問屬性,以及 CPU 訪問不同資源時的訪問規(guī)則等內(nèi)容。最后列舉了一些使用 STM32 進行 V8M TZ 開發(fā)中常見的 memory 配置相關(guān)的問題以及調(diào)試方法,希望對廣大開發(fā)者有所幫助。

在后續(xù)的篇章中,我們還將總結(jié)一些其他的 TrustZone 開發(fā)中的常見問題及調(diào)試技巧,歡迎讀者繼續(xù)關(guān)注。

資料預(yù)覽

相關(guān)推薦