引言
在 STM32 TrustZone 開發(fā)調(diào)試技巧的前兩篇中,我們介紹了內(nèi)核的 SAU/IDAU,地址的安全屬性配置,資源的安全屬性配置,內(nèi)核訪問資源的安全規(guī)則,以及 TrustZone 環(huán)境下外設(shè)使用的常見問題等內(nèi)容。TrustZone 環(huán)境開發(fā)中還可能經(jīng)常遇到的一個(gè)問題就是軟件觸發(fā)的故障錯(cuò)誤。ARM CM33 內(nèi)核 TrustZone 環(huán)境下的異常模型以及 Fault 的處理與不帶安全擴(kuò)展的情況有著很多變化,一旦出現(xiàn) HardFault,經(jīng)驗(yàn)不足的開發(fā)者可能往會(huì)找不到頭緒,不知道從哪里著手尋找問題所在。因此,在這一篇的重點(diǎn)將圍繞 CM33 TrustZone 環(huán)境下的異常模型以及HardFault 的調(diào)試與處理展開,供開發(fā)者參考。
CM33 TrustZone 架構(gòu)下的異常模型
在 STM32 TrustZone 開發(fā)調(diào)試技巧的第二篇中我們介紹過 CM33 帶安全擴(kuò)展的 S 和 NS 側(cè)的中斷以及中斷向量表,這里不再贅述。
Fault 處理
Fault 出錯(cuò)信息
軟件的故障處理程序?qū)?Fault 進(jìn)行處理時(shí),可以通過讀取 Fault 相關(guān)寄存器獲取 Fault 觸發(fā)原因的一些相關(guān)信息,得知錯(cuò)誤觸發(fā)的具體異常類型。例如 SCB(System Control Block)單元中的 HSFR、CFSR 寄存器,以及 Security Attribution Unit(SAU)單元的 SFSR 寄存器等。CFSR 包含多個(gè)位域,分別對(duì)應(yīng) MemManageFault(MFSR)、BusFault(BFSR)和UsageFault(UFSR)。
Fault 異常的調(diào)試
代碼的 FaultHandler 處理起到的作用通常是運(yùn)行期間第一時(shí)間提示故障信息以及記錄故障日志等,最終采取的措施可能要么是系統(tǒng)復(fù)位,要么是進(jìn)入死循環(huán)。但是在開發(fā)階段如果出現(xiàn)Fault 異常,更有效的方法可能是需要通過在線調(diào)試手段找到故障原因,改正代碼中的錯(cuò)誤。因此本小節(jié)我們將討論 Fault 異常的調(diào)試方法。
小結(jié)
掌握一些 TZ 環(huán)境分析 Fault 的技巧,在開發(fā)中遇到軟件觸發(fā) Fault 故障時(shí)保持沉著冷靜,按照一定的方法認(rèn)真地進(jìn)行分析,往往可以快速有效地解決問題。本文針對(duì)使用STM32 MCU 進(jìn)行 ARM V8M TrustZone 開發(fā)中的 Fault 處理與調(diào)試做了一些總結(jié),希望對(duì)開發(fā)者有所幫助。
在后續(xù)的篇章中,我們還將討論 TrustZone 中 App 使用 RTOS 的注意事項(xiàng)等話題,歡迎讀者繼續(xù)關(guān)注。