本文首先介绍了fastboot的基本原理,然后分析了uboot中fastboot的实现,最后,从实践的角度测试了fastboot协议及各种fastboot命令的使用方式等 。本文的仅按照我本人的实际测试过程进行了简单的描述。若有不当之处,欢迎各位大神不吝赐教,谢谢。
1. 综述
首先明确一点,fastboot是一种通信协议。
fastboot 协议是一种通过 USB 或以太网(UDP)与引导加载程序通信的机制。 它的设计非常简单,可以在各种设备和运行 Linux、macOS 或Windows 的主机上使用。实现的基本原理就是 PC 机通过 fastboot 协议与 bootloader 通信。
总结来说,就是如下几点:
(1)fastboot是android使用的一种刷机方法。android系统设计了2种刷机方式:fastboot和recovery;
(2)fastboot使用usb作为物理传输。刷机其实是镜像传输+烧录,fastboot刷机时就是通过usb线来传输镜像的;
(3)fastboot也是uboot中的一个命令,uboot启动时手动进入命令行模式,此时如果需要刷机,则可以在命令行中执行fastboot命令,就可以让uboot进入fastboot模式,刷机就是在fastboot模式下进行的;
(4)若想通过uboot的fastboot命令实现刷机,需要主机端的fastboot软件配合(fastboot.exe)
2. 源码分析
待添加。。。
3. 工程实践
3.1 准备工作
3.1.1 下载fastboot.exe
下载 fastboot 主机端的exe文件,网址为:https://developer.android.com/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进行通信
3.1.2 uboot配置与编译
待添加。。。
3.1.3 uboot磁盘分区(制作分区表)
在启动 fastboot 进行文件传输之前,需要保证磁盘已经完成了分区,创建了分区表才行。我使用的开发板的存储机制为1G的eMMC,执行步骤如下:
- 启动开发板,进入uboot的命令行模式;
- 设置环境变量
=> setenv mbr_parts 'name=boot,start=4M,size=128M,bootable,id=0x0e; name=rootfs,size=10G,id=0x83'
- 将分区表写入eMMC
=> mbr write mmc 0
MBR: write success!
- 校验分区信息是否正确
=> mbr verify mmc 0
MBR: verify success!
注意:在我的开发板中,eMMC的设备为0,所以上边的操作的都是 mmc 0, 这个需要根据实际情况进行修改
3.1.4 uboot格式化分区
由于业务需要,需要对分区1进行格式化,格式化的命令为:fatformat mmc 0:1
fatformat mmc 0:1 /* 将mmc0的分区1格式化为FAT32 */
3.1.5 制作文件系统(rootfs)
可通过如下脚本直接制作出自己用于测试的文件系统(rootfs.ext4.img):
dd if=/dev/zero of=rootfs.ext4.img seek=524288 count=0 bs=1024
mkfs.ext4 -F -i 4096 rootfs.ext4.img -d rootfs
fsck.ext4 -pdvfD rootfs.ext4.img
需要注意的是,在运行的mkfs.sh脚本的目录下,必须有一个rootfs的文件夹才行(文件夹里可以放一些文件或者文件夹)
3.2 测试
进入Uboot命令行后,执行如下命令,可以查看fastboot的帮助信息:
通过帮助信息可以总结如下几点信息:
- fastboot 既可以使用 udp,也可以使用 usb 模式
- 可选参数 addr 指定的了 fastboot 缓冲区在内存中的首地址
- 可选参数 size 指定了 fastboot 缓冲区的大小,单位为:字节
3.3.1 udp方式
开发板端
命令:fastboot udp
windows主机端
命令:.\fastboot.exe -s udp:192.168.100.152:5554 flash mmcsda2 .\256.ext4.img
3.3.2 usb方式
开发板端
命令:fastboot usb 0
windows主机端
命令:.\fastboot.exe flash mmcsda2 .\256.ext4.img
参考文献:
- https://zhuanlan.zhihu.com/p/518965515