uboot下实现U盘自动升级程序的思路分析(基于USB系统、eMMC系统、FAT32文件系统)

1、常见的升级方式

1.1、应用程序升级

优点:在图形化界面操作,只需要选中升级文件并点击升级即可,操作简单;
缺点:应用程序必须能正常启动,当程序出现bug就不能升级,可靠性差;
总结:操作简单,适合用户;

1.2、uboot下tftp升级

优点:只要uboot能正常运行就可以通过tftp升级,可靠性高;
缺点:需要连接串口和网线,并需要在局域网搭建tftp服务器,操作麻烦;
总结:适用于开发人员,当应用程序起不来的时候去升级;

1.3、uboot下U盘自动升级

优点:只需要将升级文件拷贝到U盘,插上U盘并重启,只要uboot能正常工作即可自动升级,操作简单,可靠性高;
缺点:设备每次启动都要去探测U盘,增加启动时间;
总结:U盘自动升级适用于当设备出现问题并且不方便搭建网络升级环境时使用;

2、uboot下U盘自动升级的步骤

(1)将提供的镜像文件拷贝到自备的U盘;
(2)插上U盘;
(3)重启设备;
(4)等待升级完成;

3、流程设计

在这里插入图片描述

4、uboot移植

4.1、uboot需要支持的功能

(1)使能USB OHCI:支持uboot识别U盘;
(2)MMC驱动移植:uboot能初始化U盘;
(3)FAT文件系统支持:uboot能挂载U盘,并以FAT32格式去读取U盘上的内容;

4.2、uboot移植的步骤

(1)uboot代码先使能USB OHCI、移植MMC驱动、支持FAT文件系统;
(2)在uboot的命令行,通过手动敲命令去测试U盘,先达到能正确识别并挂载U盘,能把U盘里的内容读取到内存或者烧写到flash中;
(3)将第二步的测试过程,封装成uboot下的一个命令,然后在bootcmd里添加这个命令,这样每次uboot启动都会去尝试U盘升级;

5、手动实现U盘升级程序

System startup

Uncompress Ok!

U-Boot 2020.01 (Nov 26 2022 - 10:18:53 +0800)

DRAM:  Relocation Offset is: 1771a000
Relocating to 5ff1a000, new gd at 5fe79df8, sp at 5fe79de0
SPI Nor:  Boot Media isn't SPI Nor
NAND:  fmc_ip_ver_check(34): Check Flash Memory Controller v100 ...fmc_ip_ver_check(40):  Found
SPI Nand ID Table Version 2.7
SPI Nand(cs 0) ID: 0xc2 0x90 Name:"MX35UF1G14AC"
Block:128KB Page:2KB OOB:64B ECC:4bit/512 
Chipsize:128 MiB
MMC:   Card did not respond to voltage select!
No EMMC device found !
bsp-sdhci: 0
Loading Environment from SPI Flash... Boot Media isn't SPI Nor
*** Warning - spi_flash_probe() failed, using default environment

Loading Environment from NAND... OK
In:    serial
Out:   serial
Err:   serial

Net:   gmac0, gmac1
Error: gmac1 address not set.

Hit any key to stop autoboot:  0 
# usb device
Install USB Device...
# usb start
starting USB...
USB0:   Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 0 for devices... 1 USB Device(s) found
USB1:   Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
# usb tree
USB device tree:
  1  Hub (5 Gb/s, 0mA)
     U-Boot XHCI Host Controller 
   
  2  Hub (5 Gb/s, 0mA)
  |  U-Boot XHCI Host Controller 
  |
  +-3  Mass Storage (480 Mb/s, 100mA)
       USB2.0 Flash Disk 2013110511330078
     
# 
# fatls usb 0
            System Volume Information/
      402   config
      765   config_debug.txt
   327680   u-boot.bin

 30007296   vmcore

16 file(s), 1 dir(s)

# fatload usb 0 0x43000000 u-boot.bin
1071412 bytes read in 82 ms (12.5 MiB/s)

(1)usb device:按照USB设备;
(2)usb start:初始化并检索USB存储设备;
(2)usb tree:例举当前识别到的USB设备;
(3)fatls usb 0:用FAT32格式去查看usb 0里的文件;
(4)fatload usb 0 0x43000000 u-boot.bin:将usb 0设备的u-boot.bin文件写到内存地址0x43000000处;

6、实现开机自动识别U盘并升级程序

#原来的bootcmd
bootcmd=partload kernel;bootm 0x44000000

# 支持U盘自动升级的bootcmd
bootcmd=usbupdate;partload kernel;bootm 0x44000000

(1)将uboot终端下手动升级的过程封装成一个命令,假设是usbupdate命令;
(2)在bootcmd中添加usbupdate命令,这样每次uboot在启动内核前都会去执行U盘自动升级的过程;

7、U盘识别失败:## Valid DOS partition found

参考博客:《uboot下识别FAT32格式的U盘报错:## Valid DOS partition found ##》

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值