工控单板 Linux 系统使用指南|存储配置、升级与 OverlayFS 恢复出厂实操(三)
4.1.3 编译生成OTA升级包
由于生成OTA升级包需要用到Simg2img工具,请执行如下命令安装相应依赖软件。
Host#sudo apt-get install android-sdk-libsparse-utils

请确保已按照《系统开发手册》的“编译Recovery”、“编译生成系统镜像”章节正确编译生成包含Recovery分区的完整系统镜像。修改"sw-description"或"sw-subimgs.cfg"后,需在LinuxSDK源码目录下,执行如下命令,重新生成OTA升级包。
备注:如需编译生成eMMC配置单板机使用的OTA升级包,请先参考《系统开发手册》“LinxuSDK配置与编译”章节重新编译SDK。
Host#cd /home/tronlong/T153/aiot-t153-linux-v1.0/
Host#source build/envsetup.sh //加载Tina构建环境
Host#swupdate_pack_swu //生成对应的OTA升级包




生成的OTA升级包ubuntu_t153_sbc-tlt153-nand.swu位于LinuxSDK源码"out/t153/sbc-tlt153-nand/ubuntu/swupdate/"目录下。
备注:eMMC版本OTA升级包ubuntu_t153_sbc-tlt153-emmc.swu位于LinuxSDK源码"out/t153/sbc-tlt153-emmc/ubuntu/swupdate/"目录下。
Host#cd out/t153/sbc-tlt153-nand/ubuntu/swupdate/
Host#ls


生成的OTA包体积因板级配置、打包内容的不同,会而有所差异,以实际为准,可以使用ls -lh命令查看OTA升级包大小。


4.1.4使用OTA升级包升级Linux系统
请使用网线将单板机对应网口、PC机连接至同一个路由器。在Ubuntu系统执行如下命令查看PC机IP地址。
Host# ifconfig

执行如下命令,在OTA升级包所在目录启动HTTP服务。
Host# python3 -m http.server --bind 0.0.0.0

进入单板机系统,执行如下命令,使用wget从Ubuntu下载OTA升级包到"/mnt/UDISK"目录下,命令中192.168.12.54为Ubuntu IP地址。
Host# wget -O /mnt/UDISK/ubuntu_t153_sbc-tlt153-nand.swu http:// 192.168.12.54:8000/ubuntu_t153_sbc-tlt153-nand.swu



为避免下载OTA升级包不完全导致升级失败,需等待wget工具打印“saved [数据长度/数据长度]”,并使用ls -lh命令查看OTA升级包体积,确认与Ubuntu端一致后,方可进行OTA升级。
Host# ls -lh /mnt/UDISK/ubuntu_t153_sbc-tlt153-nand.swu

执行如下命令,进行OTA升级。该命令仅需执行一次,后续upgrade_kernel、upgrade_usr阶段由Recovery系统内的脚本S99swupdate_autorun,根据env中保留的swu_param变量自动执行余下升级步骤。OTA升级完整日志信息保存在"/mnt/UDISK/swupdate.log"文件中。
备注:升级过程中,单板机将会重启两次,第一次重启是为了进入Recovery模式进行系统升级,第二次重启是系统升级完成后单板机重启。
Target# swupdate_cmd.sh -i /mnt/UDISK/ubuntu_t153_sbc-tlt153-nand.swu -e stable,upgrade_recovery



系统升级完成,单板机重新启动后将自动登录系统,打印信息如下。

升级过程日志信息保存在"/mnt/UDISK/swupdate.log"文件中。

4.2 通过USB方式升级
本章节演示通过U盘进行OTA升级系统,通过U盘进行OTA升级可以实现部分分区升级或者完整Linux系统镜像升级。
备注:U盘格式只支持FAT,推荐使用FAT32。

4.2.1 制作系统升级U盘
升级U盘目录结构如下图所示,update目录用于存放升级所需的文件,auto_update.txt用于定义升级规则,目录下存放的fex文件需与auto_update.txt中的定义匹配,否则升级过程会产生报错。update目录名称以及auto_update.txt文件名固定。

