最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

樂鑫特權(quán)隔離機(jī)制 #2 | 案例研究

2023-03-09 11:48 作者:樂鑫信息科技  | 我要投稿

樂鑫特權(quán)隔離機(jī)制 系列文章?#2


前一篇文章中,我們介紹了樂鑫特權(quán)隔離機(jī)制,并借此在 ESP32-C3 SoC 上實(shí)現(xiàn)了“用戶-內(nèi)核”應(yīng)用程序的相互隔離與獨(dú)立。目前,您可以通過多種方法在您的項(xiàng)目中部署樂鑫特權(quán)隔離機(jī)制。本案例研究以 ESP RainMaker 為例,展示了如何將樂鑫特權(quán)隔離機(jī)制部署至一個(gè)真實(shí)的物聯(lián)網(wǎng)應(yīng)用程序。

ESP RainMaker 是一個(gè)完整的 AIoT 平臺(tái),可助力客戶快速開發(fā) AIoT 產(chǎn)品,詳見這里。

在 ESP RainMaker 中部署樂鑫特權(quán)隔離機(jī)制

1. 創(chuàng)建項(xiàng)目目錄

如需應(yīng)用樂鑫特權(quán)隔離機(jī)制,則項(xiàng)目的目錄結(jié)構(gòu)將與常規(guī) ESP-IDF 項(xiàng)目略有差異。樂鑫特權(quán)隔離項(xiàng)目在創(chuàng)建目錄結(jié)構(gòu)時(shí),需要將程序放在兩個(gè)子目錄下:受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序,并保證這兩個(gè)子文件夾中的應(yīng)用程序均可被編譯系統(tǒng)編譯。以下為一個(gè)例子:

有關(guān)“目錄結(jié)構(gòu)”的詳細(xì)說明:樂鑫特權(quán)隔離機(jī)制入門指南?(docs.espressif.com/projects/esp-privilege-separation/en/latest/esp32c3/getting-started.html#directory-structure) 。

2.?安裝 ESP RainMaker 代理

根據(jù)系統(tǒng)調(diào)用的具體實(shí)現(xiàn)情況,我們可以選擇將 ESP RainMaker 代理安裝在兩個(gè)位置:

  • 選項(xiàng) 1:用戶應(yīng)用程序中

  • 選項(xiàng) 2:受保護(hù)的應(yīng)用程序中

在本文中,我們將以選項(xiàng)?2?為例,具體描述如何將 ESP RainMaker 代理安裝至受保護(hù)的應(yīng)用程序文件夾中。

3. 劃分各組件至受保護(hù)應(yīng)用程序和用戶應(yīng)用程序

上圖展示了各組件在受保護(hù)應(yīng)用程序和用戶應(yīng)用程序之間的分布情況。具體來說,所有庫(如 ESP RainMaker、TLS 棧等)因承擔(dān)了大部分繁重工作,都被放置在受保護(hù)的應(yīng)用程序中;用戶應(yīng)用程序則主要包括與業(yè)務(wù)相關(guān)的輕量級(jí)應(yīng)用。

構(gòu)建系統(tǒng)將在 build 文件夾下生成 app_libs_and_objs.json 文件,該文件描述了所有庫、其占用的內(nèi)存及對(duì)應(yīng)應(yīng)用程序中包括的 object 文件。

4. 實(shí)現(xiàn)系統(tǒng)調(diào)用

在本案例研究中,我們選擇將 ESP RainMaker 代理安裝在受保護(hù)的應(yīng)用程序中。這種情況下,我們必須為 ESP RainMaker 提供的所有公共 API,增加一個(gè)自定義系統(tǒng)調(diào)用。得益于樂鑫特權(quán)隔離機(jī)制非常易于擴(kuò)展,因此增加這樣一個(gè)自定義系統(tǒng)調(diào)用并不復(fù)雜,詳見這里。

接下來,我們將以 ESP RainMaker 的公開 API esp_rmaker_start() 為例,展示如何為其增加一個(gè)自定義系統(tǒng)調(diào)用。首先,我們需要把 ESP RainMaker 移動(dòng)至受保護(hù)的應(yīng)用程序中。此后,用戶應(yīng)用程序中所有對(duì) esp_rmaker_start() 的調(diào)用均將通過我們增加的自定義系統(tǒng)調(diào)用接口完成。下圖展示了這一過程:

具體過程描述如下:

a. 首先,我們需要在用戶應(yīng)用程序中實(shí)現(xiàn)一個(gè)系統(tǒng)調(diào)用包裝程序 (wrapper),名稱即為系統(tǒng)調(diào)用程序名加一個(gè) usr_ 前綴。此后,這個(gè)包裝程序?qū)⑼ㄟ^宏 EXECUTE_SYSCALL 生成一個(gè)同步異常,并通過該異常進(jìn)入受保護(hù)空間。宏 __NR_esp_rmaker_start 即為構(gòu)建系統(tǒng)生成的系統(tǒng)調(diào)用號(hào)。

