一般情況下,微控制器上運行的應用程序采用的都是單體式系統,即“用戶-內核”不隔離,這也是 SoC 和 MCU 在軟件架構上的差異之一。
傳統上,任何基于樂鑫芯片和 ESP-IDF 開發的應用程序均為單體式固件,即“內核”組件與“應用程序”或“業務邏輯”之間不相互獨立。因此一旦應用程序出錯就將導致整個系統崩潰。
如今,在 ESP 特權隔離框架下,能夠創建兩個獨立的執行環境:用戶應用程序和內核(或特權)應用程序。
受保護的應用程序不會受到用戶應用程序異常的影響,極大地提高了安全性,用戶應用程序的任何BUG都不會影響到整個系統。
ESP 特權隔離的亮點:
支持兩個獨立的執行環境:安全世界和非安全世界。
將單體式固件劃分為兩個獨立的固件:受保護(安全)應用程序和用戶(非安全)應用程序。
受保護的應用程序不受用戶應用程序異常的影響。
提供標準系統調用接口,允許用戶應用程序通過這些接口發起內核服務訪問請求。
保持與 ESP-IDF API 的一致性。
支持可配置的內存訪問權限和外設訪問權限。
支持在受保護的應用程序和用戶應用程序之間靈活分配內存。
分割固件大小,加快OTA完成速度。
技術細節
1. 應用程序的啟動過程
在 ESP 權限隔離框架下,應用程序的啟動流程與 ESP-IDF 一致,即 Boot ROM(一級引導加載程序)首先進行驗證,并從 flash 中加載 ESP-IDF 二級引導加載程序。然后,二級引導加載程序進行驗證,并加載受保護的應用程序。最后,受保護的應用程序在 flash 中尋找有效的用戶應用程序入口 (header)。如找到,則將設置適當的權限,并嘗試驗證并加載用戶應用程序。
ESP 特權隔離框架的主要目標是實現特權分離和強制權限管理。在 ESP32-C3 中,這是通過 World 控制器和權限管理控制器實現的。具體來說,權限管理控制器管理所有權限,而 World 控制器管理執行環境(世界),且每個世界中均有獨立的權限配置。目前,我們有兩個世界:World0 和 World1。
World0 是安全(受保護)環境,World1 是非安全(用戶)環境。
*World和權限管理
如上圖所示:
安全世界(World0)擁有對地址段 A 的全部訪問權限。
非安全世界(World1)僅擁有對地址段 A 的讀權限。
在這種權限配置下,如果非安全世界試圖向地址段 A 中的任何地址進行寫操作,則將觸發非法訪問中斷。安全世界將處理這個非法訪問中斷,并采取適當措施。
3. CPU 的世界切換
從安全世界切換到非安全世界:CPU 可以從安全世界切換到非安全世界,此時僅需將需要切換的地址配置至 World 控制器的地址寄存器,接著當 CPU 執行至該地址時即可從安全世界切換到非安全世界,此后在非安全世界執行應用程序。
從非安全世界切換到安全世界:CPU 可以從非安全世界切換至安全世界,但只能通過中斷或異常,即系統中發生任何中斷都會導致 CPU 切換到安全世界。
4. 內存布局
在強制執行權限管理后,下一步是分割內存。
內部 SRAM:
下圖展示了如何劃分 SRAM,供受保護的應用程序和用戶應用程序使用。SRAM 分為 IRAM 和 DRAM,可以根據應用程序的使用情況進行非常靈活的配置。
DRAM 區域包含對應應用程序的 .data 和 .bss 段,其余部分用作堆。在 ESP 特權隔離框架下,每個受保護的應用程序和用戶應用程序均有一個專用的堆分配器。
這種 SRAM 內存分布可以在受保護的應用程序升級后,依然很好地使用內存。此時,一旦受保護應用程序使用的 IRAM 有所增加或減少,我們均可以重新配置 IRAM-DRAM 分割線,且并不用影響用戶內存的劃分情況。
外部 flash:
下圖展示了如何在受保護的應用程序和用戶應用程序之間分割 flash 虛擬內存。與內存分割一樣,flash MMU 地址段也分為 .rodata 和 .text 區域,可進行靈活配置。
5. 系統訪問接口
受保護的應用程序提供了一個標準的“系統調用”接口,用戶應用程序可以通過該接口請求訪問內核服務。這個過程會使用一個特殊的 CPU 指令生成一個同步異常,并通過這個異常將控制權移交給受保護的應用程序。系統調用處理程序將仔細檢查請求,并相應地執行操作。下圖概述了系統調用接口的實現過程:
*系統調用執行過程
6. API 一致性
對于大多數組件,受保護的應用程序和用戶應用程序均與 ESP-IDF API 保持一致。通過系統調用接口開放給用戶應用程序的組件必須使用系統調用實現,而不是實際功能實現。我們利用鏈接器的特點,使用系統調用定義覆蓋 API 的定義。這種與 ESP-IDF API 的一致性可以確保:
輕松將 ESP-IDF 示例應用程序(僅需少量修改)移植到此框架。
同一個程序可以構建為受保護的應用程序或用戶應用程序。
7. 用戶空間異常處理
在完成權限配置和內存分割后,可能會出現用戶應用程序故意或無意嘗試訪問受保護禁區的情況。此時,權限控制器會觸發一個非法訪問中斷,由受保護的應用程序處理。這種強制執行權限管理的好處是,受保護的空間內存和應用程序不會受到用戶應用程序任何(錯誤)行為的影響。在 ESP 特權隔離框架中,我們允許受保護的應用程序注冊專門的處理程序,以應對用戶應用程序中出現的任何異常。這個處理程序還可以收集一些重要信息,并相應地處理異常。
8. 設備驅動程序
用戶應用程序可能需要通過外圍設備(SPI、I2C 等)才能與外部設備和傳感器通信。在 ESP 特權隔離框架中,我們將設備驅動實現在受保護的應用程序中,并通過標準 I/O 系統調用(open, read, write 等)的方式,將其開放給用戶應用程序。這樣一來,我們可以通過一組公共的系統調用接口,實現多個設備驅動程序。
此外,也可以向用戶應用程序開放對外設寄存器的訪問權限,允許用戶應用程序寫自己的驅動程序。
優勢
ESP 特權隔離框架可以實現一些此前傳統單體式方法通常無法實現的用例和場景,以下為一些例子:
隔離系統和業務邏輯,從而分離維護軟件的責任劃分。
業務邏輯(用戶應用程序)中的任何錯誤都不會影響整個系統。用戶空間中的此類異常由受保護的應用程序捕獲并進行相應處理,并且允許實時收集并傳輸診斷信息(如果需要)。
可以獨立管理受保護應用程序和用戶應用程序的 OTA(空中升級)更新。只要兩者的接口相互兼容,受保護的應用程序和用戶應用程序可以有不同的發布節奏。
從認證角度來說,僅需認證一次受保護的應用程序并進行分發,之后的用戶應用程序均可基于此已認證的受保護應用程序進行構建。
設備可同時保留多個用戶應用程序,并使用同個受保護應用程序進行執行。
傳統應用程序與ESP特權分離程序的內存使用對比(Rainmaker Demo)。
目前,該項目仍處于 beta 階段,但 ESP 特權隔離框架完全開源。
審核編輯 :李倩
-
mcu
+關注
關注
146文章
17019瀏覽量
350374 -
ESP
+關注
關注
0文章
181瀏覽量
33889 -
應用程序
+關注
關注
37文章
3245瀏覽量
57615
原文標題:官方“空投” — ESP特權隔離機制來了!
文章出處:【微信號:wireless-tag,微信公眾號:啟明云端科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論