博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android boot
阅读量:4181 次
发布时间:2019-05-26

本文共 1969 字,大约阅读时间需要 6 分钟。

1:  soc  的 usb 功能应该在 给cpu 上电之后就应该work, 但是在与pc通讯过程中(以下所有的pc与device的通讯都可以看成是 一个client 一个 server)的协议都 cpu厂商自己定义的, 而不是通用的android 的adb协议或fastboot协议,所以在我所经历的不同的cpu vendor中,在最开始download code 时候(在没有 fastboot的前期),都有自己的烧录工具。比如: qualcomm 的(啥工具,忘了叫什么名字了), intel的xfstk, nvdia的nvflash.    不同的cpu,  这些工具 使用的 usb 通讯上层协议,都是 cpu厂商自己的, 而非fastboot,adb 这种通用的。

intel的xfstk, nvdia的nvflash,qualcomm的emergency download 模式,cpu的固化程序 会 判断,按键,或者第一次打板子emmc是空的时候,系统会自动判断并且进入这种 cpu厂商的recovery mode。  注意,这个和 后来的recover mode 不是一个recovery,后来的那个是android的recovery mode。  

2:boot /code  的角色,权限 ,所能掌控的信息

一个设备有很多boot,很多阶段,每个阶段都对应着能够访问的限定的空间。一般而言,越底层(cpu厂商),权限越高; 却上层(user),权限越低。

=================================

所以首先划分一下都有哪些角色。

cpu 厂商:

cpu厂商的客户,开发者:

user:

资源可分为: cpu , sram,dram, emmc

emmc可分为:reserver 区,user 能访问的区域, 开发者能访问的区域(recovery), 

=================================

同时权限越高,进入操作期就越早,这个期间能够被操作的介质空间也越小。 然后逐步把权力 下方给 权限小的,并且同时把大的资源enable起来。

例如:

开机流程: 

cpu 上电后 固化代码 在 sram中执行, 

download 流程:  

开机和download的流程其实本质上是一样的,见下面的

================================

其中一个概念:执行的代码,必须是了解代码要执行对象的参数信息,那就是说这段代码 有着他所属的生活群体。  比如固化code(let's say it boot0)了解cpu信息,但是他不了解外围器件由cpu厂商的客户(即开发者)挑选的器件的信息,比如emmc的型号,参数等, 这些信息只有开发者知道,所以要有一段code配置这些设备,let's say it boot1.

boot0执行完之后,如果想更进一步执行有关 开发者选定器件 相关的code,就需要: load boot1到dram中,并把控制权交给boot1来执行,例如初始化emmc,得到了更大的存储空间。然后load bootloader上的程序(在emmc上),这是开机过程;  或者准备download pc上的code到emmc上, 这是download 过程。 

这种 关系,承担任务的转换,主要与进入操作期的时间早晚(比如上电后是有boot0最开始有机会执行),和对他所能掌控的设备(比如boot0无法得知外围器件信息,如果想更进一步,只能由boot1来完成),来决定的。 但是boot0-->boot1角色的转换,是有boot0来发起的

=================================

======================================================================================================

recovery mode:这段区域是user不可见的一段区域, 所以他们不会破坏掉他,这也就是为什么有时候操作系统不工作了,人们会选择到recovery mode来做一些工作。

recovery 其实就是一个小型的最基本的操作系统

recovery 区域只是存储recovery 系统的一个分区而已,而partition表(在windows系统中叫mbr),所以这个分区表更是user不能访问的。

但是fastboot是可以重写partition表格和根据表格烧录code的,类似于windows中的bois。

fastboot是 android在boot阶段的一个usb协议。

adb 是androi的os起来之后的一个usb协议。

=====

转载地址:http://lvhai.baihongyu.com/

你可能感兴趣的文章
NCNN部署例程 mxnet-gluoncv之simple_pose
查看>>
Ubuntu18.04查看显卡信息并安装NVDIA显卡驱动driver + Cuda + Cudnn
查看>>
电子元件二极管封装SMA,SMB,SMC的区别
查看>>
ALTERA verilog Error (12007): Top-level design entity is undefined
查看>>
VS2019 LINK Error 无法找到 mscoree.lib
查看>>
Verilog_MyHDL的使用
查看>>
VisualStudio2019的怪问题,在_Container_base12::_Orphan_all引发了异常: 读取访问权限冲突
查看>>
相机技术--摄像机720p、1080p、2mp、3mp、5mp;VGA, QHD, FHD, 2K,4K对应的分辨率分别是什么
查看>>
Visual Studio 的问题:unable to locate visual studio installer
查看>>
MCU_STM32F4XX_HAL_ADC_Start_DMA只能触发一次的问题
查看>>
Android四大组件之Service示例
查看>>
Android四大组件Service之前台进程(201807最新源码)
查看>>
实战Android:用AccessibilityService捕获volume按键
查看>>
实战Android:通过BroadcastReceiver监听Home,电源Power,和音量变化Volume键
查看>>
Android Studio错误:找不资源文件包 -- Cannot resolve symbol "R"
查看>>
实战Android:图片处理之ColorMatrix和Matrix实例
查看>>
Android Bitmap入门:getPixels的正确理解
查看>>
VS2017的怪问题--错误: 未能完成操作。未指定的错误
查看>>
Anaconda闪退的问题AttributeError: 'str' object has no attribute 'get'
查看>>
matplotlib中plot.show()不显示图片的问题:如何把backend=Agg配置为TkAgg
查看>>