根據新老平臺,高通平臺線刷包至少要這樣幾個基本文件,但不一定全部都需要:
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文件提取
略