OTA(Over-The-Air)升級作為一種無損失的系統升級方式,能夠遠程將新功能部署到產品上,極大地提高了設備的可維護性和可擴展性。除了通過網絡直接下載OTA升級包外,我們還可以通過將升級包下載到SD卡或U盤后,再對設備進行本地升級。
本文將基于飛凌嵌入式RK3568開發板,詳細介紹OTA升級的流程,特別是本地升級程序recovery的執行流程及技術細節。
一、制作recovery.img
首先,我們需要制作recovery鏡像。recovery相關的源碼位于buildroot/output/OK3568-recovery/build/recovery-develop目錄下。
源碼修改與編譯
如果修改過該目錄下的源碼文件,需要執行以下操作:
進入源碼目錄:forlinx@ubuntu:~/OK3568-linux-source$ source envsetup.sh
選擇某一平臺的recovery配置,輸入96(具體數字可能因平臺而異)。
清除編譯產物并重新編譯recovery:forlinx@ubuntu:~/OK3568-linux-source$ make recovery-dirclean && make recovery
清除rkupdate編譯產物并重新編譯:forlinx@ubuntu:~/OK3568-linux-source$ make rkupdate-dirclean && make rkupdate
如果沒有修改過源碼文件,則直接執行以下操作:
編譯生成recovery.img:forlinx@ubuntu:~/OK3568-linux-source$ ./build.sh recovery
將生成的固件拷貝至rockdev/目錄下:forlinx@ubuntu:~/OK3568-linux-source$ ./mkfirmware.sh
燒寫recovery.img
將生成的recovery.img文件燒寫到設備的指定分區。具體操作通常是通過設備分區表,勾選對應的recovery分區(如分區9),選擇recovery.img路徑,然后點擊執行燒寫操作。
二、制作升級鏡像
為了驗證升級是否成功,我們需要對boot.img文件進行修改。boot.img文件存放有設備樹和內核,我們可以通過修改設備樹來實現升級效果。
修改設備樹文件
修改/OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi文件,對forlinx_control節點進行如下修改,以默認只打開HDMI輸出,關閉MIPI和LVDS輸出:
/ { model =“Forlinx OK3568-C Board"; compatible ="forlinx,ok3568","rockchip,rk3568-evb1-ddr4-V10","rockchip,rk3568"; forlinx control { status ="okay"; video-hdmi ="hdmi"; video-mipi-edp ="off"; video-lvds-rgb ="off"; };
修改package-file文件
根據升級需求修改/OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file文件。
本例中以更新boot.img為例,所以將其他.img文件注釋掉。用戶可以根據實際產品更新需求對該文件進行調整。
重新編譯內核
修改完設備樹后,需要重新編譯內核以生成新的boot.img文件。
三、升級操作
SD卡或U盤升級
將SD卡或U盤默認掛載到RK3568開發板的/run/media目錄下。將update.img鏡像文件拷貝到開發板的/userdata目錄下。重啟開發板后,系統將自動檢測該目錄下的升級包并進行升級。
FTP服務器升級
在RK3568開發板端執行相應命令,將FTP服務器上的升級包文件拷貝到開發板進行升級。
下載完成后,使用update ota /userdata/update.img命令進行升級。
升級過程中設備將會進入recovery模式,并進行自動升級。升級成功后,設備將進入正常系統(normal系統)。
四、驗證測試結果
燒寫默認出廠鏡像文件
將RK3568開發板上電,串口終端按住空格鍵進入uboot選屏界面。燒寫默認出廠鏡像文件后,觀察現象:默認開啟HDMI、MIPI和LVDS三個輸出。
燒寫升級包鏡像文件
燒寫升級包鏡像文件后,觀察現象:只有HDMI顯示開啟,其他兩個輸出被關閉。這驗證了升級操作的成功性。
五、注意事項
打包update.img固件
升級固件可以全分區打包,也可以部分升級。通過修改package-file文件,可以去掉不需要升級的分區,從而減小升級包(update.img)的大小。
如果package-file中包含了recovery.img,它不會在recovery模式中升級。為了預防升級過程中掉電導致其他分區無法正常升級的問題,recovery.img的升級放在normal系統下執行。執行update命令時,會先檢測update.img升級包中是否包含recovery.img,若有則升級recovery分區,再進入recovery模式升級其他分區固件。
misc分區
misc分區不建議打包進update.img中。即使打包進去,在升級程序中加載判斷到后也會忽略該分區。即使升級了misc分區,升級成功后recovery程序仍會清空misc分區中所有的命令及參數,從而達到預期效果。
userdata分區
若將update.img升級包放置在flash中的userdata分區,則需要保證package-file中不包括userdata.img被打包進去,以防止文件系統的損壞和分區mount不成功的問題。
若從SD卡或U盤升級時,可以打包userdata.img,從而對userdata分區進行升級。升級完成后,會對userdata分區重新進行resize操作。
通過以上步驟和注意事項,我們可以成功地在OK3568-C開發板上實現OTA升級操作,并驗證升級效果。希望本文能夠對大家在OTA升級方面的項目開發有所幫助。
審核編輯 黃宇
-
開發板
+關注
關注
25文章
5499瀏覽量
102137 -
OTA
+關注
關注
7文章
604瀏覽量
36186 -
RK3568
+關注
關注
5文章
575瀏覽量
6054
發布評論請先 登錄
iTOP-RK3568開發板OTA升級包編譯
RK3568開發板數據手冊
【ROC-RK3568-PC開發板試用體驗】Firefly ROC-RK3568-PC開發板初探

評論