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。

 

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

顺带说一下问题分析结果:烧录到其他路由器后,工作正常,说明为原路由器硬件问题。之后通过硬件测量确认是网口相关引脚电平不正常,导致网卡没有起来。万恶的静电。

你可能感兴趣的:(openwrt)