高通芯片刷机我的分析理解(启动分析故障分析)

												安卓手机高通芯片刷机我的分析理解
 
 高通芯片手机是市面上比较流行的手机系列,例如:小米系列大部分机型,三星系列部分高端机型,中兴努比亚系列,联想手机高端机型,一加手机全部机型,还有华为手机一小部分等等吧。刷高通芯片手机必须知道高通手机的引导过程,而高通芯片手机引导过程相对复杂,我经过一周的学习和思考基本掌握了高通芯片手机的引导过程,我的理解可能有错误之处,希望看到这篇文章的同学给我意见和建议。

我先从总体说一下引导过程:PBL-SBL1-LK-BOOT(安卓引导镜像)-Android
第一阶段. :PBL-SBL1 阶段。手机上电也就是开机,手机先从PBL(Application Primary Boot Loader主引导加载程序)它位于主板的ROM中,(线刷包中没有这部分程序代码,他是固化到ROM中的,出厂就有的无法改变,甚至厂商也不知道具体代码是高通私有的部分)CPU先把它加载到SDRAM中开始执行PBL引导程序,主要是硬件特别是CPU初始化,让CPU正确工作。这一步还加载了系统的下一项SBL1启动的镜像。启动完了之后把控制权交给SBL1.
PBL:对刷机的作用是他有一个紧急下载模式(EDL :emergent download)它有两个特点:
一是它有emmc的驱动程序也就是它能访问emmc。
二是它支持USB模式也就是高通的Qdownload 9008模式 通过 firehouse协议与电脑连接并能够下载数据到emmc,也就是通过刷机软件刷机。
在这种模式下比较典型的刷机软件有两个:高通的QPST软件的QFIL(Qualcomm Flash Image Loader)和小米的刷机软件MiFlash.
说一下这两个软件利用高通9008模式软件的运行原理:它们都需要加载刷机包里的prog_emmc_firehose_8976_ddr.mbn文件,( 8976也可以是其它高通芯片型号)它被称为镜像烧写器,也就是这个文件被刷机程序加载后运行在电脑端,他负责通过firehouse协议与连接了9008模式的手机的PBL程序进行沟通。把镜像文件根据在刷机包里的文件rawprogram0.XML(刷机包的镜像文件在手机里加载的路径)和patch0.xml(补充分区相关的路径)下载到手机端。也就是刷机过程

补充几点说明:

  1. SBL1阶段启动了按键驱动之后通过监听手机用户的按键方法来进入PBL模式。
  2. Sbl1还会模拟出9006端口,并且会加载mass storage(U盘)此时电脑端可以管理手机emmc,比如分区等操作。当然也可以进行crash RAM dump(崩溃时内存转储)工作。分析手机启动时的崩溃原因。例如利用adb工具命令adb erase aboot或fastboot erase sbl1命令来来让系统崩溃(无法发现aboot)SBL1自动转入普通下载模式通过Sahara协议进行下载或刷机。电脑端显示Diagnostics 9006端口和mass storage(U盘)两个条目。
  3. qh-Qdownload9008(comx),9008这个端口号是手机端PBL虚拟出来的,也就是电脑端通过自己comx端口与手机端的9008端口通信,9008端口数据指向PBL引导程序。PBL通过9008端口接受电脑数据通过自己的emmc驱动把数据写到emmc(或flash)中。 2. 高通紧急下载模式(EDL)优点是手机系统不论如何被破坏都能被刷好,因为它不需要 emmc的任何数据。缺点也明显就是这种模式太过强暴把emmc都刷了容易丢失 IMEI号。需要QCN备份数据。如果刷错包很容易变真砖的。
    3.进入紧急下载模式方法:
    方法一:抠掉电池(可以不抠电池),长按 音量下键 + 音量上键,再插入USB线
    方法二:将主板上的紧急下载测试点与地相连(需要拆机并且下载测试点不好找),再 插入USB线。
    方法三:在进入fastboot模式后,利用fastboot erase sbl1,此后插入USB线。
    此方法原理是:PBL引导程序发现二次引导程序sbl1丢失,引导失败所以就自动 进入 急下载模式的过程 ,用紧 急下载模式进行修复。

方法四:在手机正常开机情况下,利用QFIL下载软件时,会有从正常模式转换到 紧
急下载模式的过程
方法五:工厂空的PCBA的板子,在插入USB后,也会进入紧急下载模式
方法六:利用小米的工程线进入。原理是利用USB D+ 接地线(拆开USB线的绿色和黑色短接)
方法七:能正常开机,利用ADB命令进入EDL模式。
方法八:给手机一个硬件gpio下拉,现在还不太明白什么意思(应该是emmc的测试点加1.8v接触也就是短接法救黑砖)。
最后说明一下手机启动到这一步系统还没有初始化显示系统,也就是黑屏状态。但是已经加载了手机按键的驱动,所以手机按键是能够被启动系统感知,和利用的。
用途:在fastboot模式进入不了时,是唯一的刷机方法。

