【SOC】Fastboot /DFU 烧录镜像
uboot下 使用fastboot 进行 UFS/EMMC/nand 设备烧录的大致流程board 进入 uboot支持 fastboot 同时host机器安装上 fastboot 客户端 ; 2者board与host之间通过usb线连接,通过fastboot 协议进行交互uboot下初始化ufs/emc/nand设备并进入fastboot模式等待接收数据设备初始化初始化 ufs/emc/nand 存储设备 可使用命令 也可在进入命令行之前进行配置 进入fastboot 模式 uboot 命令行下执行-fastboot usb0以上命令执行完之后 uboot 会解析命令具体的解析见 cmd/fastboot.c 比如 函数 do_fastboot_usb大致是 usb 设备初始化fastboot 协议注册然后usb 设别进入监听模式等待上位机传输数据host 执行 fastboot 相关命令 将镜像文件 和 信息发给 board (usb device)host 端执行 fastboot flash xxx xxx.bin Fastboot 协议和 USB 交互逻辑具体见drivers/usb/gadget/f_fastboot.cuboot 接收到数据 根据 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_writedfu(Download Firmware Update) 烧录 ufs/nand/emmc/flash 流程board 进入 dfu 模式一般board 如果有 dfu 功能 一般都会通过外部拨码或者类似的方式进入 dfu 模式循环检测usb接收中断host 安装dfu 工具 通过usb 线连接 board 和host连接之后 在host端 输入命令 dfu-util-l 查看设备是否被识别host 发送镜像文件(通过dfu协议和boar中的USB 进行交互)发送的命令类似dfu-util-a0-s0x08000000:leave-D./build/HelloWorld.binboard 里usb rx 接收数据根据指定信息 或者代码自身逻辑将数据写到存储设备ufs/nand/emmc/flash)这里说下如果dfu 运行在裸机 需要在代码中自行添加 存储设备的初始化 以及 dfu 接收到数据并将数据写到存储设备的逻辑这里我们可以看出 dfu 烧录镜像文件也是先将镜像数据缓存到一片buff 然后再将buff的数据写到指定设备指定内存中参考文章在macOS上开发RISC-V单片机-下载与调试usb dfu和usb fastboot的区别GPT 分区GPTGUID Partition Table全局唯一标识符分区表是一种磁盘分区方案是 MBR主引导记录的现代替代品。它作为 UEFI 规范的一部分被引入解决了 MBR 的诸多限制GPT 的结构特点保护性 MBRGPT 磁盘的第一个扇区LBA0保留一个保护性 MBR防止不支持 GPT 的旧工具误认为磁盘是未分区的而破坏数据。主 GPT 头 分区表LBA1GPT 头包含磁盘 GUID、分区表位置、CRC 校验等信息。LBA2‑33分区表条目每个条目 128 字节默认可存放 128 个分区。备份 GPT 头与分区表磁盘最后一个扇区之前保存一份完全相同的备份主 GPT 头损坏时可从备份恢复。分区类型 GUID每个分区都有一个全局唯一标识符GUID用于标识分区类型如 EFI 系统分区、Microsoft 保留分区、Linux 文件系统等避免类型冲突所有 一个 gpt.img 的结构是保护性 MBR主 GPT头分区表每个分区的img文件备份GPT头备份分区表PTEPTE 指 分区表项Partition Table Entry。每个 PTE 描述一个分区的完整信息大小固定为 128 字节。GPT 分区表区域通常 LBA2LBA33默认可容纳 128 个 这样的表项即最多支持 128 个分区。PTE分区表项在 GPT 中的作用PTEPartition Table Entry分区表项是 GPT 分区表中用于描述单个分区的数据结构。每个 PTE 包含了操作系统或固件识别和管理一个分区所需的全部元数据主要作用包括–标识分区类型通过 分区类型 GUID 区分分区的用途如 EFI 系统分区、Windows 数据分区、Linux 文件系统分区等。–提供唯一标识通过 唯一分区 GUID 让系统能够精确引用该分区即使磁盘顺序变化也不会混淆。–定义分区范围记录分区的起始 LBA 和结束 LBA精确划定分区占用的磁盘空间。–设置属性标志用位标志表示分区的特殊属性如是否只读、是否隐藏、是否为系统关键分区等。–存储分区名称以 UTF-16LE 编码保存用户可读的分区名称例如“Windows”、“Ubuntu”等。PTE 的集合构成了分区表整个分区表位于磁盘的固定位置主分区表在 LBA2‑LBA33备份分区表在磁盘末尾并受 CRC32 校验保护确保了分区信息的完整性和可恢复性使用场景:gpt 的使用场景比较多这里说一个比较实用的可以动态获取分区信息灵活更新某个分区img不更改固件代码分区表完整可靠
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455570.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!