主页 > 开源代码  > 

使用Swupdate恢复模式更新嵌入式linux系统

使用Swupdate恢复模式更新嵌入式linux系统

在 SWUpdate 中,使用 恢复模式(Recovery Mode) 而不是 A/B 分区(A/B Seamless)模式 部署更新,通常需要以下步骤。恢复模式的核心思想是通过一个独立的恢复分区(或恢复系统)来管理更新,确保在主系统更新失败时能够回滚到已知的正常状态。


系统分区设计 恢复模式通常需要以下分区布局(示例): boot:引导分区(包含内核和 initramfs)。rootfs:主系统根文件系统。recovery:独立的恢复系统分区(包含恢复环境和 SWUpdate)。data:数据分区(可选,用于持久化数据)。swupdate:SWUpdate 的专用分区(存储更新镜像 .swu 文件,可选)。
配置 SWUpdate 恢复模式 (1) 启用恢复模式 在 SWUpdate 的配置文件(swupdate.conf)中,配置恢复模式: conf recovery enabled = true device = /dev/mmcblk0p3 恢复分区设备路径 mountpoint = /recovery 挂载点 bootloader = “uboot” 使用的引导加载程序(如 U-Boot)

(2) 配置镜像类型 在 .swimage 描述文件(如 sw-description)中,指定镜像类型为 recovery: conf images: { filename = “rootfs.ext4”; device = “/dev/mmcblk0p2”; 主系统根文件系统分区 type = “raw”; installed-directly = true; }

{ filename = "recovery.ext4"; device = "/dev/mmcblk0p3"; 恢复分区 type = "recovery"; 关键:标记为恢复镜像 }
构建恢复系统镜像 恢复系统需要包含: 最小化的 Linux 系统(如 BusyBox)。SWUpdate 可执行文件。必要的驱动和工具(如 mtd-utils、uboot-env)。启动脚本(例如自动检测并应用更新)。

示例恢复系统目录结构: /recovery ├── bin │ ├── sh │ └── swupdate ├── etc │ └── swupdate.conf └── init 恢复系统的初始化脚本


引导加载程序(Bootloader)配置 配置引导加载程序(如 U-Boot)支持恢复模式: 设置一个环境变量(如 boot_recovery)用于触发恢复流程。默认启动主系统,更新失败时自动切换到恢复系统。

U-Boot 示例配置: bash 正常启动主系统 setenv bootcmd “load mmc 0:1 ${loadaddr} zImage; bootm ${loadaddr}”

恢复模式启动命令 setenv boot_recovery “load mmc 0:3 ${loadaddr} zImage_recovery; bootm ${loadaddr}”

检测是否需要恢复 if test “${swupdate_status}” = “failed”; then run boot_recovery; else run bootcmd; fi


更新流程

触发更新: bash swupdate -i firmware.swu -v

SWUpdate 会将镜像写入主系统分区(rootfs)和恢复分区(recovery)。

重启并验证:

系统重启后,首先尝试启动主系统。如果主系统启动失败(例如无法挂载根文件系统),引导加载程序会切换到恢复分区。

恢复系统操作:

恢复系统启动后,自动检测到更新失败,并触发回滚: bash swupdate --recover回滚到之前的已知正常版本。
回滚机制 在恢复系统中实现回滚逻辑(例如从备份分区恢复)。可以通过在 data 分区保存状态文件(如 /data/swupdate.status)记录更新结果。

关键注意事项

分区冗余:

恢复分区和主系统分区需要足够的空间,确保更新过程中不会因空间不足失败。

原子性操作:

使用 installed-directly = true 确保镜像直接写入目标设备,避免中间状态。

恢复系统独立性:

恢复系统必须独立于主系统,避免依赖主系统的任何组件。

测试回滚流程:

强制模拟失败(如写入损坏的镜像),验证恢复系统是否能正确回滚。

总结

恢复模式适合资源有限的设备,无需双系统(A/B)的冗余开销。需要仔细设计分区布局、引导流程和回滚逻辑。与 A/B 模式相比,恢复模式需要更长的停机时间(需重启),但实现更简单。

如果需要进一步优化,可以结合 RAUC 或自定义脚本增强可靠性。

标签:

使用Swupdate恢复模式更新嵌入式linux系统由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用Swupdate恢复模式更新嵌入式linux系统