0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

官方“空投” — ESP特權(quán)隔離機(jī)制來(lái)了!

啟明云端 ? 2023-02-07 09:57 ? 次閱讀

一般情況下,微控制器上運(yùn)行的應(yīng)用程序采用的都是單體式系統(tǒng),即“用戶-內(nèi)核”不隔離,這也是 SoC 和 MCU 在軟件架構(gòu)上的差異之一。


傳統(tǒng)上,任何基于樂(lè)鑫芯片和 ESP-IDF 開(kāi)發(fā)的應(yīng)用程序均為單體式固件,即“內(nèi)核”組件與“應(yīng)用程序”或“業(yè)務(wù)邏輯”之間不相互獨(dú)立。因此一旦應(yīng)用程序出錯(cuò)就將導(dǎo)致整個(gè)系統(tǒng)崩潰。


如今,在 ESP 特權(quán)隔離框架下,能夠創(chuàng)建兩個(gè)獨(dú)立的執(zhí)行環(huán)境:用戶應(yīng)用程序內(nèi)核(或特權(quán)應(yīng)用程序。


受保護(hù)的應(yīng)用程序不會(huì)受到用戶應(yīng)用程序異常的影響,極大地提高了安全性,用戶應(yīng)用程序的任何BUG都不會(huì)影響到整個(gè)系統(tǒng)。


e3eda2e8-a504-11ed-ad0d-dac502259ad0.jpg

ESP 特權(quán)隔離的亮點(diǎn):

支持兩個(gè)獨(dú)立的執(zhí)行環(huán)境:安全世界和非安全世界。

將單體式固件劃分為兩個(gè)獨(dú)立的固件:受保護(hù)(安全)應(yīng)用程序和用戶(非安全)應(yīng)用程序。

受保護(hù)的應(yīng)用程序不受用戶應(yīng)用程序異常的影響。

提供標(biāo)準(zhǔn)系統(tǒng)調(diào)用接口,允許用戶應(yīng)用程序通過(guò)這些接口發(fā)起內(nèi)核服務(wù)訪問(wèn)請(qǐng)求。

保持與 ESP-IDF API 的一致性。

支持可配置的內(nèi)存訪問(wèn)權(quán)限和外設(shè)訪問(wèn)權(quán)限。

支持在受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序之間靈活分配內(nèi)存。

分割固件大小,加快OTA完成速度。

技術(shù)細(xì)節(jié)

1. 應(yīng)用程序的啟動(dòng)過(guò)程

e4042266-a504-11ed-ad0d-dac502259ad0.png

在 ESP 權(quán)限隔離框架下,應(yīng)用程序的啟動(dòng)流程與 ESP-IDF 一致,即 Boot ROM(一級(jí)引導(dǎo)加載程序)首先進(jìn)行驗(yàn)證,并從 flash 中加載 ESP-IDF 二級(jí)引導(dǎo)加載程序。然后,二級(jí)引導(dǎo)加載程序進(jìn)行驗(yàn)證,并加載受保護(hù)的應(yīng)用程序。最后,受保護(hù)的應(yīng)用程序在 flash 中尋找有效的用戶應(yīng)用程序入口 (header)。如找到,則將設(shè)置適當(dāng)?shù)臋?quán)限,并嘗試驗(yàn)證并加載用戶應(yīng)用程序。

2. World 控制器和權(quán)限控制

ESP 特權(quán)隔離框架的主要目標(biāo)是實(shí)現(xiàn)特權(quán)分離和強(qiáng)制權(quán)限管理。在 ESP32-C3 中,這是通過(guò) World 控制器和權(quán)限管理控制器實(shí)現(xiàn)的。具體來(lái)說(shuō),權(quán)限管理控制器管理所有權(quán)限,而 World 控制器管理執(zhí)行環(huán)境(世界),且每個(gè)世界中均有獨(dú)立的權(quán)限配置。目前,我們有兩個(gè)世界:World0 和 World1。