第二阶段. LK阶段。 手机通过第一阶段的PBL初始化硬件,给第二阶段SBL1做好硬件准备,并且PBL加载SBL1镜像(在刷机包里是sbl1.mbn)到CPU的二级缓存L2,SBL1在L2执行,此时并没有初始化DDR(系统内存),所以不能加载主内存中运行。此时SBL1主要工作是初始化系统主内存,主板时钟,arm架构,emmc,按键,等手机硬件。此时系统的硬件处于基本可用状态。此时SBL1还负责加载电源管理模块的PBL初始化电源模块,把相关的硬件初始化,把电源模块的pbl加载到电源的SRAM去执行。把相关的参数放到share模块,供系统调用。最后把lk(高通默认引导程序,最出名的是u-boot但高通没用)引导主程序(在刷机包里是emmc_appsboot.mbn文件)镜像加载到DDR
由于系统加载了硬件驱动了,所以此时可以调用硬件了。故系统引导程序可以扫描手机按键组合来进入PBL的EDL模式(通过一个宏来调用PBL的EDL模式)。但是此时不能进入fastboot和recovery因为没有fastboot协议,也没有进入recovery的所需硬件环境。
SBL1的第一阶段加载QHEE(高通安全执行环境)到系统主内存,SBL1加载到主内存后,把控制权交给QHEE来执行,QHEE是高通特有的环境把安全相关的东西交给它处理,比如密码等问题等。此后引导程序把控制权交给lk(emmc_appsboot.mbn)此时真正进入了引导程序,手机各个硬件都能真正使用了包括显示相关的硬件。手机根据你的按键组合来调用fastboot协议(这是lk中的内置程序fastboot协议,由lk通过USB接口与电脑沟通,此时会虚拟一个端口可能是9008,与EDL不同)和recovery镜像(刷机包里的recovery.img)。
如果没有按键,则系统正常启动加载系统真正内核boot.img,此时如果没有发现boot.img镜像,LK会crash(崩溃),进行内存转储到emmc(Crash ram dump)LK会此时虚拟出9006端口,调用函数boot_sahara_init初始化sahara协议,枚举usb com口及mass storage。通过USB与电脑沟通,电脑端会有mass storage和9006端口出现。把手机emmc当做手机的一个移动盘来操作。此时手机会通过Sahara协议与电脑沟通。下载转储文件。当然我们也可以通过这种方法来刷机,用高通的emmc software download或小米的刷机工具MiFlash来下载刷机。(手机端显示什么我不知道,因为没用过)当然也可以用这种方法给手机emmc分区。
如果有按键组合则进入不同模式:fastboot模式和recovery模式
1.进入fastboot模式方法:

方法一:长按 电源键+音量下键
方法二:抠掉电池,然后长按音量下键,再插入USB线
方法三:进入adb模式,在adb里输入 adb reboot bootloader(PS:必须可以正常开机)
用途:刷整个系统或者刷某个分区
Fastboot模式是手机和电脑通过fastboot协议进行交互的,手机端接受电脑端fastboot命令然后手机端执行命令完成操作。此时由于系统已经加载显示驱动,所以手机端能够显示fastboot模式的画面。(手机端有完整的fastboot模式的命令和协议内容)
2.recovery模式:
方法一:长按 电源键 + 音量上键
方法二:手机正常开机情况下,利用adb reboot recovery
用途:可以备份或者恢复系统(卡刷模式),高级recovery(第三方如CM)还可以root系统,挂载sd卡等操作。
Recovery模式是手机端的recovery镜像也就是刷机包里的(recovery.img)镜像,其实它就是一个微型的Linux系统,和boot.img系统镜像一样的东西。所不同点是recovery只是启动后功能弱。Boot.img包含系统内核负责引导Android系统。此时经过系统不断加载初始化硬件已经可以启动系统了。所以所有硬件都可以调用了。系统进入了真正启动阶段。

前面部分可以看做系统BIOS阶段下面是系统启动阶段。
第三阶段:boot阶段系统启动。lk加载系统内核镜像把控制权交给boot.img真正的引导系统。此时如果处于一些原因,系统可能会进入ffmb模式系统测试模式,(测试硬件如:听筒,话筒,wifi,屏幕,摄像头等等)。当然如果不进入测试模式,则引导系统进入Android世界。这些不是所讨论的内容了。
FFBM模式:
方法一:利用QFIL软件
刷机后,第一次开机会进入该模式,在点击该模式中finish后,此后再次开机不会进入该模式,同样通过fastboot erase misc也可以达到不用进入该模式的作用。
用途:该模式不是Android本身的模式,而是高通的,它的主要作用是用于快速测试手机的一些基本功能。
第三阶段补充说明:当我们关机充电时,手机的充电画面是从boot.img文件里的,说明手机能进入充电模式,系统已经启动到内核模式了。只是没有再向后加载而已。

