rk3588 Ubuntu系统OTA升级
一.recovery配置
1. source envsetup.sh rockchip_rk3588_recovery
2. make menuconfig
make savedefconfig
3. make recovery-dirclean && make recovery
4. ./build.sh recovery
Target packages ---> Hardware Platforms ---> [*] Rockchip Platform ---> [*] Rockchip Platform --->
BR2_PACKAGE_RECOVERY=y #开启升级相关功能 BR2_PACKAGE_RECOVERY_USE_UPDATEENGINE=y #使用新升级程序,不配置则默认使用原有升级流程 BR2_PACKAGE_RECOVERY_RECOVERYBIN=y #开启recovery bin 文件 BR2_PACKAGE_RECOVERY_UPDATEENGINEBIN=y #编译新升级程序 BR2_PACKAGE_RECOVERY_NO_UI=y #带屏的产品,这项不用设置
编译完会生成执行文件:/buildroot/output/rockchip_rk3588_recovery/target/usr/bin/updateEngine
debian或者Ubuntu系统需要对应拷贝到usr/bin/updateEngine目录下,并给777权限。
二、差分升级
升级包制作:
cd tools/linux/Linux_Diff_Firmware/
./mk-diff-ota.sh update_old.img update_new.img update_diff.img
三、添加版本号
新建文件sudo vim /etc/device_info
PRODUCT_NAME=Robit PRODUCT_MODEL=RK3588 BUILD_ID=Robit-OS-V00.00.01-20260115
source /etc/device_info
echo $BUILD_ID
四、升级
本地升级:
updateEngine --image_url=/userdata/update.img --misc=update \ --savepath=/userdata/update.img --reboot &
远程升级:
updateEngine --image_url=http://192.168.0.190/recovery/update.img \
--misc=update \
--savepath=/userdata/update.img \
--reboot &
--image_url:远程固件地址(HTTP/HTTPS 协议均可);
--misc=update:指定进入升级模式;
--savepath:固件本地保存路径(建议/userdata/update.img,与 recovery 模式默认挂载路径一致,避免检索失败);
--reboot:升级后自动重启进入 recovery 模式完成后续操作。
单独更新某个分区:
uboot:
updateEngine --image_url=/userdata/update.img --misc=update --savepath=/userdata/update.img --partition=0x200000 --reboot &
kernel:
updateEngine --image_url=/userdata/update.img --misc=update --savepath=/userdata/update.img --partition=0x800000 --reboot &
rootfs+recovery:
updateEngine --image_url=/userdata/update.img --misc=update --savepath=/userdata/update.img --partition=0x60000 --reboot &
# 0x20000(rootfs)+0x40000(recovery)的组合值
•特殊说明:rootfs 为运行中的文件系统,直接写入会导致异常,需同步升级 recovery 分区,通过 recovery 模式完成安全升级。
五、差分包制作

cd tools/linux/Linux_Diff_Firmware/
./mk-diff-ota.sh update_old.img update_new.img update_diff.img

需要安装bsdiff:sudo apt-get install bsdiff
六、Ubuntu添加by-name
/usr/lib/udev/rules.d/61-persistent-internal-storage.rules
# persistent internal storage links(Android style): /dev/block/by-name # # based on udev's 60-persistent-storage.rules ACTION=="remove", GOTO="persistent_storage_end" SUBSYSTEM!="block", GOTO="persistent_storage_end" # ignore removable devices ATTRS{removable}=="1", GOTO="persistent_storage_end" # ignore SD Cards ATTRS{TYPE}=="SD", GOTO="persistent_storage_end" # honor various types of names ENV{ID_PART_ENTRY_NAME}=="?*", \ SYMLINK+="block/by-name/$env{ID_PART_ENTRY_NAME}", GOTO="persistent_storage_end" ENV{PARTNAME}=="?*", SYMLINK+="block/by-name/$env{PARTNAME}", \ GOTO="persistent_storage_end" ENV{ID_FS_LABEL}=="?*", SYMLINK+="block/by-name/$env{ID_FS_LABEL}", \ GOTO="persistent_storage_end" KERNEL=="mtdblock*", TEST=="device/name", SYMLINK+="block/by-name/$attr{device/name}" LABEL="persistent_storage_end"
创建成功后。可以看到/dev/block新增了by-name目录

七、挂载/userdata和/oem,并扩容
修改/etc/fstab如下:
# UNCONFIGURED FSTAB FOR BASE SYSTEM PARTLABEL=oem /oem ext4 defaults 0 2 PARTLABEL=userdata /userdata ext4 defaults 0 2 或者 #/dev/mmcblk0p7 /oem ext4 defaults 0 2 #/dev/mmcblk0p8 /userdata ext4 defaults 0 2
这样,就会在根目录下创建/userdata和/oem,但发现内存大小不对:

原因如下:

需要扩容,在/etc/rc.local中添加:
resize2fs /dev/mmcblk0p7
resize2fs /dev/mmcblk0p8
此时再看内存大小,发现已经正常:


浙公网安备 33010602011771号