本文首先介绍fastboot的基本原理,然后分析fastboot在uboot中的实现,最后从实际测试fastboot协议和各种fastboot视角如何使用命令等。本文只是简单描述一下我自己的实际测试过程。如有不妥之处,欢迎大家赐教,谢谢。
首先我们要明确一点,fastboot是一种通信协议。
fastboot 协议是一种通过 USB 或以太网 (UDP) 与引导加载程序进行通信的机制。它设计简单,可在运行 Linux、macOS 或 Windows 的各种设备和主机上使用。实现的基本原理是PC通过fastboot协议与bootloader进行通信。
综上所述,有以下几点:
(1)Fastboot是android使用的一种刷机方式。 android系统设计了两种刷机方式:fastboot和recovery;
(2) Fastboot 使用 USB 作为物理传输。刷机其实就是图传+烧录。当fastboot闪烁时,通过USB线传输镜像;
(3) Fastboot 也是uboot 中的一个命令。 uboot启动时,手动进入命令行模式。如果此时需要刷机,那么可以在命令行中执行fastboot命令,让uboot进入fastboot模式。刷机是在fastboot模式下进行的;
(4)如果想通过uboot的fastboot命令刷机,需要主机端fastboot软件(fastboot.exe)的配合
待补充。 。 。
下载fastboot主机的exe文件:https://www.sychzs.cn/studio/releases/platform-tools?hl=zh-cn
下载完成后,解压并进入文件夹,如下: 在当前目录下,同时按下Shift+Ctrl,然后右键选择“在此处打开Powershell窗口”即可进入Powershell命令行
。
.\fastboot.exe connect udp:192.168.100.152:5554
命令执行成功后,没有任何反应。 192.168.100.152是开发板的IP地址,端口号为5554(固定值),通过UDP通信
待补充。 。 。
在启动fastboot进行文件传输之前,需要确保磁盘已分区并已创建分区表。我使用的开发板存储机制是1G eMMC。步骤如下:
=> setenv mbr_parts'name=boot,start =4M,尺寸 =128M,可启动,id=0x0e; 名称=rootfs,大小=10G,id=0x83'
=> mbr 写入 mmc 0
MBR:写入成功!
=> mbr 验证 mmc 0
MBR:验证成功!
注:在我的开发板中,eMMC设备为0,所以上面的操作都是mmc 0。这个需要根据实际情况修改
由于业务需要,需要对分区1进行格式化。格式化命令为:fatformat mmc 0:1
fatformat mmc 0:1 /* 将 mmc0 分区 1 格式化为 FAT32 */
可以通过以下脚本直接创建自己的文件系统(rootfs.ext4.img)进行测试:
ddif=/dev/零of=rootfs.ext4.img seek=524288 计数=0 bs=1024
mkfs.ext4 -F -i 4096 rootfs.ext4.img -d rootfs
fsck.ext4 -pdvfD rootfs.ext4.img
需要注意的是,www.sychzs.cn 脚本运行的目录下必须有 rootfs 文件夹(文件夹中可以放一些文件或文件夹)
进入Uboot命令行后,执行以下命令查看fastboot帮助信息:
通过帮助信息可以总结出以下信息:
- fastboot 可以使用 UDP 或 USB 模式
- 可选参数 addr 指定 fastboot 缓冲区在内存中的首地址
- 可选参数 size 指定 fastboot 缓冲区的大小,单位为:byte
开发板侧
命令:fastboot udp
windows 主机端
命令:.\fastboot.exe -s udp:192.168.100.152:5554 flash mmcsda2 .\256.ext4.img
开发板端
命令:fastboot usb 0
windows主机端
命令:.\fastboot.exe flash mmcs da2 .\256.ext4.img