日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

A840S黑砖修复过程(2013-05-22修改)

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 A840S黑砖修复过程(2013-05-22修改) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先感謝su_ky大神,沒有他的博客和帖子,這次救磚根本沒有成功的可能。其次謝謝A840S交流群284998898的Sunny deng,沒有他提供的分區鏡像同樣也完成不了這次的工作。
現象:手機完全沒有反應,同時按音量上下+開機鍵都沒有反應。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
  • adb?shell?su?-c?'dd?if=/dev/block/mmcblk0?of=/cache/partition0.bin?bs=512?count=1'??
  • 參考su_ky的帖子,這里應該是MBR分區表,所有的分區都在這里。但是當我打開這個bin時,看到的基本全是0,奇怪了,難道群友搞錯了,沒拿到第一扇區?然而最后的MBR結束標志55AA又是對的。這時候索性
    [plain]?view plaincopy
  • adb?shell?su?-c?'dd?if=/dev/block/mmcblk0?of=/cache/partition0.bin?bs=512?count=20480'??

  • 拿回來10M的鏡像,在0x200除看到了EFI PART的字樣,這下明白了,原來A840S是采用了GPT的分區方式,啟動分區表位于第二扇區。關于GPT分區格式的詳細介紹見
    GPT的維基百科 ,以下是840S的GPT分區表頭:

    這個表頭截圖不完整,應該也是512字節,這里說明一下。
    根據wiki和這個表頭,我們可以得到840S的完整分區表:
    [plain]?view plaincopy
  • adb?shell?su?-c?'dd?if=/dev/block/mmcblk0?of=/cache/partition0.bin?bs=512?count=9'??
  • 這個應該只要是GPT分區的EMMC都是一樣,用上面的命令就可以得到partition0.bin


    然后是partition.xml,在上面得到的partition0.bin中,每一個分區表項的大小是128字節,包含了該分區的UUID、序號、起始LBA、結束LBA和分區名稱。截圖如下:

    根據這個我們可以得到partition.xml和rawprogram0.xml:
    partition.xml

    [html]?view plaincopy
  • <?xml?version="1.0"?>??
  • <data>??
  • ????????<physical_partition?number="0">??
  • ????????????????<primary?order="1"?label="modem"?size="65536"?readonly="true">??
  • ????????????????????????<!--file?name="1_modem.img"?offset="0"/-->??
  • ????????????????</primary>??
  • ????????????????.........??
  • 參考圖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 plaincopy
  • 包含文件名的分區記錄:??
  • ????????????????<primary?order="1"?label="modem"?size="65536"?readonly="true">??
  • ????????????????????????<file?name="1_modem.img"?offset="0">??
  • ????????????????</primary>??
  • 說明:第1分區,名字是modem,大小65536,只讀,鏡像文件名是1_modem.img,偏移量為0??
  • ??
  • 不包含文件名的分區記錄:??
  • ????????????????<primary?order="20"?label="recovery"?size="10240"?readonly="true">??
  • ????????????????</primary>??
  • 說明:第20分區,名字是recovery,大小10240,只讀,不需要覆蓋該區域數據??
  • 建議盡量少的覆蓋分區,特別是在BINX包中沒有的那些分區。
    sbl1分區必須加上字段 bootable="true"? ,這個不加的話手機仍然不會有動靜,因為找不到程序入口。我在這里困擾了很久……,感謝su_ky,是 這個地方 提醒了我,第54樓。
    840和820不同,GPT都是primary,沒有extend分區。

    rawprogram0.xml
    [html]?view plaincopy
  • <?xml?version="1.0"??>??
  • <data>??
  • ????????<!--NOTE:?Sector?size?is?512bytes-->??
  • ????????<program?file_sector_offset="0"?filename=""?label="modem"?num_partition_sectors="131072"?physical_partition_number="0"?size_in_KB="65536"?start_sector="1024"/>??

  • 同樣參考圖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
  • emmcswdownload.exe?-f?8960_msimage.mbn?-x?partition.xml?-s?16G??
  • s是整個EMMC的大小,840S是16G


    仔細檢查命令行的輸出,看看有沒有報錯的地方,順便核對一下輸出中的地址,看看每個img對應的地址是不是分區表中那個,不對的話修改xml文件重來。

    至此,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修改)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。