首页 > 其他分享 >设备固件升级 (DFU)

设备固件升级 (DFU)

时间:2025-01-04 12:34:48浏览次数:3  
标签:info raw DFU boot 升级 dfu 固件 alt

设备固件升级 (DFU) 支持通过 USB 连接时从 U-Boot 下载和上传固件。

U-Boot 遵循 USB 论坛的设备固件升级版本 1.1 的通用串行总线设备类规范。

U-Boot 基于以下内容通过命令 dfu (cmd/dfu.c / CONFIG_CMD_DFU) 实现此 DFU 功能 (CONFIG_DFU):

  • 基于 USB DFU 下载小工具 (drivers/usb/gadget/f_dfu.c) 的 DFU 堆栈 (common/dfu.c 和 common/spl/spl_dfu.c)

  • 对介质的访问是在 DFU 后端 (driver/dfu) 中完成的

目前支持的 DFU 后端有:

  • MMC(RAW 或 FAT / EXT2 / EXT3 / EXT4 文件系统 / SKIP / SCRIPT)

  • SCSI(UFS、RAW 分区、FAT/EXT2/EXT3/EXT4 文件系统/SKIP/SCRIPT)

  • NAND

  • 内存

  • SF(串行闪存)

  • MTD(所有 MTD 设备:NAND、SPI-NOR、SPI-NAND……)

  • virtual

这些 DFU 后端还用于

  • dfutftp
  • thordown 命令(cmd/thordown.c 和 gadget/f_thor.c)

“虚拟”后端是一个通用的 DFU 后端,用于支持特定于板的目标(例如 OTP),仅基于弱功能:

  • dfu_write_medium_virt
  • dfu_get_medium_size_virt
  • dfu_read_medium_virt

配置选项

以下配置选项与设备固件升级相关:

  • CONFIG_DFU
  • CONFIG_DFU_OVER_USB
  • CONFIG_DFU_MMC
  • CONFIG_DFU_MTD
  • CONFIG_DFU_NAND
  • CONFIG_DFU_RAM
  • CONFIG_DFU_SCSI
  • CONFIG_DFU_SF
  • CONFIG_DFU_SF_PART
  • CONFIG_DFU_TIMEOUT
  • CONFIG_DFU_VIRTUAL
  • CONFIG_CMD_DFU

环境变量

dfu_alt_info

USB 下载小工具的 DFU 设置,每个选项上的信息字符串用分号分隔:

dfu_alt_info="<alt1>;<alt2>;....;<altN>"

当使用多个设备时,格式为:

  • ’=’alternate list (‘;’ separated)

  • each interface is separated by ‘&’

dfu_alt_info=\
    "<interface1> <dev1>=<alt1>;....;<altN>&"\
    "<interface2> <dev2>=<altN+1>;....;<altM>&"\
    ...\
    "<interfaceI> <devI>=<altY+1>;....;<altZ>&"

dfu_bufsiz

DFU 缓冲区的大小(若不存在)默认为 CONFIG_SYS_DFU_DATA_BUF_SIZE(默认为 8 MiB)

dfu_hash_algo

要使用的哈希算法的名称

命令

dfu <USB_controller> [ ] list

列出dfu_alt_info中定义的备用设备。

dfu <USB_controller> [ ] []

使用选定的介质后端在 USB 实例上启动 dfu 堆栈,并使用dfu_alt_info变量配置备用设置并将每个设置与介质链接起来。dfu 命令继续,直到它在控制台中收到 ^C 或从 HOST 收到 DFU 分离事务。如果启用了 CONFIG_DFU_TIMEOUT 选项并且命令行中存在 参数,则在等待遥控器启动 DFU 会话 秒后,DFU 操作将自动中止。

的可能值为(dfu 命令示例中的 = 0)

mmc

dfu 0 mmc <dev>

dfu_alt_info中的每个元素都是

  • raw [mmcpart ] 对 mmc 设备的原始访问

  • part <part_id> [offset ]对分区的原始访问

  • fat <part_id> 在 FAT 文件系统分区中

  • ext4 <part_id> 在 EXT4 文件系统分区中

  • skip 0 0 忽略闪存数据

  • script 0 0 在 shell 中执行命令

offset

设备中的偏移量(不带“0x”的十六进制)

size

访问区域的大小(十六进制,不带“0x”)或 0(表示整个设备)

partid

GPT 或 DOS 分区索引

num

eMMC硬件分区号

eMMC 的环境变量dfu_alt_info的值可能是:

u-boot raw 0x3e 0x800 mmcpart 1;bl2 raw 0x1e 0x1d mmcpart 1

SD 卡的环境变量dfu_alt_info的值可以是:

