開源項目 OpenHarmony是每個人的 OpenHarmony

黃騰坤
誠邁科技驅動開發工程師

萬帆
誠邁科技應用開發工程師
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升級步驟


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配置
head info OTA.tag vendor.img system.img
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 OpenHarmony 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 www.huawei.com //ping確認是否可以聯網

需要權限:
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 => {
//...
});//返回搜包結果對象

page.data.updater.getNewVersionInfo().then(data => {
//...
});//返回新版本信息對象

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));
});

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));
});
}




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下載包管理,包解析,包管理的代碼邏輯。同時,對于常見問題知道如何快速定位!參考鏈接
升級客戶端應用、服務器源碼https://gitee.com/wanfan_yyds/upgrade3.2
基于OpenHarmony 3.2 Beta3分支源碼的patchhttps://gitee.com/wanfan_yyds/update_updateservice/commit/44e28bb1d8d84b200348c5ad03f9f4ce3bad3e1e
https://gitee.com/wanfan_yyds/update_updater/commit/0fe02cec5b21bd3f9a47c4e5a0fd0e5790088703
參考文獻https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-update.md/
https://gitee.com/openharmony/update_updater
https://gitee.com/openharmony/update_updateservice
https://gitee.com/openharmony/update_update_app
https://gitee.com/openharmony/update_packaging_tools
原文標題:如何實現OpenHarmony的OTA升級
文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
-
鴻蒙
+關注
關注
57文章
2467瀏覽量
43628 -
OpenHarmony
+關注
關注
26文章
3804瀏覽量
17794
原文標題:如何實現OpenHarmony的OTA升級
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
有沒有大神使用cubeMX生成初始代碼開發實現通過USB(HID)進行OTA升級功能的?
OTA軟件升級管理系統

比亞迪仰望U8迎來重磅OTA升級
ESP8266 OTA升級失敗的原因?
ESP8266 OTA升級不成功的原因?
請問esp32 ota升級如何獲取更新進度?
ESP-IDF4.4 OTA升級失敗的原因?
ESP IDF OTA升級失敗的原因?
能否使用cyw43439對MCU(STM32h745ziq)進行OTA升級?
ZDP1440系列小技巧—如何OTA差分升級顯示素材?

評論