World0 是安全(受保護(hù))環(huán)境,World1 是非安全(用戶)環(huán)境。


e4136a5a-a504-11ed-ad0d-dac502259ad0.png

*World和權(quán)限管理

如上圖所示:

安全世界(World0)擁有對(duì)地址段 A 的全部訪問(wèn)權(quán)限。

非安全世界(World1)僅擁有對(duì)地址段 A 的讀權(quán)限。

在這種權(quán)限配置下,如果非安全世界試圖向地址段 A 中的任何地址進(jìn)行寫(xiě)操作,則將觸發(fā)非法訪問(wèn)中斷。安全世界將處理這個(gè)非法訪問(wèn)中斷,并采取適當(dāng)措施。

3. CPU 的世界切換

從安全世界切換到非安全世界:CPU 可以從安全世界切換到非安全世界,此時(shí)僅需將需要切換的地址配置至 World 控制器的地址寄存器,接著當(dāng) CPU 執(zhí)行至該地址時(shí)即可從安全世界切換到非安全世界,此后在非安全世界執(zhí)行應(yīng)用程序。

從非安全世界切換到安全世界:CPU 可以從非安全世界切換至安全世界,但只能通過(guò)中斷或異常,即系統(tǒng)中發(fā)生任何中斷都會(huì)導(dǎo)致 CPU 切換到安全世界。

4. 內(nèi)存布局

在強(qiáng)制執(zhí)行權(quán)限管理后,下一步是分割內(nèi)存。

內(nèi)部 SRAM

下圖展示了如何劃分 SRAM,供受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序使用。SRAM 分為 IRAM 和 DRAM,可以根據(jù)應(yīng)用程序的使用情況進(jìn)行非常靈活的配置。


e4299eba-a504-11ed-ad0d-dac502259ad0.jpg

DRAM 區(qū)域包含對(duì)應(yīng)應(yīng)用程序的 .data 和 .bss 段,其余部分用作堆。在 ESP 特權(quán)隔離框架下,每個(gè)受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序均有一個(gè)專用的堆分配器。


這種 SRAM 內(nèi)存分布可以在受保護(hù)的應(yīng)用程序升級(jí)后,依然很好地使用內(nèi)存。此時(shí),一旦受保護(hù)應(yīng)用程序使用的 IRAM 有所增加或減少,我們均可以重新配置 IRAM-DRAM 分割線,且并不用影響用戶內(nèi)存的劃分情況。


外部 flash:

下圖展示了如何在受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序之間分割 flash 虛擬內(nèi)存。與內(nèi)存分割一樣,flash MMU 地址段也分為 .rodata 和 .text 區(qū)域,可進(jìn)行靈活配置。


e448bb9c-a504-11ed-ad0d-dac502259ad0.png

5. 系統(tǒng)訪問(wèn)接口

受保護(hù)的應(yīng)用程序提供了一個(gè)標(biāo)準(zhǔn)的“系統(tǒng)調(diào)用”接口,用戶應(yīng)用程序可以通過(guò)該接口請(qǐng)求訪問(wèn)內(nèi)核服務(wù)。這個(gè)過(guò)程會(huì)使用一個(gè)特殊的 CPU 指令生成一個(gè)同步異常,并通過(guò)這個(gè)異常將控制權(quán)移交給受保護(hù)的應(yīng)用程序。系統(tǒng)調(diào)用處理程序?qū)⒆屑?xì)檢查請(qǐng)求,并相應(yīng)地執(zhí)行操作。下圖概述了系統(tǒng)調(diào)用接口的實(shí)現(xiàn)過(guò)程:


e45d1dee-a504-11ed-ad0d-dac502259ad0.png

*系統(tǒng)調(diào)用執(zhí)行過(guò)程

6. API 一致性

