原帖发布于某米论坛,被某个超级无聊的家伙给删了,鄙视之~
前段时间,帮助一位朋友成功的修复了一台变砖的小蚁摄像头(一直亮黄灯、刷机无效),原帖:
t-13481104
其实之所以能帮到那位朋友,也是因为我之前从网络上学到的相关知识,以及之前自己曾经修复过720p和1080p摄像头。
近来看反映变砖的朋友还不少,也很难从客服等渠道获取真正有帮助的指导(客服也就会建议重置、重刷官方固件,甚至还会扯sd卡不满足要求之类的无关事宜),感觉有必要写点东西,供需要的朋友参考。
之所以用“等品牌”这仨字,是因为大多数网络摄像头基本上都大同小异。甚至不仅是摄像头,所谓的智能路由器(如小米等)与这些摄像头的相似度也很高,很多理论知识和方法都是通用的。
归根结底,这些东东用的都是嵌入式linux,这是上面我说的相似性的根本原因。
----------------------------
言归正传~
1、先说最核心的:要修复变砖的摄像头,需要:
- TTL线
- 同型号正常机子的全部固件(注意全部二字)
- linux基础知识和动手能力
2、可修复的故障类型:当然限于软件(固件)问题导致的变砖,如升级中断电死机、使用了错误的软件导致固件紊乱、不小心删除了不该删除的文件等。
3、一些基本理论:
嵌入式linux的设备类型很多,根据我所知道的摄像头和路由器,有以下几点总结:
3.1、厂家发布的固件升级文件往往仅仅是全部固件的一小部分,最典型的就是小蚁摄像头。固件都是存储在flash芯片上,所以要用到mtd技术(别担心,很容易理解),复杂的不懂,知道几点简单的:
3.1.1 这些flash芯片有不同的类型,比如SPI的(一般都比较小,4M~32M居多)、NAND的(一般都比较大,128M起基本上都是,比如小米路由器3等)
3.1.2 flash芯片存储了全部固件,根据功能设计,厂家会把芯片的全部存储空间分成几个分区存储不同的内容,典型的必然有如下几个分区:
- boot 分区,也就是引导分区、启动分区,以u-boot居多(可以说大部分嵌入式linux用的都是u-boot)。这个分区非常重要,只要这个分区没坏,即便其他的所有分区都坏了,也可以很容易的修复。原因就是u-boot不但提供了启动功能,还提供了刷写固件的功能,可以说是不拆芯片修砖的最后一道防线。这个分区要是坏了,就只能采取更为麻烦的方法了(比如用编程器直接对芯片编程等)。
- env 分区,有的叫para分区等名称,即环境分区或参数分区等,很小,存储的内容往往是传递给内核的启动参数。
- kernel 分区,有的也叫os分区等,也就是内核分区,存储的就是linux内核。
上面3个分区一般建议经验不够丰富的不要轻易去动!
- rootfs 分区,有的也叫root,就是linux的根文件系统。我之前修复的两台小蚁摄像头就是因为rootfs分区被搞坏了变砖了。
3.1.3 上面4个基本上所有嵌入式linux设备都会有的,下面的几个则不一定都会有,取决于厂家的具体设计。比如小蚁720p的摄像头(夜视版和非夜视版的固件完全相同)除了上面4个外还有以下几个分区:
- conf 分区,看名字应为配置数据;
- home 分区,注意!小蚁官方发布的固件升级文件名称就是home,升级的就是这个分区!这仅仅是前面强调的“全部固件”的一部分!之所以变砖后刷官方固件没用,原因就是其他分区如rootfs甚至kernel分区坏了、固件升级仅仅刷新home分区,当然就没用了!就像脚被砍断了你往他胳膊上缠绷带肯定不会有用是一个道理。
- vd 分区,不知道干啥的,忽略吧(或者哪位大虾指教一下?)
3.2、小蚁1080p摄像头的分区除了720p的7个外,多了一个ver分区,感觉像是保存版本信息的。小方摄像头的分区有:boot、kernel、rootfs、rescure(感觉是急救用的)、etc、usrconf这6个。小米路由器mini(开发版)的分区有11个,可以看出和这几个摄像头的相似程度有多大:all(也就是全部,对应整个flash芯片)、bootloader(启动)、config、factory、os1、rootfs、os2、overlay、crash、reserved、bdata。
3.3、怎么看具体某台设备的分区信息呢?很简单,登录之后,cat/proc/mtd即可。
3.4、 嵌入式linux大多数都会设计一个TTL口用于调试维修等,这个口本质上是一个串口、设备启动后它就是一个终端,有的甚至连root密码都不用输就直接进入root用户登录状态。我们修复变砖摄像头的关键就是这个。
4、看完了上面的内容,相信你就知道如何修复变砖的摄像头了,其实很简单:就是既然固件坏了那就修复固件。
4.1、首先要找一台同型号的工作正常的摄像头,使用TTL连接或者telnet、ssh登录后备份出全部固件:
- 先运行cat/proc/mtd看一下分区信息
- 再运行mount命令看一下当前挂载的全部文件系统,比如小蚁的sd卡会挂载到/home/hd1,如果没有的话这儿要挂载sd卡或者nfs用作备份文件的存储目的地。
- 使用dd命令备份所有分区,注意是所有。强烈建议破解或者连接ttl后第一件事就是备份所有分区。
ddif=/dev/mtd0 of=/home/hd1/0boot.bin
依次修改上述命令的数字和每个分区的备份文件名称(建议分区号+分区名称)并运行。
4.2、把拷有备份文件的sd卡插到故障摄像头、接好TTL线、开机,在终端运行以下命令恢复相应分区:
ddif=/home/hd1/4rootfs.bin of=/dev/mtd4
根据具体情况选择正确的备份文件和分区号,比如小蚁摄像头变砖一般都是这个分区。如果不行,再依次把mtd1(env)、mtd2(conf)、mtd5(home,也可以卡刷)、mtd6(vd)恢复(恢复一个重启一次观察是否恢复正常)。注意,轻易不要动mtd0也就是boot分区、mtd3也就是os分区。如果前面几个分区都恢复过还是不行,那就再恢复一次os(内核)分区,boot分区还是轻易不要动!
5、写在最后
如果需要帮你分析故障、出主意修复,请一定要说清楚具体型号、故障现象(灯啥色、多观察几分钟看闪不闪、有没有声)、出故障前你对它到底做了什么,信息不完整谁都没辙。
如果你根本看不懂我在说什么,也不了解linux、ttl这些,也没有兴趣或精力搜索阅读相关文章,真心建议花点钱重新买个新的吧,旧的留作纪念等以后你有兴趣了再说,或者直接扔掉、卖掉、捐掉(也可以送给我,哈哈)。
当然,现在已经有了热心网友编译的包含telnetd的busybox,可以直接用了。
联系客服