)
高通驍龍865這臺機器放到現(xiàn)在依然有不少人在折騰。不管是屏幕摔了想救數(shù)據(jù)、系統(tǒng)崩了進(jìn)不去桌面、還是淘了一臺二手機器想徹底重刷一遍繞不開的一個底層工具就是QPST。很多人第一次聽到QPST會以為它是個“刷機軟件”跟那些一鍵刷機工具差不多實際上它的定位更底層——它管的是高通芯片的底層通信走的是EDLEmergency Download模式也就是俗稱的“9008模式”。這個模式下的手機基本等于一塊磚屏幕不亮、系統(tǒng)不啟動但只要主板沒壞、閃存沒壞QPST就能把固件重新灌進(jìn)去。這篇內(nèi)容我打算把整個流程從頭到尾講透從驅(qū)動安裝、進(jìn)入EDL、QPST配置、固件選擇到刷機過程中可能遇到的各種報錯和排查思路。適合兩類人看一類是手機徹底黑磚、想自己動手救回來的普通用戶另一類是經(jīng)常折騰高通平臺設(shè)備、需要一套穩(wěn)定可復(fù)現(xiàn)流程的玩家。我會盡量把每一步的“為什么”也講清楚而不是只丟一串操作讓你照做因為刷機這件事理解原理比記住步驟重要得多。1. 先搞清楚QPST到底在干什么1.1 QPST與EDL模式的關(guān)系QPST全稱Qualcomm Product Support Tools是高通官方給開發(fā)和維修人員用的一套工具集。它里面包含好幾個組件我們刷機最常用的是QFILQualcomm Flash Image Loader。QFIL負(fù)責(zé)的事情很單一通過USB把固件鏡像寫入高通芯片的存儲分區(qū)。它不關(guān)心你上面跑的是安卓幾、是哪個廠商的系統(tǒng)它只認(rèn)芯片層面的協(xié)議。那EDL模式又是什么你可以把手機的正常啟動理解成一條鏈路引導(dǎo)程序加載系統(tǒng)系統(tǒng)加載應(yīng)用。EDL是這條鏈路最前面的一段芯片出廠時就固化在ROM里的一段代碼優(yōu)先級高于一切。只要手機能進(jìn)入EDL理論上就能被QPST識別并寫入數(shù)據(jù)。這也是為什么很多“變磚”的手機還能救——因為磚的只是系統(tǒng)分區(qū)底層引導(dǎo)還在。注意EDL模式和高通9008端口是綁定的。你在電腦設(shè)備管理器里看到“Qualcomm HS-USB QDLoader 9008”這個設(shè)備就說明手機已經(jīng)進(jìn)入EDL并且驅(qū)動正常。如果看到的是其他名字比如帶“Diagnostic”或者“ADB”字樣的那說明沒進(jìn)EDL。1.2 為什么865平臺刷機要特別注意固件匹配驍龍865屬于SM8250平臺這個平臺的固件結(jié)構(gòu)和早期驍龍差異比較大。早期很多機器一個完整的線刷包就是一堆img文件直接按分區(qū)刷進(jìn)去就行。865開始固件包通常包含rawprogram.xml和patch.xml這兩個關(guān)鍵文件QFIL靠它們來決定每個鏡像寫到哪個分區(qū)、從哪個扇區(qū)開始、寫多長。這就帶來一個問題不同機型、不同地區(qū)的固件包分區(qū)布局可能不一樣。你拿A機型的固件刷B機型輕則刷完不開機重則把分區(qū)表寫亂連EDL都進(jìn)不去。所以刷865的第一原則是——固件必須和機型嚴(yán)格對應(yīng)最好連版本號都對上。我見過有人圖省事拿了個“通用包”去刷結(jié)果手機直接變成只能進(jìn)9008、刷什么都報錯的狀態(tài)最后只能上編程器。1.3 QFIL和別的刷機工具的區(qū)別市面上有很多一鍵刷機工具界面友好、點一下就行。但這類工具本質(zhì)上是把QFIL或者類似底層工具包了一層殼遇到復(fù)雜情況反而不好排查。QFIL的好處是它把每一步都暴露給你端口選哪個、固件加載了沒有、每個分區(qū)寫入成功還是失敗日志里都寫得清清楚楚。另外一個區(qū)別是QFIL走的是純底層協(xié)議不依賴手機系統(tǒng)里的任何服務(wù)。這意味著哪怕你的手機系統(tǒng)已經(jīng)完全崩潰、Recovery也進(jìn)不去只要EDL能進(jìn)QFIL就能工作。這是它比那些依賴ADB或者Fastboot的工具更“救命”的地方。2. 驅(qū)動安裝整個流程里最容易翻車的一步2.1 為什么驅(qū)動這么關(guān)鍵QPST要通過USB和高通芯片通信電腦必須正確識別出9008端口。Windows系統(tǒng)自帶的高通驅(qū)動往往版本老舊或者不完整插上手機后設(shè)備管理器里可能顯示一個帶黃色感嘆號的未知設(shè)備或者識別成別的串口設(shè)備。這種情況下QFIL是找不到端口的你點刷新也沒用。驅(qū)動問題的根源在于高通9008端口需要的是特定的USB VID和PID匹配Windows默認(rèn)驅(qū)動庫里不一定有。而且不同版本的Windows對驅(qū)動簽名的要求不一樣Win10和Win11對未簽名驅(qū)動的限制更嚴(yán)這也是很多人驅(qū)動裝不上的原因。2.2 驅(qū)動安裝的完整步驟我一般推薦用高通官方驅(qū)動包里面包含了9008、9006、9091等各種模式需要的驅(qū)動。安裝步驟如下先把驅(qū)動包解壓到一個固定目錄比如C:\Qualcomm_Driver路徑不要有中文和空格。手機關(guān)機按住特定組合鍵進(jìn)入EDL不同機型方法不同后面會講然后用數(shù)據(jù)線連電腦。打開設(shè)備管理器找到帶感嘆號的設(shè)備右鍵選擇“更新驅(qū)動程序”。選擇“瀏覽我的電腦以查找驅(qū)動程序”指向剛才解壓的目錄勾選“包括子文件夾”。如果系統(tǒng)提示驅(qū)動未簽名需要臨時禁用驅(qū)動簽名強制Win10/11在高級啟動里可以設(shè)置。裝好之后設(shè)備管理器里應(yīng)該出現(xiàn)“Qualcomm HS-USB QDLoader 9008 (COMx)”記住這個COM口號QFIL里要選它。提示如果裝完驅(qū)動后設(shè)備管理器里出現(xiàn)的是“Qualcomm HS-USB QDLoader 9008”但帶感嘆號多半是驅(qū)動簽名問題。可以試試在設(shè)備屬性里手動選擇“從磁盤安裝”然后指定驅(qū)動目錄里的.inf文件。2.3 驅(qū)動裝不上的幾種典型情況和處理情況一設(shè)備管理器里根本看不到新設(shè)備。這通常是數(shù)據(jù)線或者USB口的問題。換一根質(zhì)量好的數(shù)據(jù)線優(yōu)先插主板后面的USB口別用前面板或者擴(kuò)展塢。有些劣質(zhì)線只能充電不能傳數(shù)據(jù)插上后電腦完全沒反應(yīng)。情況二設(shè)備一閃而過然后消失。這說明手機進(jìn)了EDL但很快又退出了。常見原因是按鍵松得太早或者電池電量太低導(dǎo)致芯片復(fù)位。保持按鍵按住直到設(shè)備穩(wěn)定出現(xiàn)在設(shè)備管理器里再松手。情況三驅(qū)動裝上了但QFIL里選不到端口。檢查QFIL是不是以管理員身份運行的。另外有些安全軟件會攔截底層USB通信臨時關(guān)掉試試。情況四Win11下驅(qū)動反復(fù)安裝失敗。Win11對驅(qū)動簽名要求更嚴(yán)可以嘗試用測試模式啟動或者找已經(jīng)簽名的驅(qū)動版本。我實測下來用較新版本的高通驅(qū)動包在Win11上成功率更高。3. 進(jìn)入EDL模式不同機型的按鍵和方法3.1 通用進(jìn)入方法大部分驍龍865機型進(jìn)入EDL有兩種方式硬件按鍵組合和軟件命令。硬件方式最可靠因為不依賴系統(tǒng)。常見組合是關(guān)機狀態(tài)下同時按住“音量上音量下”然后插數(shù)據(jù)線?;蛘甙醋 耙袅可想娫础笨吹狡聊缓诘艉笏砷_電源繼續(xù)按住音量上再插線。不同廠商的按鍵定義不一樣有的用音量上有的用音量下有的需要同時按兩個。這個沒有統(tǒng)一標(biāo)準(zhǔn)最穩(wěn)妥的辦法是查你具體機型的進(jìn)入方法。3.2 軟件方式進(jìn)入EDL如果手機還能開機進(jìn)系統(tǒng)可以用ADB命令進(jìn)入EDLadb reboot edl這條命令會讓手機重啟并直接進(jìn)入EDL模式。前提是USB調(diào)試已經(jīng)打開、ADB驅(qū)動正常。這種方式比按鍵更省事但系統(tǒng)已經(jīng)崩潰的情況下就用不了。還有一種是通過Fastboot進(jìn)入fastboot oem edl不過這個命令不是所有機型都支持有些廠商把它鎖掉了。3.3 進(jìn)不去EDL怎么辦如果按鍵和命令都進(jìn)不去可能是幾種原因一是引導(dǎo)程序損壞這種情況比較麻煩可能需要拆機短接測試點二是按鍵硬件本身有問題三是電池完全沒電芯片無法啟動。短接測試點是比較進(jìn)階的操作需要拆開后蓋找到主板上的特定觸點用鑷子短接的同時插線。不同機型的測試點位置不同沒有經(jīng)驗的話不建議自己嘗試容易短路燒板。4. QFIL刷機全流程拆解4.1 固件包的準(zhǔn)備和檢查拿到固件包后先別急著刷。解壓后檢查目錄結(jié)構(gòu)一個完整的865線刷包通常包含rawprogram0.xml到rawprogram5.xml可能更多patch0.xml到patch5.xml一堆.img文件比如boot.img、system.img、vbmeta.img等可能還有g(shù)pt_main0.bin和gpt_backup0.bin重點檢查rawprogram文件里的分區(qū)名和你的機型是否匹配??梢杂梦谋揪庉嬈鞔蜷_看看里面會列出每個分區(qū)對應(yīng)的鏡像文件名。如果發(fā)現(xiàn)分區(qū)名對不上或者鏡像文件缺失這個包就不能用。4.2 QFIL的配置和刷機操作打開QFIL界面看起來很簡單但幾個選項選錯了就會出問題Select Port選設(shè)備管理器里看到的那個9008端口。Select Build Type選“Flat Build”這是最常用的模式。Programmer Path指向固件包里的prog_firehose_ddr.elf文件。這個文件是刷機程序負(fù)責(zé)和芯片通信。Load XML分別加載rawprogram和patch文件。配置好之后點“Download”QFIL就開始刷了。整個過程會顯示進(jìn)度條和日志每個分區(qū)寫入成功會顯示“Success”失敗會顯示“Fail”并給出錯誤碼。注意刷機過程中絕對不能拔線、不能斷電、不能碰手機。865平臺固件比較大整個刷機過程可能持續(xù)幾分鐘到十幾分鐘耐心等進(jìn)度條走完。4.3 刷機日志怎么看QFIL的日志是排查問題的關(guān)鍵。正常刷機的日志大概長這樣2024-01-01 10:00:00.000 Start Download 2024-01-01 10:00:01.000 Programmer Path: ...prog_firehose_ddr.elf 2024-01-01 10:00:02.000 Image Search Path: ... 2024-01-01 10:00:03.000 RAWPROGRAM file path: ...rawprogram0.xml 2024-01-01 10:00:05.000 Start Downloading... 2024-01-01 10:00:10.000 Success: boot.img ... 2024-01-01 10:05:00.000 Download Succeed如果中間出現(xiàn)“Fail”要看它后面跟的錯誤信息。常見的錯誤碼有錯誤信息可能原因處理方向Sahara Fail引導(dǎo)程序通信失敗檢查驅(qū)動、換線、重進(jìn)EDLFirehose Fail刷機程序加載失敗換prog_firehose文件、檢查固件包NAK received芯片拒絕寫入分區(qū)不匹配、閃存壞塊Timeout通信超時換USB口、關(guān)安全軟件5. 刷機失敗后的排查鏈路5.1 Sahara Fail的完整排查過程Sahara是高通芯片和電腦建立通信的第一個階段。這個階段失敗說明電腦和芯片根本沒握上手。排查順序應(yīng)該是先確認(rèn)設(shè)備管理器里9008端口是否穩(wěn)定存在。如果端口時有時無說明EDL沒進(jìn)穩(wěn)重新進(jìn)一次。然后檢查數(shù)據(jù)線換一根確認(rèn)能傳數(shù)據(jù)的線。再檢查QFIL里的prog_firehose文件路徑是否正確這個文件必須和芯片平臺匹配865要用SM8250對應(yīng)的版本。如果這些都排除了還是Sahara Fail可以試試在QFIL里換一個端口號或者重啟電腦再試。有時候是USB控制器狀態(tài)異常導(dǎo)致的。5.2 Firehose Fail和固件包的關(guān)系Firehose階段是刷機程序真正開始和閃存通信的階段。這個階段失敗多半和固件包有關(guān)。最常見的是prog_firehose_ddr.elf版本不對或者rawprogram文件里的分區(qū)布局和實際芯片不匹配。我遇到過一次固件包是從別的機型移植過來的rawprogram里多了一個原機型才有的分區(qū)刷到那個分區(qū)時就報Firehose Fail。后來把那個分區(qū)對應(yīng)的行刪掉重新刷就成功了。所以遇到這個錯誤先仔細(xì)看日志里是在刷哪個分區(qū)時失敗的然后對照rawprogram文件檢查。5.3 刷到一半失敗怎么恢復(fù)刷機刷到一半失敗手機通常還停留在EDL模式這是好事。不要拔線先看日志里失敗在哪個分區(qū)。如果是某個鏡像文件損壞重新下載固件包替換那個文件。如果是通信中斷重新進(jìn)EDL再刷一次。最怕的是刷到分區(qū)表gpt時失敗因為分區(qū)表寫了一半會導(dǎo)致后續(xù)所有分區(qū)都找不到。這種情況需要用QFIL單獨刷gpt_main0.bin和gpt_backup0.bin把分區(qū)表恢復(fù)完整再刷其他分區(qū)。6. 刷完之后的驗證和收尾6.1 首次開機要注意什么刷機成功后QFIL會顯示“Download Succeed”手機會自動重啟。第一次開機時間會比較長因為系統(tǒng)要初始化數(shù)據(jù)。如果等了十幾分鐘還是黑屏可能是固件和機型不匹配或者刷機過程中有分區(qū)沒寫完整。首次開機后建議先別急著裝應(yīng)用先檢查幾個關(guān)鍵功能能不能打電話、WiFi能不能連、攝像頭能不能用、指紋識別正不正常。這些功能依賴不同的分區(qū)如果某個功能異常說明對應(yīng)分區(qū)可能沒刷好。6.2 基帶和IMEI的檢查刷機有時候會影響基帶分區(qū)導(dǎo)致信號丟失??梢栽趽芴柦缑孑斎?#06#查看IMEI是否還在。如果IMEI變成null或者亂碼說明基帶分區(qū)有問題。這種情況需要單獨刷基帶固件或者用QPST里的其他工具恢復(fù)。提示刷機前最好先備份自己機器的基帶分區(qū)和IMEI信息有些工具可以在EDL模式下讀取分區(qū)內(nèi)容。備份下來之后萬一刷丟了還能恢復(fù)。6.3 刷機后的系統(tǒng)優(yōu)化建議刷完官方固件后系統(tǒng)里可能帶了一堆預(yù)裝應(yīng)用。如果追求干凈可以再刷一個精簡版的系統(tǒng)鏡像或者用ADB命令卸載不需要的應(yīng)用。不過要注意卸載系統(tǒng)應(yīng)用可能影響OTA更新自己權(quán)衡。另外刷完機后建議把開發(fā)者選項里的“USB調(diào)試”打開方便以后再用ADB命令。如果這臺機器還要繼續(xù)折騰可以把EDL進(jìn)入方法和驅(qū)動包都存好下次直接用。7. 幾個我踩過的坑和實用技巧第一個坑是驅(qū)動裝好后沒重啟電腦。有次裝完驅(qū)動直接開QFIL死活找不到端口重啟一次就好了。Windows的驅(qū)動加載有時候需要重啟才能生效別省這一步。第二個坑是用了USB擴(kuò)展塢。擴(kuò)展塢的供電和信號質(zhì)量參差不齊刷機這種對通信穩(wěn)定性要求高的操作一定要直插主板USB口。我后來專門留了一根短的高質(zhì)量數(shù)據(jù)線只用來刷機。第三個技巧是刷機前把固件包里的rawprogram和patch文件用文本編輯器打開搜索一下有沒有明顯的機型標(biāo)識。有些固件包文件名看不出來但內(nèi)容里會寫機型代號提前確認(rèn)能避免刷錯。第四個技巧是如果反復(fù)Sahara Fail可以試試先把手機插上電腦等設(shè)備管理器里出現(xiàn)9008端口后再打開QFIL。順序反了有時候會導(dǎo)致QFIL抓不到端口。第五個技巧是關(guān)于固件包的存放路徑。路徑里不要有中文、空格、特殊字符最好直接放在根目錄下的英文文件夾里。QFIL對路徑的處理有時候不太友好路徑有問題會導(dǎo)致加載XML失敗。最后說一個心態(tài)上的經(jīng)驗刷機這件事急不得。每一步都確認(rèn)清楚了再往下走比刷到一半出問題再回頭排查要省時間得多。尤其是865這種固件比較大的平臺一次完整的刷機流程走下來穩(wěn)扎穩(wěn)打比追求速度重要。