uto_update.txt文件内容如下:
#请根据所需升级存储介质的固件,选择对应启动模式,例如升级eMMC固件,请从eMMC启动系统
#(1)升级eMMC/eMMC配置系统启动卡固件
#sunxi_flash write update/boot-resource.fex boot-resource
#sunxi_flash write update/env.fex env
#sunxi_flash write update/env.fex env-redund
#sunxi_flash write update/boot.fex boot
#sunxi_flash write update/dtbo.fex dtbo
#sunxi_flash write update/dtbo.fex dtbo-r
#sunxi_flash write update/rootfs.fex rootfs
#(2)升级eMMC完整固件
#sunxi_flash write update/t153_linux_sbc-tlt153-nand_uart0.img firmware
#(3)升级NAND FLASH固件
#sunxi_flash write update/boot-resource.fex boot-resource
#sunxi_flash write update/env.fex env-redund
#sunxi_flash write update/boot.fex boot
#sunxi_flash write update/rootfs-ubifs.fex rootfs
#(4)升级NAND FLASH完整固件
#sunxi_flash write update/t153_linux_sbc-tlt153-nand_uart0.img firmware
#(5)升级NAND FLASH配置Linux系统启动卡固件
#sunxi_flash write update/boot-resource.fex boot-resource
#sunxi_flash write update/env.fex env
#sunxi_flash write update/boot.fex boot
#sunxi_flash write update/rootfs-ubifs.fex rootfs
%

auto_update.txt升级命令格式为"sunxi_flash write ",其中:
sunxi_flash write:前置命令(不可变)
:下载文件的绝对路径
:文件要下载到的分区名(根据sys_partition.fex来确定具体分区名)
请确保已按照《系统开发手册》正确编译LinuxSDK,并打包镜像,可用的升级文件位于LinuxSDK源码"out/pack_out/"目录下。


4.2.2 U盘升级演示
本次以NAND FLASH配置单板机进行U盘升级演示,请取消auto_update.txt文件中NAND FLASH固件升级栏目下"sunxi_flash write update/boot.fex boot"行前的注释。

将制作好的升级U盘连接至单板机任一USB 2.0 HOST接口,单板机上电,在U-Boot倒计时结束前长按"Ctrl + C"进入U-Boot命令行模式,在U-Boot命令行输入如下命令执行U自动升级检查,系统将自动根据auto_update.txt中定义的规则进行升级。

U-Boot# auto_update_check

系统升级完成,单板机重新启动后将自动登录单板机系统,打印信息如下。

单独升级内核,会导致内核版本和文件系统中内核模块版本不一致,从而无法自动加载模块,可参考《系统开发手册》“Kernel开发”章节,替换相同版本的内核模块。
目前支持U盘升级的固件如下表所示。

5 OverlayFS使用说明
本章节演示通过Overlayrs特性实现恢复出厂设置功能,将文件系统恢复至初始状态。
5.1 OverlayFS简介
OverlayFS是Linux内核中的一种联合挂载文件系统挂载服务,通过合并多个目录最终实现分层存储管理。
OverlayFS文件系统由下层目录(Lowerdir)、上层目录(Upperdir)、工作目录(Workdir)和合并目录(Merged)构成。通过写时复制机制优先展示上层文件,利用whiteout机制和opaque目录实现文件删除功能。

具体实现原理如下图所示:


更多详情可访问官方网站:https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html。
在支持OverlayFS的设备上,系统采用分层存储机制保护rootfs分区。rootfs分区以只读方式挂载至"/root-ro"(lower层),确保原始系统镜像免受意外修改或损坏。并且,所有用户修改均定向写入userdata分区的"/userdata/rootfs_overlay"(upper层),而非直接操作rootfs分区。
Target#mount

若在"/root-ro/"(lower层)目录中创建文件,会提示只读,无法写入。
Target#cd /root-ro/
Target#touch test

若在用户目录(merge层)中,则可以创建,写入文件。
Target#cd /root/
Target#echo "hello world" > test.txt
Target#cat test.txt

5.2 恢复出厂设置功能演示
本章节演示通过恢复出厂设置操作将文件系统回溯至初始状态。此操作可彻底清除用户数据及自定义配置,使系统重置为最近一次完成系统镜像固化的状态。
请先参考本文档中的“网络配置说明”章节,配置任意网口的静态IP。以下以配置LAN1网口静态IP作为演示。配置完成后,可以看到LAN1网口的IP地址被修改为192.168.11.99。当恢复出厂设置时,该配置将失效,恢复为初始的动态获取IP。


Overlay通过联合挂载技术将"/root-ro"(lower层)和"/userdata/rootfs_overlay"(upper层)合并为一个视图(merge层),使lower层对用户不可见。当修改文件时,系统自动执行写时复制机制,若文件存在于lower层,系统会先将其复制到upper层,随后仅对upper层的副本进行修改;若文件仅存在于upper层(如用户新增文件),则直接在该层操作。
执行如下命令,进行恢复出厂设置。在这个过程中,单板机将进入Recovery模式,进行格式化处理,其中"/root-ro"(lower层)的内容将得到保留,格式化完成之后系统将自动引导进入文件系统。
Target# update

进入系统后,可查看到静态IP配置修改已清除,"/etc/systemd/network/eth0.network"LAN1网络配置相关文以及IP地址成功恢复成初始状态。
Target# cat /etc/systemd/network/eth0.network //查看eth0.network文件内容



浙公网安备 33010602011771号