当前位置: 首页 > news >正文

【SOC】Fastboot /DFU 烧录镜像

uboot下 使用fastboot 进行 UFS/EMMC/nand 设备烧录的大致流程:

  1. board 进入 uboot(支持 fastboot); 同时host机器安装上 fastboot 客户端 ; 2者(board与host)之间通过usb线连接,通过fastboot 协议进行交互
  2. uboot下初始化ufs/emc/nand设备,并进入fastboot模式,等待接收数据
设备初始化:初始化 ufs/emc/nand 存储设备, 可使用命令, 也可在进入命令行之前进行配置; 进入fastboot 模式: uboot 命令行下执行-fastboot usb0

以上命令执行完之后, uboot 会解析命令,
具体的解析见 : cmd/fastboot.c ,比如 函数 do_fastboot_usb
大致是 usb 设备初始化,fastboot 协议注册,然后usb 设别进入监听模式,等待上位机传输数据

  1. host 执行 fastboot 相关命令 将镜像文件 和 信息发给 board (usb device)
host 端执行 fastboot flash xxx xxx.bin Fastboot 协议和 USB 交互逻辑具体见:drivers/usb/gadget/f_fastboot.c
  1. uboot 接收到数据, 根据 info 信息, 将镜像写到 ufs 设备
uboot 通过 fastboot 协议,使用 usb rx 将 接收到的数据先保存到一片buff 内; 对下发的命令进行解析,将 xxx.bin 文件下载到指定设备的指定地址内(假设这里是ufs 设备)具体的解析 和 写ufs设备的时机可参考: drivers/fastboot/fb_command.c , 中 函数fastboot_handle_command() 和 drivers/fastboot/fb_ufs.c 中 函数 fastboot_ufs_flash_write

dfu(Download Firmware Update) 烧录 ufs/nand/emmc/flash 流程:

  1. board 进入 dfu 模式
一般board 如果有 dfu 功能, 一般都会通过外部拨码或者类似的方式进入 dfu 模式,循环检测usb接收中断
  1. host 安装dfu 工具, 通过usb 线连接 board 和host
连接之后, 在host端, 输入命令 dfu-util-l 查看设备是否被识别
  1. host 发送镜像文件(通过dfu协议和boar中的USB 进行交互)
    发送的命令类似:
dfu-util-a0-s0x08000000:leave-D./build/HelloWorld.bin
  1. board 里usb rx 接收数据,根据指定信息 或者代码自身逻辑将数据写到存储设备(ufs/nand/emmc/flash)
这里说下,如果dfu 运行在裸机, 需要在代码中自行添加 存储设备的初始化, 以及 dfu 接收到数据,并将数据写到存储设备的逻辑

这里我们可以看出, dfu 烧录镜像文件,也是先将镜像数据缓存到一片buff ,然后再将buff的数据写到指定设备指定内存中

参考文章:在macOS上开发RISC-V单片机-下载与调试
usb dfu和usb fastboot的区别

GPT 分区

GPT(GUID Partition Table,全局唯一标识符分区表)是一种磁盘分区方案,是 MBR(主引导记录)的现代替代品。它作为 UEFI 规范的一部分被引入,解决了 MBR 的诸多限制

GPT 的结构特点

保护性 MBR

GPT 磁盘的第一个扇区(LBA0)保留一个保护性 MBR,防止不支持 GPT 的旧工具误认为磁盘是未分区的而破坏数据。

主 GPT 头 + 分区表

LBA1:GPT 头,包含磁盘 GUID、分区表位置、CRC 校验等信息。

LBA2‑33:分区表条目,每个条目 128 字节,默认可存放 128 个分区。

备份 GPT 头与分区表

磁盘最后一个扇区之前保存一份完全相同的备份,主 GPT 头损坏时可从备份恢复。

分区类型 GUID

每个分区都有一个全局唯一标识符(GUID),用于标识分区类型(如 EFI 系统分区、Microsoft 保留分区、Linux 文件系统等),避免类型冲突

所有 一个 gpt.img 的结构是:

保护性 MBR+主 GPT头+分区表+每个分区的img文件+备份GPT头+备份分区表

PTE

PTE 指 分区表项(Partition Table Entry)。每个 PTE 描述一个分区的完整信息,大小固定为 128 字节。GPT 分区表区域(通常 LBA2~LBA33)默认可容纳 128 个 这样的表项(即最多支持 128 个分区)。