u-boot raw 0x80 0x800;uImage ext4 0 2

如果您不想将给定的图像文件刷入存储,请使用“跳过”类型实体。

  • 它可用于防止特定主板闪现错误图像。

  • 特别是当使用 thor 协议时,这种布局会很有用,该协议以批处理模式执行刷写,其中处理多个文件。

例如,如果制作一个支持两块主板的 u-boot-.bin 和 u-boot-.bin 文件的一个 tar 文件,就可以用它在两块主板上刷写正确的 u-boot 映像,而不会出现故障:

u-boot-<board1>.bin raw 0x80 0x800; u-boot-<board2>.bin skip 0 0

当刷新新的系统映像需要您执行一些比将数据写入存储介质更复杂的事情时,可以使用“脚本”类型。写入此类实体的数据将作为 u-boot shell 中的命令列表执行。例如,这允许您重新创建分区布局,甚至为新创建的分区设置新的dfu_alt_info。这样的脚本如下所示:

setenv dfu_alt_info ...
setenv mbr_parts ...
mbr write ...

请注意,这意味着用户将能够像在 u-boot 的 shell 中一样执行任意命令。

scsi

对于 UFS 存储:

dfu 0 scsi <dev>

dfu_alt_info中的每个元素都是

  • raw raw access to SCSI LUN

  • part <part_id> raw access to partition

  • fat <part_id> file in FAT partition

  • ext4 <part_id> file in EXT4 partition

  • skip 0 0 ignore flashed data

  • script 0 0 execute commands in shell

size

是访问区域的大小(十六进制,不带“0x”)或 0(表示整个设备)

partid

GPT 或 DOS 分区索引。

dev

SCSI LU(逻辑单元)索引(仅十进制)

UFS 的环境变量dfu_alt_info的值可能是

u-boot part 4;bl2 raw 0x1e 0x1d

有关跳过和脚本类型的详细信息,请参阅上面的 mmc 部分。

nand

原始 slc nand 设备:

dfu 0 nand <dev>

dfu_alt_info中的每个元素都是

  • raw raw access to nand device

  • part <dev_id> <part_id> raw access to partition

  • partubi <dev_id> <part_id> raw access to ubi partition

offset

是nand设备中的偏移量(十六进制,不带“0x”)

size

是访问区域的大小(不带“0x”的十六进制)

dev_id

NAND 设备索引(仅十进制)

part_id

NAND 分区索引(仅十进制)

ram

原始访问 RAM:

dfu 0 ram <dev>
dev

不用于 RAM 目标

dfu_alt_info中的每个元素是:

<name> ram <offset> <size>  raw access to ram
offset

RAM 设备中的偏移量(十六进制,不带“0x”)

size

访问区域的大小(不带“0x”的十六进制)

sf

串行闪存:NOR:

cmd: dfu 0 sf <dev>

dfu_alt_info中的每个元素都是以下之一:

  • raw raw access to sf device

  • part <dev_id> <part_id> raw access to partition

  • partubi <dev_id> <part_id> raw access to ubi partition

offset

sf 设备中的偏移量(十六进制,不带“0x”)

size

访问区域的大小(不带“0x”的十六进制)

dev_id

sf 设备索引(设备是“nor<dev_id>”)(仅十进制)

part_id

MTD 分区索引(仅十进制)

mtd

所有 MTD 设备:NAND、SPI-NOR、SPI-NAND……:

cmd: dfu 0 mtd <dev>
dev

mtd 命令中定义的 mtd 标识符(nand0、nor0、spi-nand0、…)

dfu_alt_info中的每个元素都是以下之一:

  • raw for raw access to mtd device

  • part <part_id> for raw access to partition

  • partubi <part_id> for raw access to ubi partition

offset

mtd 设备中的偏移量(十六进制,不带“0x”)

size

访问区域的大小(不带“0x”的十六进制)

part_id

是 MTD 分区索引(仅十进制)

virt

DFU 的虚拟闪存后端

cmd: dfu 0 virt <dev>

dfu_alt_info中的每个元素是:

和 不存在,dfu 命令使用多个设备:

cmd: dfu 0 list
cmd: dfu 0

dfu_alt_info变量提供 列表,其中备用列表由 ‘&’ 分隔,每个 的格式相同:

mmc <dev>=<alt1>;....;<altN>
nand <dev>=<alt1>;....;<altN>
ram <dev>=<alt1>;....;<altN>
scsi <dev>=<alt1>;....;<altN>
sf <dev>=<alt1>;....;<altN>
mtd <dev>=<alt1>;....;<altN>
virt <dev>=<alt1>;....;<altN>

回调

可以实现弱回调函数来管理特定行为