注意:構(gòu)建系統(tǒng)已經(jīng)將 esp_rmaker_start 關(guān)聯(lián)至 usr_esp_rmaker_start,因此用戶應(yīng)用程序調(diào)用 esp_rmaker_start即可完成系統(tǒng)調(diào)用。

b. 接著,我們需要實(shí)現(xiàn)一個(gè)受保護(hù)應(yīng)用程序的系統(tǒng)調(diào)用處理程序 (handler)。此后出現(xiàn)同步異常即可觸發(fā)該處理程序,繼而調(diào)用實(shí)際 API,并將錯(cuò)誤代碼返回給用戶空間。

c. 為了綁定用戶和受保護(hù)系統(tǒng)調(diào)用的實(shí)現(xiàn),我們需要在 example 目錄 (examples/rmaker_switch/components/rmaker_syscall/rmaker_syscall.tbl) 下創(chuàng)建一個(gè)自定義系統(tǒng)調(diào)用表。此時(shí),我們需要定義四個(gè)屬性:

  • 唯一的系統(tǒng)調(diào)用號(hào)

  • common / custom 屬性標(biāo)志

  • 系統(tǒng)調(diào)用名

  • 受保護(hù)的系統(tǒng)調(diào)用處理程序名

此后,構(gòu)建系統(tǒng)將通過這個(gè)系統(tǒng)調(diào)用表文件,來創(chuàng)建一個(gè) __NR_esp_rmaker_start 宏。這個(gè)宏可以將用戶應(yīng)用程序的 EXECUTE_SYSCALL 調(diào)用綁定至受保護(hù)應(yīng)用程序的 sys_esp_rmaker_start。

以上示例僅用于演示,具體實(shí)現(xiàn)請(qǐng)見?rmaker_syscall (github.com/espressif/esp-privilege-separation/tree/master/examples/rmaker_switch/components/rmaker_syscall)。

5. 實(shí)現(xiàn)用戶應(yīng)用程序

在完成這些系統(tǒng)調(diào)用實(shí)現(xiàn)后,我們可以在用戶應(yīng)用程序中使用 ESP RainMaker 提供的幾乎所有公共 API。目前,我們已經(jīng)使用受保護(hù)應(yīng)用程序中添加的服務(wù),實(shí)現(xiàn)了一個(gè) IoT 開關(guān)應(yīng)用程序,詳見 GitHub?repo (github.com/espressif/esp-privilege-separation/blob/master/examples/rmaker_switch/user_app/main/user_code.c)。

傳統(tǒng)應(yīng)用程序 vs.?樂鑫特權(quán)隔離應(yīng)用程序

可以看出,樂鑫特權(quán)分離應(yīng)用程序 bin 文件總大小與傳統(tǒng)應(yīng)用程序相仿,靜態(tài)內(nèi)存使用情況略有增加,但可以將單體式固件 (monolithic firmware) 劃分為受保護(hù)的應(yīng)用程序和用戶應(yīng)用程序。

