与fastboot相关的知识

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。


一、fastboot的基本知识

1、什么是fastboot

(1)fastboot是android使用的一种刷机方法。

  • android系统设计了2种刷机方式:fastboot和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模式下如何响应主机发送的各种命令。


二、uboot的fastboot代码分析

1、do_fastboot函数

  • do_fastboot函数本身涉及到很多操作SD/Nand等磁盘的,主要目的是为了刷机。要完整的分析fastboot的函数细节很复杂很麻烦,我们并不是要做这个。

2、rx_handler函数






函数调用关系

do_fastboot
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:缓冲区的大小。
(4)如果刷机时烧录uboot和zImage都正常,但是烧录android镜像x210.img时错误,提示image too large……
  • 错误的原因就是x210.img太大了,超出了CFG_FASTBOOT_TRANSFER_BUFFER_SIZE,因此uboot的fastboot报错。

三、fastboot的一些命令

(1)fastboot命令响应之:fastboot reboot

  • 在PC机这边可以远程重启开发板

(2)fastboot命令响应之:fastboot getvar

  • 作用是得到一些fastboot中定义的变量名的值,譬如version、product
(3)fastboot命令响应之:fastboot erase

(4)fastboot命令响应之:fastboot download

(5)fastboot命令响应之:fastboot boot

(6)fastboot命令响应之:fastboot flash

(7)fastboot命令响应之:fastboot oem

  • oem命令是用户自定义的,其他命令全都是fastboot协议定义的。
  • 有时候自带的命令不足以使用,oem厂商可能希望定义一些自己专有的命令,则可以使用oem命令。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCL向量相加

原文http://www.olcf.ornl.gov/training_articles/opencl-vector-addition/ 本文仅仅是为了学习OpenCL而做的的相关翻译。 由于原文中的例子不能在我的环境中运行,因此做了一些改动。 通过这个例子能很好地了解OpenCL的编程模型。 1. 简介 这个例子是表示了两个向量…

AndroidManifest.xml文件解析(转帖)

原帖地址:http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html 一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等…

windows 7系统搭建本地SVN服务器的过程

1、安装svn:TortoiseSVN-1.7.9.23248-x64-svn-1.7.6; 1、在PC机的D盘创建如下目录:D:\svn\project\workspace; 2、右键点击目录workspace文件,选择Tortoise->Create repository here,即在此创建版本库(Y); 然后你就会看到D:\sv…

