A840S黑砖修复过程(2013-05-22修改)
現象:手機完全沒有反應,同時按音量上下+開機鍵都沒有反應。USB連上電腦后電腦顯示一個“QHSUSB_DLOAD”的設備。這就是典型的黑磚了。
變磚原因:刷機腳本寫錯,把rawdata.img寫入了mmcblk0p8,也就是tz分區。
請繼續前詳細閱讀 su_ky大神的A820L救磚貼 :
經過痛苦的google、閱讀,再google再閱讀的過程,找到此貼和其他一些大神的帖子,終于弄明白了救磚的原理和方法。
救磚原理:通過QPST軟件的emmcswdownload.exe重構一個EMMC存儲鏡像,然后用該鏡像覆蓋手機EMMC,從而修復錯誤的部分,達到至少讓手機能進入fastboot的程度。
準備工作:
1、下載官方的BINX文件,根據su_ky博客的 泛泰binx解包 所描述的方法進行解包
得到一個BIN文件和如下img文件:
2、QPST軟件,我用的是374的版本
3、小米2的刷機程序
4、MPRG8960.hex,8960_msimage.mbn和rawprogram0.xml。這三個是QPST刷機時必需的文件。MPRG8960.hex我不確定是否8960的GPT分區方式的都一樣還是不一樣,它們的獲得方法下面我們詳細地逐一說明,方法來自su_ky的博客。
MPRG8660.hex:這個su_ky大神說了的,我們沒有能力自己生成這個,所以我在網上找了個,需要注意的是su_ky帖子里面提到的820L是MBR分區格式的,840是GPT的,下面再詳細說。我在 這里 找到的,用的是190K那個hex,需要翻墻,各位同學自己搞定。
其次是8960_msimage.mbn:這個文件其實差不多就是整個EMMC的磁盤鏡像,為什么說差不多呢,根據我的判斷,它不是完整的磁盤鏡像,而是記錄了分區信息,然后只包含了在partition.xml中提供了文件名的分區的鏡像。這就是評論中那位兄弟有疑問的地方。比如system、preload這些分區就只有分區信息,沒有實際的分區鏡像包含在內,所以8960_msimage.mbn才不顯得巨大。
它至少需要partition.bin、partition.xml和sbl1\sbl2\sbl3\rpm\tz\aboot這幾個分區的鏡像才能構建出來。為什么說至少呢,看我下面的分析。partition.bin是分區表,這個是一定要的。另外根據我的變磚原因,是我把rawdata.img寫入了mmcblk0p8,也就是tz分區。經查看,rawdata.img大小是1kb ,而tz分區大小是512kb,按理說即使寫錯了也沒有越界,我的分區表應該是好的。但是為什么黑磚了呢?后來我估計是tz分區保存了啟動早起需要的重要文件,它被寫壞了造成的黑磚。由此,我就在想我只要構造一個mbn把tz分區重寫應該就可以了。同時之前刷機時rawdata寫錯了位置,改寫的地方反而沒有寫進去,所以我就多準備了rawdata.img。各位可以分析自己的變磚原因,準備相關的img。最好是在手機正常的時候備份一個完整的所有img的鏡像,用別人的可能造成IMEI被篡改等等問題。
接下來就先得到partition0.bin:將正常的同型號手機用USB連接到電腦,確保電腦上有adb工具,手機已經root,通過下面的命令得到partition0.bin:
[plain]?view plaincopy
[plain]?view plaincopy
拿回來10M的鏡像,在0x200除看到了EFI PART的字樣,這下明白了,原來A840S是采用了GPT的分區方式,啟動分區表位于第二扇區。關于GPT分區格式的詳細介紹見
GPT的維基百科 ,以下是840S的GPT分區表頭:
這個表頭截圖不完整,應該也是512字節,這里說明一下。
根據wiki和這個表頭,我們可以得到840S的完整分區表:
[plain]?view plaincopy
這個應該只要是GPT分區的EMMC都是一樣,用上面的命令就可以得到partition0.bin
根據這個我們可以得到partition.xml和rawprogram0.xml:
partition.xml
[html]?view plaincopy
參考圖2
order = 分區序號size? = (結束LBA-起始LBA+1)/2?? 轉換成十進制,為什么除以2是因為每扇區512字節,2個扇區是1K。
label = 分區名稱
offset=分區相對于第一個分區的偏移量
這里最好包含所有分區的信息,其中file name 字段只在需要覆蓋對應的分區的時候才需要,上面提到的partition.bin\sbl1\sbl2\sbl3\rpm\tz\aboot都是需要的,其他的應該都不需要,可以恢復以后再刷。如果不需要覆蓋對應的分區,請像下面一樣注釋掉,不懂怎么注釋的去百度"xml語法 注釋"。
[html]?view plaincopysbl1分區必須加上字段 bootable="true"? ,這個不加的話手機仍然不會有動靜,因為找不到程序入口。我在這里困擾了很久……,感謝su_ky,是 這個地方 提醒了我,第54樓。
840和820不同,GPT都是primary,沒有extend分區。
rawprogram0.xml
[html]?view plaincopy
同樣參考圖2,label、size_in_KB同上
filename除了必須的那幾個之外,還需要覆蓋的分區只需要填文件名,前提是你從正常的手機或者以前的備份里面得到了相應的img文件。建議也只填寫前面提到的那些分區
num_partition_sectors = 結束LBA-起始LBA+1? 轉換成十進制
start_sector=起始LBA? 轉換成十進制
其中partition0.bin的start_sector是0
partition.xml和rawprogram0.xml有了,下面就可以得到最后一個關鍵的東西8960_msimage.mbn
QHSUSB_DLOAD驅動在小米刷機工具運行時和QPST安裝時都會自動安裝
QPST的安裝和添加端口不說了,網上找。現在假定你運行QPST Configuration,并且添加好端口,在Phone里面已經能看到一個設備處于Downloaded狀態了。
把下面這些文件都放到同一個文件夾,像下面這樣:
然后開一個cmd,運行如下命令生成8960_msimage.mbn:
[plain]?view plaincopy
s是整個EMMC的大小,840S是16G
至此,MPRG8960.hex,8960_msimage.mbn和rawprogram0.xml都齊全了。把這三個文件拷貝到Miflash.exe所在目錄下,剩下的事情就簡單了,按照Miflash.exe的提示進行刷機。就是刷新,然后刷機。然后等漫長的進度完成。不出意外的話,你的840S就應該顯示那個充電的大圓形圖標,還有那句韓文。
這時拔電池,然后同時按音量上下+開機鍵就可以進入官方升級或者fastboot界面了,fastboot boot recovery.img就可以進recovery重刷rom了。網上教程很多,不再敘述。
本文中的數據還請同學們根據自己手中的partition0.bin進行計算、修改。個人觀點,僅供參考,一切后果請自負。
總結
以上是生活随笔為你收集整理的A840S黑砖修复过程(2013-05-22修改)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wifi漫游测试过程
- 下一篇: MSM8974 fastboot烧写软件