對(duì)于大多數(shù)組件,受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序均與 ESP-IDF API 保持一致。通過(guò)系統(tǒng)調(diào)用接口開(kāi)放給用戶應(yīng)用程序的組件必須使用系統(tǒng)調(diào)用實(shí)現(xiàn),而不是實(shí)際功能實(shí)現(xiàn)。我們利用鏈接器的特點(diǎn),使用系統(tǒng)調(diào)用定義覆蓋 API 的定義。這種與 ESP-IDF API 的一致性可以確保:

輕松將 ESP-IDF 示例應(yīng)用程序(僅需少量修改)移植到此框架。

同一個(gè)程序可以構(gòu)建為受保護(hù)的應(yīng)用程序或用戶應(yīng)用程序。

7. 用戶空間異常處理

在完成權(quán)限配置和內(nèi)存分割后,可能會(huì)出現(xiàn)用戶應(yīng)用程序故意或無(wú)意嘗試訪問(wèn)受保護(hù)禁區(qū)的情況。此時(shí),權(quán)限控制器會(huì)觸發(fā)一個(gè)非法訪問(wèn)中斷,由受保護(hù)的應(yīng)用程序處理。這種強(qiáng)制執(zhí)行權(quán)限管理的好處是,受保護(hù)的空間內(nèi)存和應(yīng)用程序不會(huì)受到用戶應(yīng)用程序任何(錯(cuò)誤)行為的影響。在 ESP 特權(quán)隔離框架中,我們?cè)试S受保護(hù)的應(yīng)用程序注冊(cè)專門(mén)的處理程序,以應(yīng)對(duì)用戶應(yīng)用程序中出現(xiàn)的任何異常。這個(gè)處理程序還可以收集一些重要信息,并相應(yīng)地處理異常。

8. 設(shè)備驅(qū)動(dòng)程序

用戶應(yīng)用程序可能需要通過(guò)外圍設(shè)備(SPI、I2C 等)才能與外部設(shè)備和傳感器通信。在 ESP 特權(quán)隔離框架中,我們將設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)在受保護(hù)的應(yīng)用程序中,并通過(guò)標(biāo)準(zhǔn) I/O 系統(tǒng)調(diào)用(open, read, write 等)的方式,將其開(kāi)放給用戶應(yīng)用程序。這樣一來(lái),我們可以通過(guò)一組公共的系統(tǒng)調(diào)用接口,實(shí)現(xiàn)多個(gè)設(shè)備驅(qū)動(dòng)程序。

此外,也可以向用戶應(yīng)用程序開(kāi)放對(duì)外設(shè)寄存器的訪問(wèn)權(quán)限,允許用戶應(yīng)用程序?qū)懽约旱尿?qū)動(dòng)程序。


優(yōu)勢(shì)

ESP 特權(quán)隔離框架可以實(shí)現(xiàn)一些此前傳統(tǒng)單體式方法通常無(wú)法實(shí)現(xiàn)的用例和場(chǎng)景,以下為一些例子:

隔離系統(tǒng)和業(yè)務(wù)邏輯,從而分離維護(hù)軟件的責(zé)任劃分。

業(yè)務(wù)邏輯(用戶應(yīng)用程序)中的任何錯(cuò)誤都不會(huì)影響整個(gè)系統(tǒng)。用戶空間中的此類異常由受保護(hù)的應(yīng)用程序捕獲并進(jìn)行相應(yīng)處理,并且允許實(shí)時(shí)收集并傳輸診斷信息(如果需要)。

可以獨(dú)立管理受保護(hù)應(yīng)用程序和用戶應(yīng)用程序的 OTA(空中升級(jí))更新。只要兩者的接口相互兼容,受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序可以有不同的發(fā)布節(jié)奏。

認(rèn)證角度來(lái)說(shuō),僅需認(rèn)證一次受保護(hù)的應(yīng)用程序并進(jìn)行分發(fā),之后的用戶應(yīng)用程序均可基于此已認(rèn)證的受保護(hù)應(yīng)用程序進(jìn)行構(gòu)建。

