4.4.9. U 盘升级功能

4.4.9.1. 概述与介绍

简介

U 盘升级功能让用户可以通过在设备开机时插入 U 盘,自动完成系统镜像的更新。此功能无需复杂的操作,便于用户快速更新到最新的系统版本,提升使用体验和效率。

必要条件

  • U 盘必须使用 FAT32 格式的文件系统。

  • 升级所需的镜像文件应放置在 U 盘根目录下的 update_img 目录中。

  • 确保开发板 Uboot 能够正常启动,以支持系统顺利升级。

  • 设备在插入 U 盘后,需通过冷启动(断电重启)方式,才能进入 U 盘升级模式。

  • 当前版本支持全镜像升级和单分区升级。

4.4.9.2. 功能介绍

升级类型

U 盘升级功能支持全镜像升级和单分区升级两种方式。

  • 全镜像升级 :将整个系统镜像文件(包括 emmc_disk.img、nand_disk.img )放置在 U 盘的 update_img 目录下,设备开机后,U 盘自动识别并升级整个系统镜像。

    • 仅支持 nand_disk.img 和 emmc_disk.img 作为镜像文件名称。

  • 单分区升级:将单个分区的镜像文件(如 boot.img、system.img 等)放置在 U 盘的 update_img 目录下,设备开机后,U 盘自动识别并升级单个分区的镜像文件。

    • 仅支持 boot.img、system.img、userdata.img、hbre.img、app.img 作为镜像文件名称。

升级方法

步骤1:准备升级镜像文件

将升级所需的镜像文件放置在 U 盘的 update_img 目录内,文件名必须符合以上要求。

步骤2:插入U盘

将 U 盘插入设备的 USB 接口,并进行冷启动。

步骤3:开机

设备开机后,U 盘将被自动识别,开始升级系统镜像。

升级过程将持续一段时间,升级过程中,设备将无法正常使用,请耐心等待。

升级完成后,设备将自动重启,系统镜像将更新为最新版本。

4.4.9.3. 移植指南

本章介绍 U 盘升级功能在 Uboot 下的实现代码。开发者只需确保 Uboot 正确配置和准备必要的镜像文件,同时确保 FAT32 格式的 U 盘可用即可。

代码路径

./common/Kconfig
./uboot/cmd/Makefile
./uboot/cmd/usb_autoupdate.c
./uboot/arch/arm/mach-horizon/x5/x5_board.c
  • Kconfig :添加 CONFIG_USB_UPDATE 选项,以控制是否编译 U 盘升级功能。

  • Makefile :添加编译 U 盘升级功能。

  • usb_autoupdate.c :实现了 U 盘升级功能的核心代码。

  • x5_board.c :实现了开机启动时启用 U 盘升级功能。

代码集成

  1. 复制核心代码:将 usb_autoupdate.c 文件复制到 ./uboot/cmd/ 目录下。

  2. 修改 Makefile 文件:在 Makefile 文件中,添加 usb_autoupdate.oobj-$(CONFIG_USB_UPDATE) 变量中。

    Makefile.png

  3. 修改 x5_board.c 文件:在 x5_board.c 文件中,添加 usbupdate 命令,并通过 CONFIG_USB_UPDATE 宏来控制是否编译 U 盘升级功能。

    x5_board.png

  4. 修改 Kconfig 文件:在 Kconfig 文件中,添加 CONFIG_USB_UPDATE 选项。

    Kconfig.png

  5. Uboot 需配置相应参数,以支持 U 盘自动升级功能, 请执行以下命令以打开 Uboot 图形化配置界面:

    ./bd.sh uboot menuconfig
    

    命令执行成功后,将弹出 Uboot 的图形配置界面,您可以在此界面中设置 U 盘自动升级功能。

    • 进入到 Update support 菜单,并勾选 Auto update by USB storage devices 选项以启用 U 盘自动升级功能:

    uboot_menuconfig.png

    uboot_menuconfig_2.png

    • 保存并退出 Uboot 配置界面,编译并烧写 Uboot 镜像到设备中。

升级流程图:

bringup.png

4.4.9.4. 常见问题

如何判断设备是否支持 U 盘自动升级功能?

可以通过查看 Uboot 命令行界面是否有 usbupdate 命令,如果有,则表示设备支持 U 盘自动升级功能。

检查升级结果

升级完成后,您可以通过以下方式检查升级结果:

  • 通过串口查看设备日志,确认升级是否成功。

  • 通过 df -h 命令查看 U 盘挂载情况。

  • 通过 cat /proc/version 命令查看系统版本。

升级失败

如果升级失败,请检查:

  • U 盘是否正确放置镜像文件( 确保在 update_img 目录下)。

  • 通过串口查看设备日志是否有相关错误信息。

  • 确保 Uboot 能够正常启动,以支持系统顺利升级。

  • 确保设备在插入 U 盘后,需通过冷启动方式,才能进入升级模式。

  • 如果是 eMMC 设备,确保升级前分区状态是正常的,系统能够正常运行。