在Rockchip(簡稱RK)Android平臺開發(fā)中,OTA(Over The Air)升級是實(shí)現(xiàn)設(shè)備軟件迭代的核心方式。無論是本地卡刷升級,還是在線無縫更新,掌握OTA升級的技術(shù)細(xì)節(jié),能讓開發(fā)者高效解決固件更新、功能迭代等問題。本文將從升級邏輯、核心技巧、調(diào)試要點(diǎn)到問題排查,全方位拆解RK平臺OTA升級開發(fā),附關(guān)鍵流程圖示,助力開發(fā)者快速上手。
一、OTA升級核心邏輯:兩種系統(tǒng)架構(gòu)的差異
RK平臺OTA升級需區(qū)分非AB系統(tǒng)與AB系統(tǒng),兩者的分區(qū)設(shè)計(jì)、升級流程差異顯著,需針對性開發(fā)。
1.1非AB系統(tǒng):傳統(tǒng)Recovery升級邏輯
非AB系統(tǒng)(即傳統(tǒng)分區(qū)系統(tǒng))通過Recovery模式完成升級,核心特點(diǎn)是“單組分區(qū)+重啟升級”,升級時設(shè)備需進(jìn)入Recovery模式,暫時無法使用。
?分區(qū)設(shè)計(jì):僅包含一套系統(tǒng)分區(qū)(如system、boot、vendor等),升級時直接覆蓋原分區(qū)。
?升級流程:
a.生成完整OTA包(含全量系統(tǒng)文件)或差異包(僅含版本間變更內(nèi)容);
b.將升級包放入USB/SD卡或內(nèi)置存儲(如/data/media/0/);
c.設(shè)備檢測到升級包后重啟進(jìn)入Recovery模式;
d.Recovery校驗(yàn)升級包,覆蓋原系統(tǒng)分區(qū),完成后重啟進(jìn)入新系統(tǒng)。
?適用場景:對升級時效性要求不高、存儲空間有限的設(shè)備(如入門級物聯(lián)網(wǎng)設(shè)備、舊款智能硬件)。
1.2 AB系統(tǒng):無縫升級邏輯
AB系統(tǒng)(雙分區(qū)系統(tǒng))通過“雙組分區(qū)+后臺升級”實(shí)現(xiàn)無縫更新,升級時設(shè)備可正常使用,重啟后直接切換到新系統(tǒng),核心特點(diǎn)是“零停機(jī)升級”。
?分區(qū)設(shè)計(jì):所有關(guān)鍵分區(qū)(如boot、system、vendor)均包含A/B兩組(如boot_a/boot_b、system_a/system_b),一組為“活躍分區(qū)”(當(dāng)前使用),一組為“備用分區(qū)”(待升級)。
?升級流程:
a.設(shè)備在Android主系統(tǒng)運(yùn)行時,后臺下載OTA包;
b.升級程序?qū)?/span>OTA包內(nèi)容寫入“備用分區(qū)”(不影響活躍分區(qū));
c.升級完成后提示用戶重啟,重啟時切換活躍分區(qū)(如從A組切換到B組);
d.若新分區(qū)啟動失敗,系統(tǒng)自動回滾到原活躍分區(qū),保障設(shè)備可用性。
?適用場景:對升級體驗(yàn)要求高的設(shè)備(如高端智能屏、工業(yè)控制設(shè)備),需額外占用約一倍存儲空間。
1.3核心邏輯對比圖