dfu_initiated_callback

在 DFU 事务启动时调用,用于初始化设备

dfu_flush_callback

在DFU表现后写入DFU结束时调用,用于在DFU事务关闭时管理设备

主机工具

当 U-Boot 运行 dfu 堆栈时,DFU 主机工具可用于在每个配置的替代方案上发送/接收固件映像。

例如,dfu-util 是 DFU 1.1 规范(http://dfu-util.sourceforge.net/)的主机端实现,可与 U-Boot 配合使用。

用法

示例 1:位于 eMMC 或 SD 卡中的固件,具有:

SPL 分区(GPT 分区 1)的替代 1(alt=1)

U-Boot 分区(GPT 分区 2)的备用分区 2(alt=2)

U-Boot配置为:

U-Boot> env set dfu_alt_info "spl part 0 1;u-boot part 0 2"

U-Boot> dfu 0 mmc 0 list
DFU alt settings list:
dev: eMMC alt: 0 name: spl layout: RAW_ADDR
dev: eMMC alt: 1 name: u-boot layout: RAW_ADDR

Boot> dfu 0 mmc 0

在主机端:

列出可用的替代设置:

$> dfu-util -l
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Found DFU: [0483:5720] ver=0200, devnum=45, cfg=1, intf=0, path="3-1.3.1", \
   alt=1, name="u-boot", serial="003A00203438510D36383238"
Found DFU: [0483:5720] ver=0200, devnum=45, cfg=1, intf=0, path="3-1.3.1", \
   alt=0, name="spl", serial="003A00203438510D36383238"

To download to U-Boot, use -D option

$> dfu-util -a 0 -D u-boot-spl.bin
$> dfu-util -a 1 -D u-boot.bin

To upload from U-Boot, use -U option

$> dfu-util -a 0 -U u-boot-spl.bin
$> dfu-util -a 1 -U u-boot.bin

To request a DFU detach and reset the USB connection:
$> dfu-util -a 0 -e  -R

示例 2:位于 NOR(sf)和 NAND 中的固件,具有:

SPL 分区(NOR GPT 分区 1)的替代 1(alt=1)

U-Boot 分区(NOR GPT 分区 2)的备用分区 2(alt=2)

U-Boot-env 分区(NOR GPT 分区 3)的备用 3(alt=3)

UBI 分区(NAND GPT 分区 1)的备用分区 4(alt=4)

U-Boot> env set dfu_alt_info \
"sf 0:0:10000000:0=spl part 0 1;u-boot part 0 2; \
u-boot-env part 0 3&nand 0=UBI partubi 0,1"

U-Boot> dfu 0 list

DFU alt settings list:
dev: SF alt: 0 name: spl layout: RAW_ADDR
dev: SF alt: 1 name: ssbl layout: RAW_ADDR
dev: SF alt: 2 name: u-boot-env layout: RAW_ADDR
dev: NAND alt: 3 name: UBI layout: RAW_ADDR

U-Boot> dfu 0
0
$> dfu-util -l
Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
   intf=0, alt=3, name="UBI", serial="002700333338511934383330"
Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
   intf=0, alt=2, name="u-boot-env", serial="002700333338511934383330"
Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
   intf=0, alt=1, name="u-boot", serial="002700333338511934383330"
Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
   intf=0, alt=0, name="spl", serial="002700333338511934383330"

与 MTD 后端相同的示例

U-Boot> env set dfu_alt_info \
   "mtd nor0=spl part 1;u-boot part 2;u-boot-env part 3&"\
   "mtd nand0=UBI partubi 1"

U-Boot> dfu 0 list
using id 'nor0,0'
using id 'nor0,1'
using id 'nor0,2'
using id 'nand0,0'
DFU alt settings list:
dev: MTD alt: 0 name: spl layout: RAW_ADDR
dev: MTD alt: 1 name: u-boot layout: RAW_ADDR
dev: MTD alt: 2 name: u-boot-env layout: RAW_ADDR
dev: MTD alt: 3 name: UBI layout: RAW_ADDR

示例 3

位于 SD 卡 (mmc) 中的固件以及 OTP 和 PMIC 非​​易失性存储器上的虚拟分区

  • scard 的替代 1 (alt=1)
  • 替代 2 (alt=2) 用于 OTP (虚拟)
  • 替代 3 (alt=3) 用于 PMIC NVM (虚拟)
U-Boot> env set dfu_alt_info \
   "mmc 0=sdcard raw 0 0x100000&"\
   "virt 0=otp" \
   "virt 1=pmic"
U-Boot> dfu 0 list
DFU alt settings list:
dev: eMMC alt: 0 name: sdcard layout: RAW_ADDR
dev: VIRT alt: 1 name: otp layout: RAW_ADDR
dev: VIRT alt: 2 name: pmic layout: RAW_ADDR

标签:info,raw,DFU,boot,升级,dfu,固件,alt
From: https://blog.csdn.net/qq_37255138/article/details/144926373

相关文章

  • Nginx不停服务版本升级(平滑升级)
    以默认安装路径为例,即nginx主文件为/usr/sbin/nginx备份nginx旧版本,即此例中的/usr/sbin/nginx这一文件;下载nginx新版本压缩包,并解压到需要进行升级的节点任意目录,此处以解压到/root为例;执行如下指令,并将输出的参数复制下来;/usr/sbin/nginx-V定位到新版本解压......
  • centos7升级gcc
    1.下载最新的GCC源码包http://ftp.gnu.org/gnu/gcc/wgethttp://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz或https://mirrors.cloud.tencent.com/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz解压tar-zxvfgcc-11.2.0.tar.gz2.下载依赖及配置文件yum-yinstallbzip......
  • H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手
    H7-TOOL详细介绍(含操作手册):http://www.armbbs.cn/forum.php?mod=viewthread&tid=89934【PC软件】V2.271.脱机烧录功能更新:  -prog_lib.c1拖16时部分成功时,修改start_prog_0()为返回ERROR  -高级脚本范例中新增1拖16使用VOUT输出结果状态  -修正GD32H7xx_1M和......
  • 电子配件行业的数字化转型升级:产品说明书的力量
    引言在电子配件行业,产品说明书不仅是消费者了解产品功能、操作指南的重要载体,也是企业进行品牌塑造、提升用户体验的关键一环。随着数字化转型的深入,电子配件企业开始探索如何巧妙利用产品说明书进行数字化转型升级,以增强市场竞争力。本文将探讨这一趋势,并介绍如何利用HelpLook工......
  • 一步一步实操教你升级小爱音箱的智能-基于MiGPT和豆包大模型
    目录背景基本原理MIoT接口MiGPT利用接口获取音箱消息播放静音音频通信流程大模型环境准备音箱信息收集大模型申请豆包大模型申请MIGPT中关于大模型的配置源码方式安装MiGPTNode.js安装pnpm配置pnpm源码准备配置修改安装依赖构建MiGPT运行并测试一下唤醒注意事项doc......
  • AI 驱动研发模式升级,蓝凌软件探索效率提升之道
    深圳市蓝凌软件股份有限公司(以下简称蓝凌软件),自2001年成立以来,一直走在数智化办公领域的前沿。作为国家认定的高新技术企业、知识管理国家标准的参编者以及信创供应商10强之一,蓝凌软件始终以“让组织更智慧”为使命,致力于通过蓝凌MK数智化工作平台、aiKM智能知识管理平台等产品,为......
  • AI 驱动研发模式升级,蓝凌软件探索效率提升之道
    深圳市蓝凌软件股份有限公司(以下简称蓝凌软件),自2001年成立以来,一直走在数智化办公领域的前沿。作为国家认定的高新技术企业、知识管理国家标准的参编者以及信创供应商10强之一,蓝凌软件始终以“让组织更智慧”为使命,致力于通过蓝凌MK数智化工作平台、aiKM智能知识管理平台等产品,为......
  • AI 驱动研发模式升级,蓝凌软件探索效率提升之道
    深圳市蓝凌软件股份有限公司(以下简称蓝凌软件),自2001年成立以来,一直走在数智化办公领域的前沿。作为国家认定的高新技术企业、知识管理国家标准的参编者以及信创供应商10强之一,蓝凌软件始终以“让组织更智慧”为使命,致力于通过蓝凌MK数智化工作平台、aiKM智能知识管理平台等产品,为......
  • 新春狂欢,超市管理新升级:看板软件引领高效运营!
    零售超市门店在新春期间面临着各种运营挑战,包括库存管理、销售促进、员工调度和顾客服务等方面的需求。为了高效应对这些挑战,采用看板软件可以显著提升门店的管理效率和顾客满意度。以下是对零售超市门店新春管理中看板软件的详细分析:一、看板软件概述看板软件是一种可视化管理......
  • 茶饮门店食品安全升级战:看板软件如何成为制胜关键?
    2024年,新茶饮市场的竞争持续升温,并在年末之际迎来了新的高潮:古茗与沪上阿姨这两大茶饮品牌,纷纷在年底更新了它们的港股招股书,向资本市场迈出了坚实的一步;与此同时,霸王茶姬与茶颜悦色也传出了正筹备赴美上市的消息,为新茶饮赛道的火热再添一把柴。但近年来,茶饮行业的食品安全问题逐......