根据新老平台,高通平台线刷包至少要这样几个基本文件,但不一定全部都需要:
8x10_msimage.mbn----平台镜像,是个完整的磁盘,就是sbl,tz,sdi,rpm四个分区。
MPRG8x10.mbn----对应平台的串口烧写协议。
gpt_both0.bin----对应EMMC的分区表,因为不同批次的EMMC大小有细微差别,这个分区表不包含最后一个分区信息。
rawprogram0.xml----要烧写的具体文件跟对应的扇区位置。
patch0.xml----刷机软件根据手机服务端返回的具体磁盘大小打上最后一个分区的补丁、完成分区表头校验的配置文件,没有正确的patch0.xml分区表头就不能通过校验,手机也启动不了,这个文件很重要。
相关原理
高通的CPU内固化了一段引导程序(PBL),我们可以把它类比成电脑主板上的UEFI或BIOS固件,但是功能要更强大。
以高通骁龙801(8974AC)为例,在正常情况下,手机加电后,"PBL"会跳转到手机内置存储(相当于电脑的硬盘)的"SBL1"分区(512K),"SBL1"进过一系列检测后,继续加载"tz"与"aboot"(APPSBL)分区。而"tz"+"aboot"就能提供FastBoot刷机模式了。显然,如果"SBL1"坏了,那屏幕自然没有反应,更别说进入各种刷机模式了。
事实上,手机主板刚下生产线的时候,内置的存储卡上没有任何数据,就处于这种"黑砖"状态。但是我们买到手机时,里面却已经被刷入了系统。显然厂商有一种非常规的刷机方法。这也是坛子里介绍的方法。
看到这里,你应该可以明白,使用高通CPU的安卓手机理论上是刷不死的,只要硬件没有坏,无论你怎么刷,都不必担心。
当然,如果能在手机刚买来的时候,就首先对内置的存储卡的分区表与重要分区进行备份,那搞起机来,就可以更加有持无恐了!
紧急下载模式
所谓"紧急下载模式"的含义是:由CPU内置的"PBL"负责与PC交互,实现对内置存储卡的读写。有如下两种方式进入:
(1)自动:主板刚生产出来,emmc还是裸片时,或者SBL运行异常时,系统自动进入紧急下载模式。
(2)手动:通过软件设置'魔数',然后热重启,PBL检测到'魔数'后,强制进入下载模式。
两种手动进入紧急下载模式的方法
(1)在彻底关机的前提下(长按15秒或拔电池),按住"音量+"不放然后插上USB数据线 [推荐的方法,简单至极]
(2)使用"adb reboot edl"或者"adb reboot dload"命令 [仅在第一种方法不好用的时候,才考虑使用这个方法]
这样就能模拟一块"黑砖"出来。可以用于验证或者演习一下如何救黑砖。
而不需要真的使用"fastboot erase aboot"人为制造一块黑砖,实在是没必要的
以下是个人的一些笔记,实际开发中有不同情况,可供参考
1.关于rawprogram0.xml文件计算方法:
同行start_sector + 同行num_partition_sectors =下行start_sector
同行size_in_KB 乘 2 = 同行 num_partition_sectors
(后start_byte_hex="0x34000000" - 前start_byte_hex="0x14000000 )/1024 = size_in_KB
2.分区大小可以根据df命令获得,单位为KB(也可以参照partitions)
physical_partition_number="0" size_in_KB="1572864.0"
3.start_byte_hex:
start_byte_hex="0xe18c000" 取值来源:start_sector的值 x 512=转换成16进制
4.获取8960_msimage.mbn文件
partition.xml和rawprogram0.xml有了,下面就可以得到最后一个关键的东西8960_msimage.mbn
QPST里面有emmcswdownload.exe
把下面这些文件都放到同一个文件夹,像下面这样:
然后开一个cmd,运行如下命令生成8960_msimage.mbn:
- emmcswdownload.exe -f 8960_msimage.mbn -x partition.xml -s 16G
s是整个EMMC的大小,840S是16G
5.关于磁盘扇区信息的获取sector信息
方法一:(需要安装busybox)
fdisk -l /dev/block/mmcblk0
获取分区数据依次代表的意义:分区序列 引导 开始 终止 容量 分区类型ID 分区类型
fdisk /dev/block/mmcblk0
p 列出分区信息
方法二:
1.在recovery下(确保system/xbin/parted的执行权限)
adb shell
parted /dev/block/mmcblk0 print
2.或者开机状态(需要ROOT,并且安装busybox)
adb devices
adb shell
su
parted /dev/block/mmcblk0 print
修改分区名字,PARTED命令下输入name 23 grow,完成后退出。
你还可以在输一次命令:adb devices
adb shell
su
parted /dev/block/mmcblk0
print查看23分区的名字是否为grow,如果是就OK了
方法三、根据gpt文件提取
略