环境
系统版本:OpenHarmony 4.0.10.13
平台设备:rk3588
背景
由于项目快速迭代,设备软件版本需经常升级更新,保持一致性。官方默认使用RKDevTool.exe工具来升级OpenHamrony rk35x8镜像,rk3568烧录OpenHarmony指导文档
但存在以下痛点:
- 如要手动按按键进入loader模式
- 需要导入config.cfg,配置镜像路径。虽然可以保存,但仍然不够效率。
为了解决以上两个痛点,提升OpenHarmony镜像升级的便捷性和效率,采用.bat工具来自动升级镜像。
.bat工具升级镜像步骤
- 检查hdc环境是否正常
- 检查设备连接数量,需唯一
- 使用upgrade_tool进入loader 模式
- 获取LocationID
- 依次升级镜像文件(
文件路径避免使用空格、中文、%¥#等特殊字符
) - 重启设备
.bat工具使用步骤
- 从OpenHarmony源码中获取upgrade_tool工具
源码路径:developtools/integration_verification/DeployDevice/resource/RK3568_tool/upgrade_tool.exe - 将upgrade_tool.exe、OhosImagesUpgradeTool.bat工具和编译生成的镜像文件夹images放在同一目录下。
- 鼠标双击OhosImagesUpgradeTool.bat
- 设备自动进入升级模式,升级完成后自动开机。
.bat 源码
注意:请根据镜像文件实际路径修改imgPath
@echo off
setlocal enabledelayedexpansion
echo ====================================
echo Start Upgrade OpenHarmony Images
echo ====================================
::检查hdc环境
where hdc >nul 2>&1
if %errorlevel% equ 0 (
echo hdc env is OK.
) else (
echo hdc env isn't NG. pls config hdc first!
pause
)
::检查设备连接数量,需唯一
set count=0
for /f "tokens=*" %%a in ('hdc list targets') do (
set /a count+=1
)
::only need 1 connected device
::echo count=%count%
if %count% gtr 1 (
echo More than one device connected. Please check the target device!
pause
) else (
for /f "tokens=*" %%i in ('hdc list targets') do (
set "serialNumber=%%i"
goto :break
)
:break
echo found device connected. Serial number is: %serialNumber%
set "DEVICE_SERIAL_NUMBER=%serialNumber%"
)
::进入loader模式,准备升级镜像
hdc -t %DEVICE_SERIAL_NUMBER% shell reboot loader
echo Enter loader mode ...
::delay 3s to enter loader mode
timeout /t 3 /nobreak >null
del .\null
::检查loader模式
for /f "tokens=*" %%a in ('.\upgrade_tool.exe LD ^| findstr /c:"Mode=Loader"') do (
set "output=%%a"
goto checkMode
)
:checkMode
if "!output!"=="" (
echo Error: The device is not in Loader mode, Pls check!
pause
) else (
echo Device is in Loader mode.
)
::获取LocationID
set "LocationID="
for /f "tokens=2" %%i in ('.\upgrade_tool.exe LD ^| findstr "LocationID"') do (
set "result=%%i"
)
::echo result is: %result%
::filter LocationID
for /f "tokens=4 delims==" %%j in ("%result%") do (
set "LocationID=%%j"
)
::echo LocationID is: %LocationID%
::升级各镜像文件
::镜像文件夹路径,可修改为源码镜像生成路径
set "imgPath=.\images"
.\upgrade_tool.exe -s %LocationID% UL %imgPath%\MiniLoaderAll.bin -noreset
.\upgrade_tool.exe -s %LocationID% DI -p %imgPath%\parameter.txt
.\upgrade_tool.exe -s %LocationID% DI -uboot %imgPath%\uboot.img
.\upgrade_tool.exe -s %LocationID% DI -resource %imgPath%\resource.img
.\upgrade_tool.exe -s %LocationID% DI -boot_linux %imgPath%\boot_linux.img
.\upgrade_tool.exe -s %LocationID% DI -ramdisk %imgPath%\ramdisk.img
.\upgrade_tool.exe -s %LocationID% DI -system %imgPath%\system.img
.\upgrade_tool.exe -s %LocationID% DI -vendor %imgPath%\vendor.img
.\upgrade_tool.exe -s %LocationID% DI -updater %imgPath%\updater.img
.\upgrade_tool.exe -s %LocationID% DI -userdata %imgPath%\userdata.img
::兼容升级定制分区
if exist %imgPath%\data1.img (
.\upgrade_tool.exe -s %LocationID% DI -data1 %imgPath%\data1.img
)
echo ====================================
echo Upgrade OpenHarmony Images Success
echo ====================================
::重启设备
.\upgrade_tool.exe -s %LocationID% RD
pause