嵌入式之fastboot的初步学习笔记

:如下内容参考朱老师物联网大讲堂课件

1. 什么是fastboot

(1)fastboot是android使用的一种刷机方法.android系统设计了2种刷机方式:fastboot和recovery。

  • fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式。相对于某些系统(如小米)卡刷来说,线刷更可靠,安全。
  • recovery是一种卡刷,就是将刷机包放在sd卡上,然后在recovery中刷机的模式。

(2)fastboot使用usb作为物理传输。刷机其实就是镜像传输+烧录,fastboot刷机时就是通过usb线来传输镜像的。
(3)fastboot是uboot中的一个命令。uboot进入命令行中后,如果需要刷机,则可以在命令行执行fastboot命令就可以让uboot进入fastboot模式,刷机就是在fastboot模式下进行的。
(4)fastboot需要主机端的fastboot软件配合。要实现fastboot刷机,只有开发板端uboot是不行的,还需要在主机上有fastboot.exe的软件配合。
(5)fastboot在开发板和主机间定义了一套协议。其实fastboot是我们在开发板和主机之间定义的一套协议,这套协议以usb为底层传输物理层,协议规定了主机fastboot软件和开发板fastboot软件之间的信息传输规则。
消息传递可以实现功能有:主机可以向开发板发送命令、开发板可以向主机发送回复、主机可以向开发板发送文件(download)

2. fastboot的工作原理

(1)uboot的fastboot命令将开发板伪装成一个usb从设备。开发板本身并不是一个usb设备,所以开发板直接插到电脑上电脑是没有反应,没有提示发现设备需要装驱动的。伪装之后开发板就被主机windows识别成一个安卓手机了。
(2)主机的fastboot软件和开发板的fastboot程序通信来工作。平时工作时,开发板端只要执行了fastboot命令进入fastboot模式即可,剩下的就不用管了。主机端通过运行fastboot命令,传递不同的参数来实现主机端和开发板端的通信。
譬如主机端执行fastboot devices,则这个命令通过USB线被传递到开发板中被开发板的fastboot程序接收,接收后去处理然后向主机端发送反馈信息,主机端接收到反馈信息后显示出来。
(3)我们学习fastboot时分析代码的思路就是:
主机端:fastboot.exe的源代码没有,fastboot协议虽然能找到但是很枯燥,所以主机端没有去分析的。
开发板端:主要分析点就是uboot如何进入fastboot模式,fastboot模式下如何响应主机发送的各种命令。

3.开发板端的命令分析

3.1 开发板进入fastboot模式

根据我们之前的刷机经验我们知道,在整个刷机过程中我们的开发板只要直接在uboot中输入fastboot就好。
那么我们就先看下fastboot指令在uboot中的实现

do_fastboot
	set_partition_table(设置分区表)
	fastboot_init(初始化特定于单板的fastboot)
	LCD_turnon
		LCD_Initialize_NONAME1
			LCD_setprogress(0) //开发板LCD显示
	进入while 循环,这样我们开发板端就已经逐步被好了,如下的就是在循环中判断是
	否发生了中断
	fastboot_poll(检查中断寄存器、判断是否连接USB、)
		fboot_usb_int_hndlr
			fboot_usb_pkt_receive(处理开发板端接收函数)
				fboot_usb_int_bulkout
					fastboot_interface->rx_handler(函数指针)
					指向cmd_fastboot.c/rx_handler

这个过程主要进行了读取分区表,并进入了while循环,等待主机发送指令

3.2 主机端发送的指令解析

找的过程涉及到USB物理层通信的一些概念和理解,相对比较复杂。最终uboot这边的fastboot是通过rx_handler函数来处理主机端fastboot软件发送过来的信息的。fastboot协议的命令实现都在这个函数中提现。所以这个函数的分析就是重点。
(1)大文件download机制
rx_handler函数中通过if和else分成了两部分,if部分负责处理download,else部分负责处理命令。usb传输单次传输最大只能有限个字节(64、256),因此当我们发送比较小的东西(譬如命令)时可以单次传输完毕;当我们发送比较大的东西(譬如文件)时就必须要分包发送。

(2)down后的响应机制。开发板端通过fastboot_tx_status函数向主机发送响应,主机显示这个响应。

3.3 uboot中fastboot有关的一些宏定义设置值

CFG_FASTBOOT_TRANSFER_BUFFER 配置fastboot工作时的缓冲区地址,fastboot在执行某些功能时需要大块内存做缓冲区(譬如download时),这里就是在给他配置缓冲区。
CFG_FASTBOOT_TRANSFER_BUFFER_SIZE fastboot缓冲区的大小。

3.4 开发板端对主机fastboot命令响应

fastboot命令响应之:fastboot reboot
作用:在PC机这边可以远程重启开发板


                
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值