嚴重警告:千萬別用mtd fullflash指令刷入韌體,極有可能刷壞bootloader進而使得TFTP救援完全失效(USB-TTL也無效)。若通電後、只有PWR燈號直接亮起、其他LED完全沒閃動,應當就是U-Boot壞了徹底成磚,U-Boot完蛋、得解焊Flash ROM並透過燒錄器重寫,這成本可不是區區一條USB-TTL。(自己的TL-WR1043ND就這麼走了、所以往後這篇應當也不會更新了~)
用非官方Firmware總會有出事的時候。手邊的TP-Link WR1043ND v1.1 與 WR841N v9.1升級DD-WRT r33375後導致無法寫入FW升降級,百般無奈之下只好嘗試以透過SSH/SCP方式強制寫入。然後WR1043ND v1.1就成半磚了~(全LED燈閃動、無法登入)。
這下玩大了......趕緊找救援方式。印象得透過USB TTL、剛好手邊沒那玩意、但PL2303仿冒品眾多、這下果然一個頭兩個大。
OpenWRT wiki對於TP-Link WR1043ND更換韌體(含救援)解說
原來還有LAN TFTP方式,不過提到是2011後的v1.8才有......碰碰運氣、接上LAN長按reset再接電源,果然不行。非得要USB TTL嗎?
仔細看完後面的註解(if you use Tftpd check log viewer for read request from your router, to make sure your rename is correct)
趕緊點開TFTPD64的Log viewer
Connection received from 192.168.0.86 on port 2569
Read request for file <wr1043nv1_tp_recovery.bin>. Mode octet
File <wr1043nv1_tp_recovery.bin> : error 2 in system call CreateFile 系統找不到指定的檔案。
OpenWRT Wiki提示的救援FW檔名是 wr1043v1_tp_recovery.bin ,而WR1043ND v1.1救援是索求 wr1043nv1_tp_recovery.bin ,少個n字可差別大了!!
將救援FW檔改名為wr1043nv1_tp_recovery.bin再跑一次TFTP救援、成功救磚!!沒想到v1.1即可透過LAN TFTP免USB TTL解磚。
範例圖中紅框的部分為無法上傳復原檔的情況,TL-WR1043ND會連續發出5次請求、若5次皆無法成功上傳便會切回正常開機流程,就需重新進行復原作業(正常情況、5次的時間可能連改檔名都不夠。若出現一次找不到檔案就可以重跑復原了);若成功取得復原檔並上傳、就會出現藍框的訊息,但這只意味檔案上傳成功、不代表完成救援,若檔案內容有誤、救援仍會失敗。
TL-WR1043ND v1無法以DD-WRT的factory-to-ddwrt.bin作為救援FW檔,需先刷入TP-Link官方FW檔、再透過官方FW以更新方式刷入factory-to-ddwrt.bin轉為DD-WRT並升級,順利救磚且擺脫r33375的無法寫入FW問題(與FW檔名無關。此為TL-WR1043ND v1的限制、並非所有的機型都得透過官方FW轉刷升級)。
WR1043ND v1.x由DD-WRT r33375起進行更新、皆須透過TFTP改刷原廠韌體再轉刷DD-WRT方式完成升級。DD-WRT論壇用戶的反應似乎是系統判定image過大無法寫入(?)。WR1043ND v2之後版本無此問題。(後記:以TFTP轉刷方式WR1043ND v1.x可升級DD-WRT至06-10-2018-r36104版本,之後的版本以此方式升級一樣會面臨寫入失敗、LED閃動的情況。)
殼子白拆了、幸好沒折斷卡榫。
(補充說明、關於DD-WRT於WR1043ND的NAS支援檔案格式,目前的r36104可掛載NTFS讀寫皆可,再也不用遷就於EXT2/3或者FAT32。未知哪版開始可掛載NTFS、可確定的是支援NAS的機型使用DD-WRT r36104之後版本可嘗試掛載NTFS裝置。)
追記:嘗試更新r39956發現又可再次成功,但依然無法透過WebUI的更新功能完成、而必須藉由TFTP救援方式更新,且不再具有SNMP功能。根據DD-WRT論壇上的說法,由於Flash ROM的容量限制、8M甚至某些16M的機種因無充分空間可使用包含OpenSSL的版本、而DD-WRT因安全需求SNMP需要OpenSSL,所以開發者基於保護用戶的考量下,對於無法配置OpenSSL的版本也一併禁用SNMP。但也因無OpenSSL導致DD-WRT對應WE1043ND v1的新版本ROM佔用空間減少、而能夠再次刷入。
看著手邊另一台仍有FreshTomato全功能可用的RT-N16,想起這歷程中看過的討論,曾有人拿著TL-WR1043ND v1與RT-N16互打,當時的價差還不及500台票的情況下、還大言不慚的替WR1043ND v1叫好。無論是ROM與RAM明顯差上4倍!WR1043ND v1的優勢大概就是大了兩倍的NVRAM可多放點設定值以及相較穩定點的電容(RT-N16的電解電容掛了一回),但在這種ROM空間侷限功能的情況下、又有何多餘的設定需存放?業配文害人不淺。
而TP-Link WR841N v9.1就直接改用TFTP方式更新。很順利的也解除DD-WRT33375無法更新的困境、刷為r33525。
OpenWRT wiki對於TP-Link WR841ND更換韌體(含救援)解說
WR841N v9.1的救援檔名就是OpenWRT wiki所提示的,以DD-WRT 33525的factory-to-ddwrt.bin改名為wr841nv9_tp_recovery.bin透過TFTPD64一刷就上r33525、免刷回原廠韌體再轉刷DD-WRT,且設定保留未被重設。
最後介紹一下TP-Link(採用Qualcomm/Atheros SoC) TFTP的救援方式(以Windows環境為主)。
1.首先下載TFTPD64或32、備妥救援用FW。可嘗試使用DD-WRT的factory-to-ddwrt.bin改名(若不知對應的救援檔名、可開啟TFTPD64/32的Log viewer分頁、由錯誤紀錄查詢。請見上方範例圖片)、或者以TP-Link官方韌體改名。刷回官方韌體後全設定包含IP位址將回復預設。
2.將與待救援機器連線的網路介面卡、IPv4協定加入(或設定)IP位址192.168.0.66、以及192.168.1.2或192.168.0.2(完成救援、進入官方FW web設定連線用)。
3.執行TFTPD64/32,Browse將路徑指向存有救援FW檔的目錄(注意FW檔名)、或者將FW檔直接置於TFTPD64/32目錄。
4.移除待救援機器電源、插上網路線至任一LAN埠(黃色口)、按住reset鈕、插上電源。若一切無誤,30秒內在TFTPD64/32就會顯示上傳(TFTP開始上傳即可放開reset鈕),接著燈號閃動寫入FW。稍待片刻機器會自動重開機、燈號正常閃動(若無法判斷請TFTP上傳結束後靜待2分鐘)。此時即可透過web瀏覽器連線登入(自行設定的DD-WRT IP位址、或者刷入韌體的預設IP位址192.168.1.1或192.168.0.1擇一嘗試;或者先將網卡的IP位址取得方式改為DHCP、由連線資料查詢IPv4閘道位址)。
5.若步驟4.TFTPD64/32遲遲不顯示上傳、且久按reset鈕、全燈號又再度閃動,表示FW上傳失敗。此時請點開TFTPD64/32的Log viewer,確認救援機器要求的救援FW檔名、比照更改,再重新操作步驟4。
6.若步驟4.確定完成、但仍救援失敗,可能是以DD-WRT為救援FW檔寫入失敗所導致。官方FW檔救援成功率高、但須重刷DD-WRT並重新設定。建議每次更新DD-WRT前先備份設定、萬一得透過官方FW刷回DD-WRT或能還原設定。
順道提提供一下vlmcsd的小心得。網路上很難見到這兩台運作vlmcsd的分享、有的也是轉為OPENWRT再安裝vlmcsd的package。其實TL-WR1043ND v1與TL-WR841N v9的DD-WRT(r41664)本身就能執行vlmcsd。對應的版本(v1112)為MIPS big-endian,可使用musl庫的mips16-openwrt-atheros-ar7xxx-ar9xxx-musl或者static的全部4種編譯版本(含靜態庫檔案較大)。注意要將執行檔設定為可執行權限,手動執行命令要含目前路徑./或絕對路徑,若設定Startup Commands則需使用絕對路徑。若手動執行出現Permission Denied表示未指派執行擋可執行權限、或者使用錯誤架構版本(如little-endian);出現sh: filename not found則是執行命令未包含檔案所在路徑、或者執行系統無函數庫的版本、如mips32-musl。這兩台的DD-WRT本身函數庫僅支援MIPS16 MUSL。
