openwrt固件提取方法

最近遇到一個問題,openwrt路由器網口無法聯網。

通過WIFI進入到路由器系統後,逐個文件排查,並未發現異常,而且系統參數確實未檢測到網線接入(但可用的網線確確實實是接入了的)。

cat /sys/class/net/eth0/operstate

返回值一直爲down。

 

此時考慮是否是硬件問題,準備將路由器的固件提取出來,燒錄到另外一臺路由器。

如果按照目錄一個個打包拿出來是不太可行的,一方面工作量大,另一方面可能會有漏掉的文件,因此使用dd指令將系統整個firmware提取出來。

root@OpenWrt:/# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00040000 00001000 "u-boot"
mtd1: 00010000 00001000 "u-boot-env"
mtd2: 00e30000 00001000 "rootfs"
mtd3: 0060e000 00001000 "rootfs_data"
mtd4: 00170000 00001000 "kernel"
mtd5: 00010000 00001000 "art"
mtd6: 00fa0000 00001000 "firmware"

系統固件firmware包括rootfs和kernel,因此在提取時只需提取mtd6即可。

又由於openwrt的固件大小爲16M,因此提取指令爲:

dd if=/dev/mtd6 of=/tmp/test.bin bs=65536 count=250

(65536*250=16M)

提取到bin文件後,就可以通過tftp指令將文件推送到PC,然後燒錄到其他路由器上進行對比了。

 

上傳過程中發現另外一個異常:

提取到的文件命名是完整的16M,但是通過tftp上傳給windows10電腦後,大小變成了16M+77K,導致燒錄時大小超限。顯然是windows下的tftp server沒好好幹活,或者有些特殊的規則?

由於一般採用Linux電腦搞開發,就直接用Linux電腦重新接收了一遍,大小正常,燒錄OK。

 

本文主要是介紹固件的提取方法。

順帶說一下問題分析結果:燒錄到其他路由器後,工作正常,說明爲原路由器硬件問題。之後通過硬件測量確認是網口相關引腳電平不正常,導致網卡沒有起來。萬惡的靜電。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章