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

2023-11-17

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 ##》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • C++模板类重载"<<"未定义错误

    在使用C 的模板类进行编程的时候 重载 lt lt 运算符时 如果定义不当 会出现未定义的情况 错误为LNK2019 这个问题的原因是由于C 的模板编译机制造成的 解决问题的方式是在类中声明 lt lt 运算符时 需要在运算符和参数之间的位
  • 【Python-利用动态二维码传输文件(五)】动态二维码文件发送端开发,使用Tkinter filedialog实现任意格式文件选中,并显示发送状态

    之前四篇文章论证了利用二维码传输文件的可行性 本章使用tkinter开发 动态二维码文件发送端 发送端具备文件选择 开始发送文件 停止发送文件以及显示发送状态的功能 程序界面下 这里下载源码运行 使用tkinter开发动态二维码文件发送端
  • 【JVM】JVM 垃圾收集器与内存分配策略

    JVM 垃圾收集器与内存分配策略 由JVM内存区域可知Java运行时内存的各个区域 其中程序计数器 虚拟机栈 本地方法栈3个区域随线程而生 随线程而灭 当方法结束或者线程结束时 内存就会跟着被回收了 而只有处于运行期间 我们才能知道程序究竟
  • 在IMX8MM平台linux下开发rm67191屏驱动

    NXP IMX8M MINI rel imx 4 14 98 2 0 0 ga 屏芯片 rm67191 屏调试记录 1 不能挂设备 设备树删除ADV7535屏的配置adv bridge 不通编译通过 结果按 https community
  • 一起来看看一个体系完善的前端React组件库是如何搭建出来的!

    作者简介 剑桥 携程资深前端开发工程师 关注自动化工具开发 前端工程自动构建相关技术 随着前端工程的发展 组件化的思想早已深入人心 现代的前端框架React Vue等 都是围绕组件设计 组件化的开发模式 大大提高了开发效率 设计和开发高质量
  • 增长率用计算机怎么算,操作方法:Excel使用公式来计算增长率教程

    有关使用公式计算增长率的Excel教程 Excel经常需要使用公式来计算增长率 如何使用公式来计算增长率 以下是有关使用公式计算增长率的excel教程 希望阅读后能为您带来启发 Excel使用公式来计算增长率教程 计算增长率步骤1 在单元格
  • A Survey on Large Language Models for Recommendation

    本文是LLM系列的文章 针对 A Survey on Large Language Models for Recommendation 的翻译 大模型用于推荐的综述 摘要 1 引言 2 建模范式和分类 3 判别式LLM用于推荐 4 生成式L
  • 关于使用Mybatis时实体类字段切记要使用包装类型

    每周的博客从5月份有开始断更了 看来坚持每周写一篇博客缺失很难 不过从这周开始 除了一方面把之前的那几周没写的博客补回来 另一方面从这周开始要真正逼自己的写一篇博客 并争取在7月份前搭建起自己的个人博客网站 好 废话少说 接下来快速进入今天
  • 线性表的顺序表示--王道2024DS习题代码

    2024年王道数据结构考研复习指导第二章 线性表的顺序表示 课后综合应用题个人学习的相关运行代码 include
  • 详解Matplotlib中文字符显示问题

    文章目录 1 中文字体显示问题 2 几种解决方案 2 1 在绘图代码中设置全局字体 2 2 在绘图代码中设置局部字体 2 3 修改本机字符默认配置字体 2 4 自动区别系统然后选择字体 3 其他 3 1 platform模块 3 2 常见中
  • Latex 乘号 分号

    Latex 乘号 分号 frac 分号 times 乘号 举例
  • 在 QT Creator 上配置 opencv 环境的一些认识和注意点

    在 QT Creator 上配置 opencv 环境的一些认识和注意点 一 OpenCV4 QT Creator Cmake 我参考的视频是 https www bilibili com video BV163411b7mg spm id
  • Go redis操作

    Go redis的操作 五种数据结构的基本操作汇总 一 String 操作 命令 说明 Set key value 给数据库中名称为 key 的 string 赋予值 valueget key 返回数据库中名称为 key 的 string
  • 系统架构主题之七:基于架构的软件设计方法及应用

    1 基于架构的软件设计方法概念 关键词 ABSD 自顶向下 递归迭代 与需求同步 设计元素 视角与视图 用例和质量场景 预期和非预期等 总的来讲 ABSD方法分为如下六个大的阶段 1 体系结构需求阶段 相比传统软件系统设计 架构设计在需求获
  • Centos7 命令行安装JDK步骤

    在国内 甲骨文公司的jdk下载的速度是很慢的 这里建议使用国内华为云的jdk 两者没有区别 就是做了一个搬运工作 对国内使用JDK环境的人来说非常友好 第一步 选择自己合适的JDK版本 网站在下面给出 https repo huaweicl
  • 【数据库】JDBC编程

    前言 小亭子正在努力的学习编程 接下来将开启javaEE的学习 分享的文章都是学习的笔记和感悟 如有不妥之处希望大佬们批评指正 同时如果本文对你有帮助的话 烦请点赞关注支持一波 感激不尽 目录 前言 什么是JDBC JDBC工作原理 JDB
  • 杰里之内置触摸按键配置篇

    关于内置触摸按键感应原理 内置触摸按键检测模块是利用人体分布电容对触摸按键电容影响来进行按键检测的 如下图 当人体触摸外部电容按键时 IO 口外部电容增加 芯片内部的触摸感应模块可以检测到该电容 变化 从而检测到按键是否被按下 在没有触摸的
  • Opencv(C++)笔记--打开摄像头、保存摄像头视频

    1 打开摄像头 关键代码语句 VideoCapture cam 0 cam read img imshow cam img include
  • 算法基础--蒙特卡洛模拟

    蒙特 卡罗方法 Monte Carlo method 也称统计模拟方法 是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明 而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法 是指使用随机数 或更常见的伪随机数 来解决很
  • uboot下实现U盘自动升级程序的思路分析(基于USB系统、eMMC系统、FAT32文件系统)

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