最后我分析一下通过手机出现画面来判断手机启动进程:
1.手机黑砖模式(不能启动不能连接电脑)不能启动说明手机只能到PBL或者到达SBL1启动emmc-appsbl之前阶段在这阶段我们只能有一种刷机模式EDL进EDL模式的方法只有这么几种:
emmc是空的(出厂),或你人为擦除掉SBL1(不能连电脑无法擦除,行不通这个方法)因为PBL没有检测到SBL1,运行异常所以能自动进入EDL.再就是用小米工程线来进入(原理USB D+ 接地)。再或者拆开手机主板短接emmc测试点接地(电池负极)也就是网上传的短接发(原理是PBL检测emmc异常)。以上都是高通9008模式。
2.手机出现厂商logo此时手机运行在appsbl阶段,加载了lk(emmc-appsbl.mbn)因为手机能显出logo说明手机硬件基本初始化完成。所以手机应该能进如fastboot,recovery,也能引导系统。此时手机通过按不同按键组合可以进入相应的模式如:音量上下键进入9008模式等。(手机硬件初始化完成所以所有硬件都能被检查到的)。
3.手机引导boot(有开机logo)阶段时可能崩溃此,此时手机会虚拟9006端口和mass storage挂载为U盘模式。进行刷机。
3. 当我们关机充电时,手机能充电且充电画面显示在手机上。手机的充电画面是从boot.img文件里的,说明手机能进入充电模式,系统已经启动到内核模式了。只是没有再向后加载而已。此时以上刷机方法都适用。
4.手机有启动动画(注意是动画),说明手机进入Android启动过程了。手机adb模式也可以用了。(adb模式是手机与电脑通讯的协议,当然手机端自己也可以用必须用busybox软件也就是Android壳。大名鼎鼎的Linux的bash壳)。

附注几种协议:firehouse协议pbl用。
Fastboot 协议 aboot用
Sahara 协议 sbl1用
Mass storage 大容量存储协议U盘模式。
MTP(Mass transmission protocol)大容量传输议。
手机刷坏emmc控制器但flash没坏的理解方法:
我的手机刷机之后,启动的logo页面自动关机。现在能有9008模式,能进fastboot不能进recovery。系统刷机没问题能刷进各种刷机包。但就是不能启动。用fastboot earse Cache命令fail。不能访问emmc控制的flash。
分析:
手机能启动到logo页面说明手机基本的硬件没有坏。也能充电,但是没有充电动画显示。说明手机能启动pbl sbl1 aboot。因为手机的logo和fastboot命令都在aboot程序里面所有手机能启动到aboot,手机为什么能启动到aboot因为手机访问emmc flash有两条通道一条是emmc协议,一条是sd卡协议。刷机能刷进的原因是flash没有损坏并且sd协议是有pbl的firehouse协议控制的。刷机时firehouse协议通过sd IC通道与flash交互并没有通过emmc通道,所以手机能刷进系统包。
手机启动到logo界面,说明手机启动到aboot阶段。那么手机是如何启动到aboot阶段的。首先pbl加载sbl1(通过sd卡通道加载,不通过emmc通道,因为此时还没初始化emmc通道)到缓存。Sbl1(通过sd卡通道加载,不过emmc通道,因为此时还没初始化emmc通道)加载aboot到内存,此时aboot初始化emmc,emmc通道可用。Aboot加载boot.img到内存(此时emmc通道可用),经过分析emmc控制器损坏所以aboot加载boot.img时出现错误(此时emmc可用但是emmc控制器损坏),手机不能启动。并且aboot加载recovery镜像时出错(此时emmc可用但是emmc控制器损坏)。此时手机不能再用sd卡通道了,因为这个通道比较慢。并且内存与emmc flash通过emmc协议通信的。此时emmc损坏不能与内存通信,会加载错误。包括fastboot earse Cache命令fail,也是在内存中执行会与emmc通道通信,所以也出现错误。
通过以上分析手机emmc 控制器损坏,但flash没坏。就会启动到logo界面。不能加载recovery不能加载boot.img。但是能通过pbl的firehouse通过SD卡协议与flash通信,能刷进成功但是不能够启动系统。

你可能感兴趣的:(自由写作)