fastboot的相关知识
来源:互联网 发布:练塘房价 知乎 编辑:程序博客网 时间:2024/05/16 15:33
以下内容源于朱有鹏《物联网大讲坛》课程的学习,如有侵权,请告知删除。
一、fastboot的基本知识
1、什么是fastboot
(1)fastboot是android使用的一种刷机方法。
- android系统设计了2种刷机方式:fastboot和recovery。
(2)fastboot使用usb作为物理传输。
- 刷机其实就是镜像传输+烧录,fastboot刷机时就是通过usb线来传输镜像的。
(3)fastboot是uboot中的一个命令。
- uboot进入命令行中后,可以在命令行执行fastboot命令,让uboot进入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模式下如何响应主机发送的各种命令。
二、uboot的fastboot代码分析
1、do_fastboot函数
- do_fastboot函数本身涉及到很多操作SD/Nand等磁盘的,主要目的是为了刷机。要完整的分析fastboot的函数细节很复杂很麻烦,我们并不是要做这个。
2、rx_handler
fastboot_poll
fboot_usb_int_hndlr
fboot_usb_pkt_receive
fboot_usb_int_bulkout
fastboot_interface->rx_handler(函数指针)
指向cmd_fastboot.c/rx_handler
- 找的过程涉及到USB物理层通信的一些概念和理解,相对比较复杂。
- uboot的fastboot最终是通过rx_handler函数,来处理主机端fastboot软件发送过来的信息的。
- fastboot协议的命令实现都在这个函数中提现。所以这个函数的分析就是重点。
3、代码分析
(1)大文件download机制
- rx_handler函数中通过if和else分成了两部分,if部分负责处理download,else部分负责处理命令。
- usb传输单次传输最大只能有限个字节(64、256),因此当我们发送比较小的东西(譬如命令)时可以单次传输完毕;当我们发送比较大的东西(譬如文件)时就必须要分包发送。
(2)down后的响应机制。开发板端通过fastboot_tx_status函数向主机发送响应,主机显示这个响应。
(3)uboot中fastboot有关的一些宏定义设置值
- CFG_FASTBOOT_TRANSFER_BUFFER:配置fastboot工作时的缓冲区地址,fastboot在执行某些功能时需要大块内存做缓冲区(譬如download时)。
- CFG_FASTBOOT_TRANSFER_BUFFER_SIZE fastboot:缓冲区的大小。
- 错误的原因就是x210.img太大了,超出了CFG_FASTBOOT_TRANSFER_BUFFER_SIZE,因此uboot的fastboot报错。
三、fastboot的一些命令
(1)fastboot命令响应之:fastboot reboot
- 在PC机这边可以远程重启开发板
(2)fastboot命令响应之:fastboot getvar
- 作用是得到一些fastboot中定义的变量名的值,譬如version、product。。。。。
(4)fastboot命令响应之:fastboot download
(5)fastboot命令响应之:fastboot boot
(6)fastboot命令响应之:fastboot flash
(7)fastboot命令响应之:fastboot oem
- oem命令是用户自定义的,其他命令全都是fastboot协议定义的。
- 有时候自带的命令不足以使用,oem厂商可能希望定义一些自己专有的命令,则可以使用oem命令。
阅读全文
0 0
- fastboot的相关知识
- fastboot相关
- 相关reactjs的相关知识
- OPC的相关知识
- JDBC的相关知识
- 事务的相关知识
- 编译器的相关知识
- 编译器的相关知识
- OPC的相关知识
- IUnKnown的相关知识
- 噪音的相关知识
- xml的相关知识
- sql的相关知识
- JavaScript的相关知识
- 虚拟主机的相关知识
- 声音的相关知识
- 事务的相关知识
- RUP的相关知识
- 龙书第八章理解
- java企业网站源码 后台springmvc SSM 前台静态引擎 代码生成器
- Python socket编程之(二):socket的选项设置
- 【OpenGL】(二)在OpenGL中使用GLSL
- 报团大
- fastboot的相关知识
- 找出两个只出现一次的数(其它都出现两次)Single Number III
- 各种消息队列的比较
- C#与Java的差异性记录
- cc++错误处理方法
- 外部app扫码进入自己app的下载页面
- python 基础 —— 获取当前时间的时间戳
- double加减乘除
- vue 单页项目教程--微信公众号(启动操作)