【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践

  本文首先介绍了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
【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践_第1张图片
  下载完成后,解压,然后进入文件夹,如下:在当前目录下,同时按下Shift+Ctrl,然后鼠标右键,选择“在此处打开 Powershell 窗口”,进入Powershell命令行
【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践_第2张图片
【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践_第3张图片

.\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,执行步骤如下:

  1. 启动开发板,进入uboot的命令行模式;
  2. 设置环境变量
=> setenv mbr_parts 'name=boot,start=4M,size=128M,bootable,id=0x0e; name=rootfs,size=10G,id=0x83'
  1. 将分区表写入eMMC
=> mbr write mmc 0
MBR: write success!
  1. 校验分区信息是否正确
=> 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):
【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践_第4张图片

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的帮助信息:
【U-Boot 之七】fastboot原理分析及uboot fastboot功能实践_第5张图片

通过帮助信息可以总结如下几点信息:

  1. fastboot 既可以使用 udp,也可以使用 usb 模式
  2. 可选参数 addr 指定的了 fastboot 缓冲区在内存中的首地址
  3. 可选参数 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

你可能感兴趣的:(U-Boot,android,uboot,fastboot,mbr)