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 模式完成安全升级。

 

 

五、差分包制作

image

 

注意
新的update.img需要为OTA image,而不是下载固件使用的update.img,即只包含要升级的分区
旧的固件,建议使用包含所有分区的update.img,至少应该包含需要差分的分区
旧的固件务必要与目标机器上的固件相同
使用示例:
cd tools/linux/Linux_Diff_Firmware/
./mk-diff-ota.sh update_old.img update_new.img update_diff.img
生成的update_diff.img即可用于OTA升级
 

image

 需要安装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目录

image

 

七、挂载/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,但发现内存大小不对:

image

 原因如下:

  

image

 需要扩容,在/etc/rc.local中添加:

resize2fs /dev/mmcblk0p7
resize2fs /dev/mmcblk0p8

此时再看内存大小,发现已经正常:

image

 

 
posted @ 2026-05-30 10:58  M-kobe  阅读(7)  评论(0)    收藏  举报