在 ESP32-C3 SoC 上運(yùn)行應(yīng)用程序

1. ESP RainMaker 代理的初始化

首先,用戶應(yīng)用程序在啟動(dòng)代碼注冊 heap 和 console 后,將控制權(quán)移交給 user_main。接著,user_main 函數(shù)將初始化 ESP RainMaker 代理,創(chuàng)建一個(gè) RainMaker 設(shè)備,并通過系統(tǒng)調(diào)用接口在受保護(hù)的應(yīng)用程序中啟動(dòng) ESP RainMaker 代理。受保護(hù)的應(yīng)用程序管理 Wi-Fi 連接,并提供所有 RainMaker 服務(wù)。

2. ESP RainMaker 的云連接

一旦完成 Wi-Fi 配網(wǎng)和連接,受保護(hù)的應(yīng)用程序?qū)⑴c RainMaker 云建立 TLS 連接。在此之后,我們的 ESP32-C3 設(shè)備已準(zhǔn)備好接收來自云端的事件。受保護(hù)的應(yīng)用程序接收所有云事件,并根據(jù)配置觸發(fā)用戶空間回調(diào)。

未來計(jì)劃

  • 在不改變受保護(hù)應(yīng)用程序(RainMaker 內(nèi)核)的前提下,單獨(dú)升級(jí)用戶應(yīng)用程序,進(jìn)而針對(duì)業(yè)務(wù)邏輯變化,輕松更新業(yè)務(wù)應(yīng)用程序,即使頻繁更新也并不麻煩。

  • 受保護(hù)的應(yīng)用程序與 RainMaker 云建立 TLS 連接。如果用戶應(yīng)用程序崩潰,TLS 連接也不受影響,受保護(hù)的應(yīng)用程序仍可以向 RainMaker 云發(fā)送實(shí)時(shí)調(diào)試信息。

總結(jié)

  1. 我們實(shí)現(xiàn)了一個(gè)由受保護(hù)應(yīng)用程序提供的系統(tǒng)調(diào)用接口,來提供 RainMaker 服務(wù)。

  2. 我們集成了上游 ESP RainMaker 應(yīng)用程序,且集成過程的改動(dòng)需求極低。

  3. 我們對(duì)比了傳統(tǒng) ESP RainMaker 應(yīng)用程序和樂鑫特權(quán)隔離應(yīng)用程序的 bin 文件大小和靜態(tài)內(nèi)存使用情況。


我們的 ESP RainMaker 開關(guān)示例可見?樂鑫特權(quán)隔離機(jī)制 repo (github.com/espressif/esp-privilege-separation/tree/master/examples/rmaker_switch),歡迎您嘗試項(xiàng)目開發(fā)或提供意見反饋(可直接在 GitHub 上提交 issue)。

本篇為樂鑫特權(quán)隔離機(jī)制 系列文章第二篇,若您對(duì)此系列文章感興趣,您可以點(diǎn)此收藏,方便您隨時(shí)查找并關(guān)注此系列文章的后續(xù)更新。?

樂鑫特權(quán)隔離機(jī)制 #2 | 案例研究的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
安国市| 宜宾县| 蒙阴县| 山阳县| 昭苏县| 伊吾县| 财经| 会理县| 读书| 多伦县| 城步| 汉寿县| 浪卡子县| 扶风县| 西吉县| 张家界市| 巴南区| 沾益县| 广南县| 静乐县| 边坝县| 大足县| 武冈市| 西华县| 临清市| 灌南县| 富裕县| 敦煌市| 香格里拉县| 盐边县| 济宁市| 龙陵县| 汝阳县| 鄂托克前旗| 邵武市| 富顺县| 惠东县| 安新县| 蒙城县| 新丰县| 海淀区|