樂鑫特權(quán)隔離機(jī)制 | OTA 固件升級
固件空中升級 (OTA, Over-The-Air) 是任何聯(lián)網(wǎng)設(shè)備的重要功能之一,支持開發(fā)人員通過遠(yuǎn)程更新固件,以發(fā)布新功能或修復(fù)錯誤。樂鑫特權(quán)隔離框架中包含兩類應(yīng)用程序:受保護(hù)的應(yīng)用程序 (protected_app) 和用戶應(yīng)用程序 (user_app) ,這兩類應(yīng)用程序的空中升級可以獨立完成。本文將介紹樂鑫特權(quán)隔離框架的獨立 OTA 升級功能。

ESP-IDF 的 OTA 升級流程
ESP-IDF 在進(jìn)行 OTA 升級時,使用兩個獨立的分區(qū)系統(tǒng),來實現(xiàn)安全固件升級。
相關(guān)內(nèi)容可見我們之前的博客文章: OTA 升級框架 (?https://blog.espressif.com/ota-updates-framework-ab5438e30c12 )
樂鑫特權(quán)隔離框架的 OTA 升級流程
樂鑫特權(quán)隔離框架為了兼顧受保護(hù)應(yīng)用程序和用戶應(yīng)用程序的獨立 OTA,擴(kuò)展了 ESP-IDF 的 OTA 機(jī)制。它的分區(qū)表結(jié)構(gòu)可以實現(xiàn)對受保護(hù)應(yīng)用和用戶應(yīng)用的獨立更新。
otadata 分區(qū)負(fù)責(zé)為受保護(hù)的應(yīng)用程序選擇活動的固件。otadata 分區(qū)的大小為 4 KiB。
uotadata 分區(qū)負(fù)責(zé)為用戶應(yīng)用程序選擇活動的固件。uotadata 分區(qū)的大小為 4 KiB。
ota_0 和 ota_1 分別為受保護(hù)應(yīng)用程序的活動和非活動分區(qū)。由于受保護(hù)應(yīng)用程序中含有大量代碼,因此這兩個分區(qū)的大小為 1,500 KiB。
user_0 和 user_1 分別為用戶應(yīng)用程序的活動和非活動分區(qū)。由于用戶程序應(yīng)用程序均為輕量級,因此這兩個分區(qū)的大小為 256 KiB。
OTA 升級流程(用戶應(yīng)用程序)
OTA 功能是聯(lián)網(wǎng)設(shè)備最重要的功能之一。為了保護(hù)這一重要功能不被惡意使用,OTA 功能本身也是受保護(hù)應(yīng)用程序之一。這種設(shè)計也可以使用戶應(yīng)用程序免于 OTA 更新的相關(guān)工作,因此開發(fā)也更容易。

用戶應(yīng)用程序在發(fā)起 OTA 升級時,首先向受保護(hù)應(yīng)用程序發(fā)送一個 URL,這個 URL 中包括最新的用戶應(yīng)用程序固件。
接著,受保護(hù)的應(yīng)用程序?qū)κ盏降?URL 進(jìn)行健全性測試,并安排一個 job 在后臺執(zhí)行 OTA 更新,之后返回至用戶應(yīng)用程序。
最后,該 job 將在非活動用戶分區(qū)中下載固件鏡像,更新用戶應(yīng)用程序 uotadata 分區(qū)中的條目,并重新啟動設(shè)備。
樂鑫特權(quán)隔離框架還支持安全 OTA 功能,即受保護(hù)應(yīng)用程序可額外通過驗證用戶應(yīng)用程序的簽名,來驗證用戶應(yīng)用程序的真實性。但需要注意,該功能需要單獨使能。
啟動流程(用戶應(yīng)用程序)

樂鑫特權(quán)隔離機(jī)制的啟動引導(dǎo)流程與 ESP-IDF 的經(jīng)典啟動引導(dǎo)流程略有不同。二級引導(dǎo)程序首先啟動受保護(hù)的應(yīng)用程序,然后受保護(hù)的應(yīng)用程序?qū)佑脩魬?yīng)用程序。
受保護(hù)應(yīng)用程序根據(jù) uotadata 分區(qū),選擇活動的用戶分區(qū)。
樂鑫特權(quán)隔離機(jī)制還支持“回滾”功能,一旦更新后的用戶應(yīng)用程序出現(xiàn)任何意外情況,受保護(hù)的應(yīng)用程序均可以將用戶應(yīng)用程序回滾至 OTA 之前的版本。
Highlights 亮點
OTA 功能完全由受保護(hù)的應(yīng)用程序處理,使用戶應(yīng)用程序免于 OTA 更新的相關(guān)工作,因此開發(fā)也更容易。
受保護(hù)的應(yīng)用程序可提供安全 OTA 功能,確保只有受信任的用戶應(yīng)用程序才能在設(shè)備上執(zhí)行。
支持“應(yīng)用程序回滾”的故障安全選項,以防用戶應(yīng)用程序下載不正確或在啟動期間出現(xiàn)意外等情況。

樂鑫特權(quán)隔離倉庫 ( https://github.com/espressif/esp-privilege-separation/tree/master/examples/esp_user_ota ) 中提供了用戶 OTA 示例,歡迎您的測試。如有任何問題或反饋,請隨時在 GitHub 倉庫中提交 issue。
您還可以點此觀看視頻演示了使用 ESP RainMaker? 和樂鑫特權(quán)隔離機(jī)制的用戶應(yīng)用程序如何進(jìn)行 OTA 升級。