PTE(分区表项)在 GPT 中的作用

PTE(Partition Table Entry,分区表项)是 GPT 分区表中用于描述单个分区的数据结构。
每个 PTE 包含了操作系统或固件识别和管理一个分区所需的全部元数据,主要作用包括:

标识分区类型:通过 分区类型 GUID 区分分区的用途(如 EFI 系统分区、Windows 数据分区、Linux 文件系统分区等)。

提供唯一标识:通过 唯一分区 GUID 让系统能够精确引用该分区,即使磁盘顺序变化也不会混淆。

定义分区范围:记录分区的起始 LBA 和结束 LBA,精确划定分区占用的磁盘空间。

设置属性标志:用位标志表示分区的特殊属性(如是否只读、是否隐藏、是否为系统关键分区等)。

存储分区名称:以 UTF-16LE 编码保存用户可读的分区名称(例如“Windows”、“Ubuntu”等)。

PTE 的集合构成了分区表,整个分区表位于磁盘的固定位置(主分区表在 LBA2‑LBA33,备份分区表在磁盘末尾),并受 CRC32 校验保护,确保了分区信息的完整性和可恢复性

使用场景:
gpt 的使用场景比较多,这里说一个比较实用的,
可以动态获取分区信息,灵活更新某个分区img(不更改固件代码),分区表完整可靠

http://www.jsqmd.com/news/545719/

相关文章:

  • 手把手教你用Python+CarSim SDK搭建强化学习环境:从GitHub案例到可用的Reset函数
  • 超级AI数字员工源码系统,7x24小时自动处理客服、财务、行政工作
  • 7个超实用Adobe Illustrator效率神器完整使用指南:终极工作流程优化方案
  • [视频修复]工具:原子结构重建技术解决方案
  • SiameseUIE在金融文档处理中的应用:实体与事件联合抽取实战案例
  • 通义千问3-Reranker-0.6B效果惊艳:数学证明步骤间逻辑连贯性重排序
  • Wan2.2-I2V-A14B镜像免配置实战:开箱即用,省去PyTorch/CUDA环境冲突烦恼
  • Windows Defender移除与系统优化:高级用户的完整解决方案
  • 跨设备无缝协作:AppFlowy实时同步技术深度解析
  • 拼多多季报图解:营收1239亿 “新拼姆”落地上海,首批已注资150亿
  • 2026必看:八款热门AI编程工具横评
  • 5分钟上手Ecosim:终极免费生态系统模拟器完整指南
  • RexUniNLU环境部署指南:Python 3.8+ + torch + modelscope一站式配置
  • 开源编解码工具技术选型与实战指南:跨场景应用的H.264解决方案
  • AR.js技术解析:如何在Web浏览器中构建零安装增强现实应用
  • 【Python张量计算实战宝典】:20年AI架构师亲授5大高频场景优化技巧,错过再等一年
  • 小白程序员必看:收藏这份上下文工程指南,轻松玩转大模型!
  • 2026年论文党必备:高效论文写作全流程AI论文软件推荐(2026 最新)
  • UOS系统上,用AdGuard Home给全家网络做个‘净网’管家(保姆级配置+规则推荐)
  • 超级AI数字员工源码系统,支持定制化,接单必备!
  • 新手友好:在快马平台用mc、jc相关案例轻松上手前端开发
  • 【Java SE】包装类(Wrapper Class)
  • Llama-3.2V-11B-cot部署教程:修复致命视觉权重Bug+开箱即用方案
  • 告别文献标签混乱:3步解锁Zotero效率工具的自动化管理方案
  • DeepChat一键启动揭秘:Llama3:8b镜像免配置部署教程(含端口自愈与模型缓存)
  • 注意力机制融合新范式:从GCNet与DANet看全局建模的演进与实战
  • 基于MATLAB的FFT滤波技术:实现波形数据谐波分析、频段清除与提取的全面解决方案
  • STP安全特性实战:如何用bpduguard和bpdufilter防止网络攻击(附真实案例)
  • 爬取并保存图片资源(正则方法)
  • 从燃油车到智能座舱:AUTOSAR网络管理在车载以太网时代面临的挑战与适配