如何實現OpenHarmony的OTA升級
OTA簡介
隨著裝置系統日新月異,使用者如何及時獲取系統的更新,體驗新版本帶來的新的體驗,以及提升系統的穩定性和安全性成為了每個廠商都面臨的嚴峻問題。OTA(Over the Air)提供對裝置遠端升級的能力。升級子系統對使用者遮蔽了底層晶片的差異,對外提供了統一的升級介面。基於介面進行二次開發後,可以讓廠商的裝置(如IP攝像頭等)輕鬆支援遠端升級能力。
OTA升級包型別
升級包常見有3種型別,主要包括:全量升級包、差分升級包以及變分割槽升級包。
• 全量升級包:升級包中只包括映象全量升級相關資料,用於映象全量升級;
• 差分升級包:升級包中只包括映象差分升級相關資料,用於映象差分升級;
• 變分割槽升:升級包中包括分割槽表、映象全量資料,用於變分割槽處理和變分割槽後的映象恢復。
適用範圍
OpenAtom OpenHarmony(簡稱“OpenHarmony”) 3.1 Release不支援富裝置升級,本章節所有例項在OpenHarmony 3.2 Beta3上驗證,升級方式為全量升級,所用開發板為誠邁科技基於RK3568設計的HCPAD-100開發板以及OpenHarmony主幹使用的DAYU200開發板。可使用HCPAD-100開發板或DAYU200開發板驗證,patch已提供,其他開發板可能存在差異,請自行驗證。
OTA升級步驟
1. 製作升級包(update_packaging_tools需切換至master分支)
1.1 建立目標版本(target_package)資料夾,檔案格式如下:
1.2 將待升級的元件,包括映象檔案(例如:system.img)等放入目標版本資料夾的根目錄下,代替上文結構中的{component_N}部分。
1.3 填寫“updater_config”資料夾中的元件配置檔案。
1.3.1 配置“updater_config”資料夾中當前升級包支援的產品list:BOARD.list。
RK3568
1.3.2 配置“updater_config”資料夾中當前升級包所支援的版本範圍:VERSION.mbn。
版本名稱格式:RK3568 QP1A.XXXXXX.{大版本號(6位)}.XXX{小版本號(3位)}。例如:RK3568 QP1A.190711.020。名稱中“190711”為大版本號,“020”為小版本號。
配置例如下:
RK3568 QP1A.190711.001
1.4 建立“OTA.tag檔案”,內容為OTA升級包的魔數,固定如下:
package_type:ota1234567890qwertw //可選
1.5 updater_binary二進位制檔案
updater_binary該檔案為系統編譯自動生成,路徑:
out/rk3568/packages/phone/updater/bin/updater_binary
1.6 updater_specified_config.xml配置
<?xml version="1.0"?> <package> <head name="Component header information"> <info fileVersion="01" prdID="rk3568" softVersion="3.2.2" date="2022-12-07" time="16:25">head info</info> </head> <group name = "Component information"> <component compAddr="ota_tag" compId="27" resType="5" compType="0" compVer="1.0">OTA.tag</component> <component compAddr="vendor" compId="12" resType="05" compType="0" compVer="1.0">vendor.img</component> <component compAddr="system" compId="12" resType="05" compType="0" compVer="1.0">system.img</component> </group> </package>
1.7 執行升級包製作命令
python build_update.py ./target_package/ ./output_package/ -pk ./rsa_private_key2048.pem
• ./target_package/:指定target_package路徑。
• ./output_package/:指定升級包輸出路徑。
• -pk ./rsa_private_key3072.pem:指定私鑰檔案路徑。
• 此處可以使用系統自帶的證照:
device/board/hisilicon/hispark_taurus/linux/updater/config/rsa_private_key2048.pem
注:OpenHarmony 3.2 Beta3分支上base/update/packaging_tools倉製作updater升級包校驗有BUG,會失敗。開發者已經在master分支上修復,製作升級包前請同步master上最新程式碼。
2.配置伺服器
搭建搜包伺服器(OTA搜包伺服器採用OpenSSL協議傳輸資料,所以必須使用HTTPS解析),伺服器原始碼見附件sslserver目錄。
3.配置網路
3.1 配置客戶端伺服器資訊
為了方便除錯,我們提供了本地可配置檔案修改方案(patch見附件)。伺服器搭建完成後,只需要在開發板配置服務地址,搜包地址,埠號等資訊即可完成搜包,下載等功能。
配置路徑:/system/etc/serverInfo.json
{ "serverIp": "115.126.57.xx", //伺服器ip "serverSearch": "115.126.57.xx", //搜包伺服器 "serverPort":9556 //埠號 }
3.2 Beta3分支預設route路由是關閉的,只要先開啟route才能連線外網。搜包前先要替換toybox檔案,配置好的toybox已在附件中提供,直接透過hdc_std file send toybox(路徑) /system/bin/ 替換即可。
3.3 匯入signing_cert.crt證照
hdc_std file send signing_cert.crt(路徑) /data/ota_package
3.4 配置路由地址
hdc_std shell
route add default gw 10.51.11.1 dev eth1 //10.51.11.1是閘道器地址,根據實際情況配置,如果不知道如何檢視閘道器,請聯絡你們的網路管理員。
ping //ping確認是否可以聯網
3.4 為了方便觀察效果,可透過hdc_std shell power-shell setmode 602命令,將螢幕設定為常亮。
4. 升級客服端程式碼例項
需要許可權:
ohos.permission.UPDATE_SYSTEM和ohos.permission.INTERNET,系統許可權需要使用FULL_SDK.
4.1 獲取線上升級物件
//呼叫方包名,若在設定中插入升級,可新增為設定應用的包名 const PACKAGE_NAME = "com.ohos.ota.updateclient"; let upgradeInfo = { upgradeApp: PACKAGE_NAME, businessType: { vendor: "HZOS", subType: 1 } } page.data.updater = client.getOnlineUpdater(upgradeInfo);
4.2 獲取版本資訊
4.2.1 獲取升級任務資訊
page.data.updater.getTaskInfo().then(taskInfo => { //...}); //返回任務資訊物件
4.2.2 檢查新版本資訊
page.data.updater.checkNewVersion().then(data => { //... }); //返回搜包結果物件
4.2.3 獲取新版本資訊
page.data.updater.getNewVersionInfo().then(data => { //... }); //返回新版本資訊物件
4.3 版本下載
呼叫download(versionDigestInfo, downloadOptions) 下載新版本。
let versionDigestInfo = { versionDigest: "versionDigest" // 檢測結果中的版本摘要資訊 }; let downloadOptions = { allowNetwork: 1, order: 1 } page.data.updater.download(versionDigestInfo, downloadOptions).then(result => { console.info(TAG + "updater download result: " + JSON.stringify(result)); }).catch(error => { console.error(TAG + "updater download error: " + JSON.stringify(error)); });
4.4 安裝新版本
呼叫upgrade(versionDigestInfo, upgradeOptions),安裝新版本,開發板會重啟進入系統升級頁面,待系統升級完成。
clickInstall: function () { if (page.data.pageType == "downSuccess") { // 下載成功,開始升級 page.upgrade(); } }, upgrade() { if (page.data.updater == undefined) { //... return; } page.data.updater.on(eventClassifyInfo, eventInfo => { console.info(TAG + "upgrade eventInfo: " + JSON.stringify(eventInfo)); //... }); let upgradeOptions = { order: 2 //安裝 } page.data.updater.upgrade(versionDigestInfo, upgradeOptions).then(result => { console.info(TAG + "upgrade result: " + JSON.stringify(result)); }).catch(error => { console.error(TAG + "upgrade error: " + JSON.stringify(error)); }); }
進入updater模式,升級過程中會提示“正在更新 請勿重啟”。
升級完成後頁面會提示“升級完成”,之後重啟。
升級完成後,再次校驗當前版本資訊,提示當前已是最新版本。
OTA升級除錯
正常模式:在該路徑下data/updater/log獲取updater_log、updater_stage_log、error_code.log三份日誌檔案。
updater模式:在該路徑下tmp/獲取updater.log、updater_stage.log、error_code.log三份日誌檔案。
updater.log搜尋關鍵字fail即可快速定位問題。
總結
OpenHarmony OTA升級主要是搭建搜包伺服器,製作升級包,瞭解OTA下載包管理,包解析,包管理的程式碼邏輯。同時,對於常見問題知道如何快速定位!
參考連結
升級客戶端應用、伺服器原始碼
基於OpenHarmony 3.2 Beta3分支原始碼的patch
參考文獻
https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-update.md/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2934165/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OTA升級更新系統預設設定
- Android OTA升級(一)之Makefile檔案分析Android
- OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升級策略
- 揭秘:如何為 Kubernetes 實現原地升級
- 物聯網裝置OTA軟體升級之:升級包下載過程之旅
- nginx實現平滑升級Nginx
- 深入解析阿里 PouchContainer 如何實現容器原地升級阿里AI
- 安全啟動和安全升級的實現
- 新基建棋局下,智慧交通如何實現產業升級?產業
- java實現“資料平滑升級”Java
- 邏輯升級,深度解析如何實現業務中的且或元件元件
- 如何升級fedora的版本
- JAVA 實現《超級瑪麗升級版》遊戲Java遊戲
- JuiceFS CSI:Mount Pod 的平滑升級及其實現原理UI
- 使用 tableflip 實現應用的優雅熱升級
- 如何升級 pip
- 有關 TiDB 升級的二三事——教你如何快樂升級TiDB
- 批發分銷行業如何實現數字化轉型升級?行業
- IBM:消費品企業如何實現“智造”升級(附下載)IBM
- 家居企業如何通過網際網路實現營銷升級?
- Unity TA總監王靖:Unity如何實現美術畫質升級?Unity
- zabbix5.0升級6.0,實現原生主備的同時實現高可用
- Twitter如何升級Hadoop+Kafka架構實現實時處理數十億個事件?HadoopKafka架構事件
- Nginx如何升級OpensslNginx
- flyway實現java 自動升級SQL指令碼JavaSQL指令碼
- 智慧升級:AntSK教你如何讓聊天機器人實現智慧聯網操作機器人
- ChainDesk:鏈碼的其它操作-實現對鏈碼的打包升級AI
- 建材業內憂外患的局面,如何利用網際網路實現產業升級再造?產業
- 關閉chrome自動升級的教程 chrome如何取消自動升級Chrome
- AWS RDS強制升級的應對之道——版本升級的最佳實踐
- (十二).NET6 + React :升級!升級!還是***升級!!!+ IdentityServer4實戰ReactIDEServer
- 文旅夜遊如何實現多業態驅動不斷優化升級優化
- .net自定義錯誤頁面實現升級篇
- 基於Vue實現拖拽升級(九宮格拖拽)Vue
- Redis分散式鎖升級版RedLock及SpringBoot實現Redis分散式Spring Boot
- 用node實現一個簡單的聊天室—— 升級版
- OpenHarmony整合OCR三方庫實現文字提取
- 紡織服裝產業實現智慧製造升級產業