設(shè)備可同時(shí)保留多個(gè)用戶應(yīng)用程序,并使用同個(gè)受保護(hù)應(yīng)用程序進(jìn)行執(zhí)行。

傳統(tǒng)應(yīng)用程序與ESP特權(quán)分離程序的內(nèi)存使用對(duì)比(Rainmaker Demo)。

e474e60e-a504-11ed-ad0d-dac502259ad0.jpg



聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7399

    瀏覽量

    150664
  • ESP
    ESP
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    33811
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP系統(tǒng)的控制邏輯與響應(yīng)機(jī)制

    在探討現(xiàn)代汽車安全技術(shù)時(shí),汽車電子穩(wěn)定程序系統(tǒng)無(wú)疑是一個(gè)不可或缺的部分。這種先進(jìn)的系統(tǒng)通過(guò)精確控制車輛的動(dòng)態(tài)表現(xiàn),顯著提高了駕駛時(shí)的安全性和穩(wěn)定性。 ESP系統(tǒng)的控制邏輯與響應(yīng)機(jī)制 動(dòng)態(tài)方向比
    的頭像 發(fā)表于 08-29 11:00 ?316次閱讀

    esp32和esp8266代碼共用嗎

    本文將介紹ESP32和ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 一、引言 隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來(lái)越多的智能設(shè)備開(kāi)始進(jìn)入我們的生活。其中,ESP32和ESP
    的頭像 發(fā)表于 08-19 18:23 ?809次閱讀

    esp8266和esp32區(qū)別是什么

    以下是關(guān)于ESP8266和ESP32的主要區(qū)別: 處理器和架構(gòu) : ESP8266 :使用一個(gè)Tensilica L106 80MHz的處理器,屬于Xtensa架構(gòu)。 ESP32 :使
    的頭像 發(fā)表于 08-19 18:16 ?3015次閱讀

    ESP8266為什么掛載不同大小的FlashROM,下載bin文件的地址不同?

    、ESP8266官方下載工具里的SPI 速度設(shè)置,晶振頻率選擇,F(xiàn)lash 容量選擇有何實(shí)際意義?這些設(shè)置不是應(yīng)該用程序修改的嘛?難道這里的設(shè)置能用來(lái)修改boot.bin里的參數(shù)?或者這些設(shè)置僅僅是在下
    發(fā)表于 07-19 15:34

    ESP8266如何通過(guò)AT命令設(shè)置ESP主機(jī)名?

    我認(rèn)為允許為 ESP8266設(shè)置自定義主機(jī)名可以通過(guò)官方 AT 命令來(lái)實(shí)現(xiàn)。 這是一個(gè)非常有用的功能,與AT CIUPDATE(官方)結(jié)合使用,它將運(yùn)行良好,所有人都會(huì)擁有該功能
    發(fā)表于 07-16 06:09

    esp freertos sdk使用默認(rèn)的lwipopts.h編譯lwip源代碼時(shí),輸出的liblwip.a與官方的格式不同,為什么?

    您好,我想編譯 esp freertos sdk 并使用官方源代碼(2015 年 1 月 1 日github@15獲取)。當(dāng)使用默認(rèn)的 lwipopts.h 編譯 lwip 源代碼時(shí),輸出
    發(fā)表于 07-15 06:57

    ESP32S2最小模塊,采用官方例子進(jìn)入深度睡眠,功耗為什么降不到和官方手冊(cè)一致

    使用的是ESP32S2 idf 5.2.2 官方代碼歷程deep_sleep 進(jìn)入深度睡眠 睡眠后功耗為1.9mA,一直降不下去。
    發(fā)表于 07-10 18:02

    請(qǐng)問(wèn)esp8266官方spi的例子是不是都是4字節(jié)傳輸?shù)模?/a>

    esp8266的官方例子可有1字節(jié)傳輸?shù)陌?,兩字?jié)傳輸?shù)奈腋某?字節(jié)的接收數(shù)據(jù)總是錯(cuò)誤,也不知道哪里錯(cuò)了,請(qǐng)問(wèn)有單字節(jié)傳輸?shù)膯??我試試看?shù)據(jù)可對(duì)?
    發(fā)表于 07-09 06:01

    使用esp-mdf官方例程mconfig組網(wǎng)后app加載不了設(shè)備,為什么?

    使用esp-mdf 官方例程mconfig 組網(wǎng)后app加載不了設(shè)備 esp-mesh 剛開(kāi)始能搜索到設(shè)備 然后配網(wǎng)那些都能正常進(jìn)行 但是最后組網(wǎng)后搜索不到設(shè)備了
    發(fā)表于 06-28 10:01

    ESP32用send函數(shù)發(fā)送數(shù)據(jù)時(shí),經(jīng)常出現(xiàn)進(jìn)到send后就出不來(lái)了的情況,為什么?

    在使用ESP32的WIFI發(fā)送TCP數(shù)據(jù)時(shí)(模塊做AP,TCP-Server),用send函數(shù)發(fā)送數(shù)據(jù)時(shí),經(jīng)常出現(xiàn)進(jìn)到send后就出不來(lái)了的情況,唯一的解救辦法就是斷開(kāi)WIFI連接,send才會(huì)返回
    發(fā)表于 06-26 07:00

    esp32自動(dòng)重連機(jī)制怎么做?

    當(dāng)esp32成功連上一個(gè)路由器,這個(gè)時(shí)候斷開(kāi)路由器電源,再上電,這個(gè)esp32自動(dòng)重連機(jī)制怎么做?
    發(fā)表于 06-07 07:31

    ESP32-C3編譯官方例程缺少頭文件怎么解決?

    ESP32-C3官方示例modbus-master,編譯時(shí)提示找不到這兩個(gè)頭文件\"modbus_params.h\"和\"mbcontroller.h\"
    發(fā)表于 06-06 07:28

    特權(quán)賬號(hào)管理的那些坑,芯盾時(shí)代PAM幫你踩平!

    特權(quán)賬號(hào),是指數(shù)據(jù)中心內(nèi)部,分布在主機(jī)、網(wǎng)絡(luò)設(shè)備、數(shù)據(jù)庫(kù)等資產(chǎn)上具有較高訪問(wèn)權(quán)限的賬號(hào),衍生到一切資產(chǎn)上具有可訪問(wèn)權(quán)限的賬號(hào)。
    的頭像 發(fā)表于 03-21 11:44 ?1072次閱讀
    <b class='flag-5'>特權(quán)</b>賬號(hào)管理的那些坑,芯盾時(shí)代PAM幫你踩平!

    ESP32-WROOM-32開(kāi)發(fā)板教程

    ESP32-WROOM-32開(kāi)發(fā)板。 第一部分:ESP32-WROOM-32簡(jiǎn)介 首先,讓我們來(lái)了解一下ESP32-WROOM-32的基本信息。它是一款強(qiáng)大的Wi-Fi和藍(lán)牙模塊,內(nèi)置
    的頭像 發(fā)表于 12-08 13:55 ?8919次閱讀

    客戶案例丨某大型能源集團(tuán)重構(gòu)企業(yè)身份管理體系 筑牢特權(quán)賬號(hào)安全防線

    、權(quán)限大,缺乏統(tǒng)一的管理平臺(tái)和規(guī)范的管理機(jī)制,導(dǎo)致賬號(hào)資源混亂、密碼策略難以落地。其次,特權(quán)賬號(hào)普遍多人共享,責(zé)任難以落實(shí)到人,不利于風(fēng)險(xiǎn)監(jiān)測(cè)和追蹤溯源。 面對(duì)特權(quán)賬號(hào)管理難題,某大型能源集團(tuán)(以下簡(jiǎn)稱“A集團(tuán)
    的頭像 發(fā)表于 11-30 10:10 ?541次閱讀