二、OTA升級開發(fā)核心技巧
無論是非AB還是AB系統(tǒng),OTA開發(fā)的關(guān)鍵在于“正確配置系統(tǒng)+生成合規(guī)升級包+適配升級介質(zhì)”,以下是實(shí)操技巧:
2.1系統(tǒng)配置技巧:按Android版本適配
AB系統(tǒng)默認(rèn)關(guān)閉,需從Android系統(tǒng)、U-Boot、Kernel三方面配置,不同Android版本配置差異如下:
|
配置維度
|
Android 12
|
Android 13
|
Android ≥14
|
|
Android系統(tǒng)配置
|
1. BoardConfig.mk中設(shè)BOARD_USES_AB_IMAGE := true;2.新增recovery.fstab_AB(添加slotselect參數(shù));3.導(dǎo)入AB配置并指定fstab文件
|
同Android 12,支持壓縮虛擬AB(需額外設(shè)BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION := true)
|
1.直接在BoardConfig.mk中開啟AB;2.壓縮虛擬AB僅支持GKI版本
|
|
U-Boot配置
|
芯片defconfig中添加CONFIG_ANDROID_AB=y
|
同Android 12
|
同Android 12
|
|
Kernel配置
|
無需額外配置
|
無需額外配置
|
無需額外配置
|
注意:虛擬AB功能(BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE := true)會降低升級性能,非必要不開啟;RK3566/3568/3588無trust分區(qū),配置時需刪除trust_a/trust_b相關(guān)項(xiàng)。
2.2 OTA包生成技巧:完整包與差異包
OTA包分為完整包(全量系統(tǒng),適合首次升級或跨版本升級)和差異包(僅含變更內(nèi)容,適合小版本迭代,體積小),生成命令需區(qū)分系統(tǒng)類型:
(1)完整包生成
|
系統(tǒng)類型
|
命令1(原生make)
|
命令2(build.sh腳本,更簡潔)
|
輸出路徑與重命名
|
|
非AB
|
make installclean && make -j16 && make dist -j16 && ./mkimage.sh ota
|
build.sh –AUCKuop
|
out/target/product/rkxxxx/下生成rkxxxx-ota-eng.root.zip,重命名為update.zip
|
|
AB
|
make installclean && make -j16 && make dist -j16 && ./mkimage_ab.sh ota
|
build.sh -ABUCKuop
|
同非AB,需確保首次編譯前執(zhí)行make clean
|
關(guān)鍵技巧:發(fā)布固件必須用mkimage.sh ota(非AB)或mkimage_ab.sh ota(AB),避免單獨(dú)燒錄Kernel,否則會導(dǎo)致差異包升級失敗。
(2)差異包生成(跨版本更新必備)
差異包需基于“前一版本素材包”和“當(dāng)前版本素材包”生成,步驟如下:
1.編譯v1版本固件,保存素材包:out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rkxxx-target_files-eng.xxx.zip→重命名為rkxxxx-target_files-v1.zip,并燒錄v1固件到設(shè)備;
2.修改代碼(Kernel/Android),編譯v2版本固件,保存素材包為rkxxxx-target_files-v2.zip;
3.執(zhí)行差異包生成命令(按Android版本區(qū)分):
?Android <13:./build/tools/releasetools/ota_from_target_files -v -i舊素材包路徑--block -p ./out/host/linux-x86新素材包路徑 輸出差異包路徑
?Android 13:需指定python3:python3 ./build/tools/releasetools/ota_from_target_files ...
?Android ≥14:直接調(diào)用工具:out/host/linux-x86/bin/ota_from_target_files ...
關(guān)鍵技巧:每發(fā)布一個版本,必須保存素材包(target_files.zip)和完整包,否則無法生成后續(xù)差異包。
2.3升級介質(zhì)適配技巧:SD卡/ USB盤/ Loader
除了OTA包,升級介質(zhì)(SD卡、USB盤)和Loader的適配也影響升級成功率:
?SD升級卡制作:用SDDiskTool工具,選擇“固件升級”模式,導(dǎo)入update.img,點(diǎn)擊“開始創(chuàng)建”;AB系統(tǒng)需先在工具config中配置UPGRADE_PROGRAM_PARTITION=boot_b。
?USB升級盤制作:先在U-Boot中開啟CONFIG_ROCKCHIP_USB_BOOT=y(以RK3588為例,修改rk3588_defconfig添加該配置),再用SDDiskTool制作,步驟同SD卡。
?Loader升級:正常OTA無需升級Loader,若需升級,將RKLoader.bin放入$(TARGET_DEVICE_DIR)/ota/loader目錄,OTA打包時會自動加入;AB系統(tǒng)需單獨(dú)生成update_loader.zip(編譯后在rockdev目錄下),通過Recovery命令升級。
三、調(diào)試要點(diǎn):Log、屏幕與存儲問題排查
OTA升級調(diào)試的核心是“精準(zhǔn)定位問題”,需重點(diǎn)關(guān)注Log輸出、屏幕顯示、存儲適配三大場景:
3.1 Log重定向:快速抓取升級日志
升級失敗時,需通過Log定位原因,可將Log輸出到串口、SD卡或/cache/recovery/目錄,配置方式:
?打開Log輸出:修改bootable/recovery/Android.bp,添加對應(yīng)宏定義:
?串口輸出:-DLogToSerial
?/cache/recovery/輸出:-DLogToCache
?SD卡輸出(生成recovery.log):-DLogToSDCard
?查看Log:升級后通過adb pull /cache/recovery/recovery.log(非AB)或adb pull /data/misc/update_engine/logs/update_engine.log(AB)獲取日志,重點(diǎn)排查“校驗(yàn)失敗”“分區(qū)掛載錯誤”等關(guān)鍵詞。
3.2屏幕旋轉(zhuǎn)適配:解決Recovery顯示異常
部分設(shè)備(如橫屏智能屏)在Recovery模式下屏幕顯示顛倒,需修改旋轉(zhuǎn)配置:
?配置路徑:device/rockchip/XXXX/BoardConfig.mk
?旋轉(zhuǎn)參數(shù):
?不旋轉(zhuǎn):TARGET_RECOVERY_DEFAULT_ROTATION := ROTATION_NONE
?旋轉(zhuǎn)90°:ROTATION_RIGHT
?旋轉(zhuǎn)180°:ROTATION_DOWN
?旋轉(zhuǎn)270°:ROTATION_LEFT
3.3存儲適配:NTFS格式與文件保存
?NTFS格式支持:默認(rèn)不支持NTFS的USB/SD卡,需先獲取NTFS授權(quán),再開啟Kernel中NTFS配置(CONFIG_NTFS_FS=y),否則升級包無法識別。
?關(guān)鍵文件保存:需持久化的文件(如升級狀態(tài)、配置參數(shù)),建議保存到/cache/recovery/Recovery_*路徑,該路徑格式化時不會被清除,避免升級中斷后配置丟失。
四、常見問題與解決方案
OTA升級中常遇到“升級包無法識別”“升級失敗回滾”“Loader升級失敗”等問題,以下是高頻問題的排查思路:
4.1升級包無法識別/校驗(yàn)失敗
|
問題現(xiàn)象
|
可能原因
|
解決方案
|
|
設(shè)備未彈出升級對話框
|
1.升級包未放在根目錄;2.包名不是update.zip;3. USB/SD卡未掛載
|
1.將update.zip放入USB/SD卡根目錄或/data/media/0/;2.插拔USB線或重啟設(shè)備觸發(fā)檢測;3. AB系統(tǒng)需用update_device.py腳本觸發(fā)升級
|
|
升級包校驗(yàn)失敗
|
1.包損壞或簽名錯誤;2.素材包版本不匹配(差異包)
|
1.重新生成OTA包,確保簽名密鑰正確(默認(rèn)key路徑:Android 13為device/rockchip/common/security/testkey,其他版本為build/make/target/product/security/testkey);2.差異包需確保基于前一版本素材包生成
|
4.2 AB系統(tǒng)升級回滾
|
問題現(xiàn)象
|
可能原因
|
解決方案
|
|
重啟后回滾到原系統(tǒng)
|
1.備用分區(qū)寫入錯誤;2.分區(qū)切換配置錯誤
|
1.查看update_engine.log,排查“寫入失敗”原因(如分區(qū)空間不足);2.檢查U-Boot中CONFIG_ANDROID_AB是否開啟,Android配置中slotselect參數(shù)是否添加
|
4.3 Loader升級失敗
|
問題現(xiàn)象
|
可能原因
|
解決方案
|
|
OTA包未包含Loader
|
Loader未放入$(TARGET_DEVICE_DIR)/ota/loader
|
1.執(zhí)行source build/envsetup.sh && lunch XXX后,用get_build_var TARGET_DEVICE_DIR確認(rèn)路徑;2.將RKLoader.bin放入該路徑下的ota/loader目錄,重新打包
|
|
AB系統(tǒng)Loader升級無響應(yīng)
|
未用專用升級包或命令
|
1.使用rockdev目錄下的update_loader.zip;2.執(zhí)行命令:adb push update_loader.zip /cache/ && adb shell "echo '--fw_rkloader=/cache/update_loader.zip' > /cache/recovery/command" && adb reboot recovery
|
五、總結(jié)
RK平臺OTA升級開發(fā)需圍繞“系統(tǒng)架構(gòu)選型→配置適配→包生成→調(diào)試排查”四個環(huán)節(jié),核心要點(diǎn)如下:
1.非AB系統(tǒng)適合輕量設(shè)備,AB系統(tǒng)適合無縫升級,需權(quán)衡存儲空間與體驗(yàn);
2.生成OTA包時,完整包用mkimage.sh/mkimage_ab.sh,差異包需保存素材包;
3.調(diào)試優(yōu)先抓Log,重點(diǎn)排查校驗(yàn)、分區(qū)、Loader三大類問題;
4.AB系統(tǒng)需注意雙分區(qū)切換與回滾機(jī)制,避免升級變磚。
掌握以上內(nèi)容,即可高效完成RK平臺OTA升級開發(fā),實(shí)現(xiàn)設(shè)備的穩(wěn)定迭代。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20442瀏覽量
333961 -
調(diào)試
+關(guān)注
關(guān)注
7文章
646瀏覽量
35647 -
OTA
+關(guān)注
關(guān)注
7文章
628瀏覽量
38285 -
Rockchip
+關(guān)注
關(guān)注
0文章
92瀏覽量
19577
發(fā)布評論請先 登錄
技術(shù)帖 | RK3568開發(fā)板的OTA升級教程
基于RK3288嵌入式板卡 Android7.1文檔索引資料分享
飛凌RK3399平臺Android鏡像版本升級的兩種處理方式-OTA 本地升級、OTA遠(yuǎn)程升級
RK3399平臺Android鏡像版本升級的兩種處理方式-OTA 本地升級、OTA遠(yuǎn)程升級
RK3399平臺Android鏡像版本升級的兩種處理方式-OTA 本地升級、OTA遠(yuǎn)程升級
RK3399平臺Android鏡像-OTA 本地升級、OTA遠(yuǎn)程升級
iTOP-RK3568開發(fā)板OTA升級包編譯
一文搞定RK平臺Wi-Fi/BT調(diào)試!從配置到問題解決全攻略
RK平臺Android設(shè)備OTA升級教程:從原理到U盤實(shí)操
一文打通Rockchip DP調(diào)試:從原理到實(shí)戰(zhàn),覆蓋RK3399/RK3576/RK3588全平臺
深入解析RK平臺GPIO驅(qū)動:從原理到調(diào)試,開發(fā)者必看指南
一文讀懂UEFI系統(tǒng):從應(yīng)用場景到RK平臺開發(fā)全攻略
吃透RK芯片parameter文件:從基礎(chǔ)配置到開發(fā)實(shí)戰(zhàn),避開底層所有坑
一文吃透RK平臺OTA升級開發(fā):從邏輯到調(diào)試的完整指南
評論