x210开发板的BSP(其中使用buildroot文件夹建立rootfs)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:buildroot详解和分析_Alex-wu的博客-CSDN博客_buildroot 板级支持包(BSP,Board Support Package),是由引导程序(Boo…

Android中Activity启动模式详解

在Android中每个界面都是一个Activity&#xff0c;切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Android总Activity的启动模式分为四种&#xff1a; Activity启动模式设置&#xff1a; <activity and…

EDM的九大用途盘点

对于什么是EDM&#xff0c;前面博主的博文已经有所介绍。那么&#xff0c;EDM的九大用途是什么呢&#xff1f;本文博主就为大家介绍一下。 交叉营销交叉营销是通过把时间&#xff0c;金钱、构想、活动或演示空间等资源整合&#xff0c;为任何企业&#xff0c;包括家庭式小企业、…

分析根文件系统中的/etc/inittab文件

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、文件简介 &#xff08;1&#xff09;/etc/inittab文件属于运行时配置文件。 &#xff08;2&#xff09;这个文件是文本格式的&#xff0c;即内容由一系列遵照某格式的字符组成。 &#xff08;3&…

MySQL导入.sql文件及常用命令

MySQL导入.sql文件及常用命令 在MySQL Qurey Brower中直接导入*.sql脚本&#xff0c;是不能一次执行多条sql命令的&#xff0c;在mysql中执行sql文件的命令&#xff1a; mysql> source d:/myprogram/database/db.sql; 另附mysql常用命令&#xff1a; 一) 连接MYSQL&…

第一次软工作业展示——潘学

第一次软工作业完成啦&#xff01; 回首这个作业的完成过程&#xff0c;我是很有收获。这个作业有几个难点&#xff1a;1、在给定目录下读取TXT文件的内容&#xff1b;2、从读到的内容中分析出单词&#xff1b;3、统计单词的出现频率并输出。 我之前只学习过C和java&#xff0c…

【0802 | Day 7】Python进阶(一)

目 录 数字类型的内置方法 一、整型内置方法&#xff08;int&#xff09; 二、浮点型内置方法&#xff08;float&#xff09; 字符串类型内置方法 一、字符串类型内置方法&#xff08;str&#xff09; 二、常用操作和内置方法 优先掌握&#xff1a; 1.索引取值 2.切片 3.长度le…

bzoj 1084 DP

首先对于m1的情况非常容易处理&#xff08;其实这儿因为边界我错了好久。。。&#xff09;&#xff0c;直接DP就好了&#xff0c;设f[i][k]为这个矩阵前i个选k个矩阵的最大和&#xff0c;那么f[i][k]max(f[j][k-1]sum[j1][i])&#xff0c;那么对于m2的时候类似与m1的时候&#…

uboot源码——命令体系

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6394710.html 一、uboot命令体系基础 1、使用uboot命令 uboot启动后进入命令行环境&#xff0c;在此输入命令按回车结束&#xff0…

RCP:如何移除Toolbar中的Quick Access

问题 自4.x开始&#xff0c;Quick Access搜索框成为Toolbar的“标准装备”&#xff0c;一般删除Actionset的方式似乎不起作用&#xff0c;通过Quick Access&#xff0c;用户很容易访问到RCP程序本来想隐藏的功能。 解决方法 在WorkbenchWindowAdvisor的openIntro中加入以下代码…

XMPP文件传输(XEP-0096协议说明)

XMPP XEP-0096协议是XMPP中的文件传输协议。 关于文件传输&#xff0c;在xmpp协议中有不少协议可以实现&#xff0c;而XEP-0096协议是其中非常简单的一个协议。由于邮件被删&#xff0c;我的代码demo丢失&#xff0c;因此只能在这里给大家讲一下其中的逻辑实现&#xff0…

[笔记]VI编辑器的学习

来源&#xff1a;http://team.youthol.cn/?p453 2013-03-22 09:20:00 在Vim中利用替换功能就可以将“^M”都删掉&#xff0c;键入如下替换命令行&#xff1a;:% s/\r//g 就可以类似的“&#xff5c;&#xff5c;”都删掉&#xff0c;键入如下替换命令行&#xff1a;%s/Tab键…

uboot源码——环境变量

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6398515.html。 一、uboot的环境变量基础 1、环境变量的作用 在不改变源码、不用重新编译的情况下&#xff0c;可以通过设置环境变量…

Linq To Sql进阶系列 -目录导航

博客园CLR基础研究团队|CLR团队精品系列|C# 3.0专题 [Linq To Sql进阶系列] 目录导航 1 Linq To Sql进阶系列&#xff08;一&#xff09;-从映射讲起 本系列&#xff0c;或多或少&#xff0c;直接或间接依赖入门系列知识。但&#xff0c;依然追求独立成章。因本文作者水平有限&…

uboot源码——mmc驱动分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习&#xff0c;以及博客http://www.cnblogs.com/biaohc/p/6409197.html的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、uboot与linux驱动 1、uboot是裸机程序 狭义的驱动的概念&#xff1a;操作系统中用来具体操控硬…

VB与Java颜色值的转换

正常的 RGB 颜色的有效范围&#xff0c;是从 0 到 16,777,215 (&HFFFFFF&)。每种颜色的设置值&#xff08;属性或参数&#xff09;都是一个四字节的整数。对于这个范围内的数&#xff0c;其高字节都是 0&#xff0c;而低三个字节&#xff0c;从最低字节到第三个字节&am…

Dreamweaver MX显示汉字为乱码的解决方法

推荐几种解决方法:a.在“编辑”&#xff0d;“首选参数”中设置“新建文档”->默认编码&#xff1a;utf-8或者gb2312&#xff08;取决于你的网页编码&#xff09;&#xff0c;并勾选“当打开未指定编码的现有文件时使用”;此时每次打开文件时都没有乱码了&#xff0c;也不额…