OTA介紹
OTA(Over-The-Air,空中升級)是一種通過無線通信技術實現(xiàn)遠程更新設備固件或軟件的方法。設備批量投入使用后,由于部署范圍太廣、設備數(shù)量太多、部署的位置特殊、沒有預留硬件有線升級接口等原因,用戶往往無法人為的通過有線方式更新設備固件,這時候就可以通過 OTA 進行網絡升級。
UpdateEngine介紹
Firefly 在 Linux 平臺上提供了 UpdateEngine 開源 OTA 升級工具,工具支持遠程下載固件、固件校驗、固件解包、完整固件/分區(qū)升級。
UpdateEngine工作原理
UpdateEngine 會解析 Rockchip 格式的固件,并且計算到每個分區(qū)鏡像在固件中的偏移。提取每個分區(qū)鏡像的末尾 crc 校驗信息,對固件和分區(qū)鏡像進行校驗,確保完整性。
UpdateEngine 會把固件存放的路徑(如:/userdata/update.img)和需要升級的分區(qū)信息寫入 misc 分區(qū),并且打上 ”update“標志,讓設備在重啟后自動進入 recovery 模式。
在 recovery 模式中 userdata 分區(qū)會自動掛載到 /userdata 下,系統(tǒng)如果檢查到 “update”標志,recovery 就會調用 rkupdate 對固件進行解析并且升級到存儲設備中。
設備在 recovery 模式時,根文件系統(tǒng)會運行在 ramdisk 內存上,而不是原系統(tǒng)存儲上(如:emmc)。所以程序可以正常的向存儲設備分區(qū)進行寫操作。
OTA升級流程圖
OTA固件制作
“OTA 升級固件“”實際上就是 SDK 打包出來的 Rockchip 格式的固件。如果用戶只需要對某些分區(qū)進行升級而不是完整固件升級,可以通過修改 package-file 來裁剪固件大小。
位置在 Firefly_SDK/tools/linux/Linux_Pack_Firmware/rockdev/package-file
“RESERVED”代表預留不打包的意思。例如:用戶如果只需要更新 kernel 、uboot、bootloader,可以把 rootfs 分區(qū)設置成“RESERVED”,這樣可以大大的減少固件大小。
OTA固件升級步驟
本文實例的實際操作軟硬件環(huán)境:
設備:AIO-3588Q
固件:AIO-3588Q-RTLINUX_Ubuntu20.04-Gnome-r240_v1.1.1d_231018
1. 安裝 UpdateEngine
在 Firefly官方的 ubuntu20.04 和 ubuntu22.04 apt源中已經添加了 updateEngine 包,可以直接使用 apt 安裝。
apt updateapt install updateengine
如果是其他 Linux 發(fā)行版,也可以直接編譯運行。
apt install libdrm-dev libssl-dev libbz2-dev libcurl4-openssl-dev gitgit clone https://gitlab.com/firefly-linux/external/recovery.gitcd recoverymake -j8
2.升級遠程固件
updateEngine --misc=update --image_url=http://172.16.0.123:8000/update.img --savepath=/userdata/update.img --partition=0xFFFC00 --reboot
--misc=update:misc 中寫入“update”標志,通知 recovery 需要進行 OTA 升級
--image_url:指定固件路徑
--savepath:指定固件存放路徑
--partition:指定需要升級的分區(qū),不指定則默認是 0X3FFC00
--reboot:執(zhí)行完成后是否自動 reboot
簡單的搭建存放固件的 http 服務器。
python3 -m http.server 80
3. 升級本地固件
updateEngine --misc=update --image_url=/userdata/update.img --partition=0xFFFC00 --reboot
參數(shù)同上
4. 升級完成
執(zhí)行命令后會自動重啟進入 recovery 升級,user LED 燈閃爍,升級完成后設備會自動重啟進入正常的操作系統(tǒng)。
升級前:
升級后:
注意事項
1. 分區(qū)要求
如果你的設備只是單個系統(tǒng)啟動,不是 A/B 啟動,那么你的分區(qū)表中必須包含 misc 分區(qū)和 recovery 分區(qū)。另外如果固件存放在系統(tǒng)硬盤上的 userdata 分區(qū),那么不能修改分區(qū)表中的 Userdata 起始位置。
2. 固件存放
無論遠程更新或本地更新,固件最終的存放路徑必須要放在 /userdata 下,有其他的存儲介質除外,但也需要在 recovery 上可以做到自動掛載。
3.Userdata 用戶數(shù)據(jù)
Recovery 在 updateEning OTA 升級時會保留 userdata 數(shù)據(jù),所以 misc 不會升級,也不會擦除 userdata 分區(qū)數(shù)據(jù)。如有需要可以自定義 recovery 的代碼,F(xiàn)irefly_SDK/external/rkupdate/RKAndroidDevice.cpp => DownloadImage,去掉 MISC 的判斷條件,重新編譯 recovery 打包 OTA 升級固件。
更加安全的 OTA 升級應該配合A/B 系統(tǒng)來完成,后續(xù)我們還會單獨介紹 A/B 系統(tǒng)的 OTA 升級。
-
無線通信
+關注
關注
58文章
4564瀏覽量
143496 -
數(shù)據(jù)線
+關注
關注
8文章
283瀏覽量
37718 -
OTA
+關注
關注
7文章
578瀏覽量
35193
發(fā)布評論請先 登錄
相關推薦
評論