宽带技术网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1927|回复: 28
打印 上一主题 下一主题

华为光猫分区备份,还原,制作固件教程

[复制链接]
跳转到指定楼层
1#
发表于 2018-9-22 16:48:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 5 Z7 s5 ?& ^# a3 P& j) m- ^
/ i+ s9 d( \0 R& u+ z8 [
此操作有风险,只供研究所用,由此造成任何损坏请自己担责$ b6 U- ^+ m: E5 n# L- j
9 J# L1 w% c+ [5 A
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
+ n8 K4 U( O# Q$ y- v
8 v) T' I: n6 f$ n2 }5 D1,备份各分区:
" a: m( }; a9 P' l( |5 k插入U盘(剩余空间大于1G)
0 ]0 K2 v9 ^# Y; n3 D- j一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)( U+ j: ?+ N4 ^4 }( {. n

. L4 B  t) n/ B1 u* _备份命令如下:
/ |6 v# `0 m* U
  D9 K- Q2 N0 @$ ]% add if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
# s% T5 @  S% ~4 K0 Q' l& I# ~$ G! a9 ~# i+ Y7 _( d
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin7 _# g( A1 f4 D# j( {
  ?7 I( G, t" n. q% W4 k3 o
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin0 ?& @8 F# i5 q  C  ~
- \# f5 i* w9 s
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin1 ]% V* S) T, Q$ ]! M( m# q

) Z( X5 u- c: M' G5 i8 Wdd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
3 p6 n5 F( ?8 U0 B1 a; ?2 s. V+ M4 x& d! Z& f; }
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
4 T$ d4 g& l  l# B& y
( C2 S4 T! Y: ^5 S1 qdd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
, D. B. _: V( \) z2 n% y  y. ~5 U; h, {5 z5 f
dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin$ g  X, t. ?, t+ G. Y+ K$ e
) T0 C, V7 W8 f: N. a/ o
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
  m( W& R) f5 ]2 u9 |
1 {% ?, P0 J5 q2 P! b3 Udd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin& \* {7 Y4 P( S) Y7 b: I5 R/ f

, @' [0 t; y% J- e$ Fdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin3 P& K* i% L) R& T2 R3 V0 Z$ {; W
. ]+ g" O% s$ V
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin7 r$ _9 T; M- I& y0 j' \$ v
# I# }8 F9 e3 V: t2 C. [& y
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
$ r: r0 i. r% @1 {, }. ?- y2 b; b0 {2 w
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
8 x" D6 }" z# T0 ]& M& p
1 N! o' ]0 R5 A8 M* f2 {' |U盘根目录下这些 bin文件就是各分区的完整备份" E, N9 ]  j7 a# F

2 }7 B: r! e" ?9 R8 h/ sA和B分区是一样的,所以只需备份其中一个即可( _" F; [$ \& K0 Q) l! G  `: J% d/ {; j
各分区的意思如下:5 w) A  k* b7 q( s9 N% ]+ Y
mtd0: ="startcode"3 A5 C6 x7 |, n% K
mtd1: ="ubifs"# r* ^2 w9 C% D8 \- L+ g; T6 F; T
mtd2: = "reserved"
' P4 e( }) c: o5 j1 {mtd3: = "ubootA"9 q: |* `1 G) `; {  s* B
mtd4: = "ubootB"1 V7 f; n! a) H7 |
mtd5: = "flash_configA"% e5 y  S  W7 o0 {/ n  }. X
mtd6: = "flash_configB"8 @* b( I% T, K5 G: [7 a
mtd7: = "slave_paramA"
; U+ s- t. L4 {/ p" pmtd8: = "slave_paramB"
2 w7 ?0 _7 z7 T: S7 ^6 cmtd9: = "kernelA"0 |2 S! x6 T" S4 z8 U, w
mtd10: = "kernelB"5 G5 p5 A% m; a0 X6 g6 H8 n+ y( f
mtd11: = "rootfsA"
3 S; ]( T& \$ j3 J7 O" W, t6 Bmtd12: = "rootfsB"
% j' r) V, h1 X) V8 c# h3 T3 Z0 kmtd13: = "wifi_paramA"  E5 x9 w; k& h3 {) @
mtd14: = "wifi_paramB"4 P$ X( a7 P3 g- M
mtd15: = "system_param", M, x0 `! A  t; x0 t5 j% v
mtd16: = "file_system"1 _' P) s- f% Y, l! ~
mtd17: = "frameworkA"/ |+ O# |, a+ ~$ S5 c8 f# V6 }
mtd18: = "frameworkB"2 J: {* N5 ^+ U" V( q
mtd19: = "apps"3 X& ]5 Q; D9 |1 w
ubi0_13 = "jffs2"5 m! ]( O$ |, d  U

& k- m/ W- z3 b9 k, x) E/ T. _1 t4 Q" ~: `% Y! t
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
8 N4 V6 c8 F' ]8 W0 l1 h' o  {. S0 ?$ Z" b' w7 S  K& T, ]
其它光猫可以使用命令cat /proc/mtd, |2 ^6 b) _" z" x
查看详细分区结构,8145V结果如下:7 ~' p8 _% {; j$ Q

) e! z! u3 K! Q; E1 K( ~7 R

4 q9 ^; x# z( N; |6 cdev:    size   erasesize  name5 `! ^6 Y" @0 J5 h
mtd0: 00100000 00020000 "startcode", c  Z" z0 F8 @$ ~6 R: a
mtd1: 0ff00000 00020000 "ubifs"
+ K# X0 B" ]6 C* Imtd2: 00000000 00000000 "reserved"
4 a5 }( X$ ~- X- pmtd3: 0009b000 0001f000 "ubootA"
1 @: E5 Z  S7 s, k! D  e2 rmtd4: 0009b000 0001f000 "ubootB"- c0 |& f1 t' \8 v# q8 t9 H. A
mtd5: 0003e000 0001f000 "flash_configA"
! R# j& T, n2 Xmtd6: 0003e000 0001f000 "flash_configB"
4 ]4 F4 V) w6 z; g3 P- I$ Rmtd7: 0003e000 0001f000 "slave_paramA"$ a8 w9 j* b* Q
mtd8: 0003e000 0001f000 "slave_paramB"
) u- ~. `( v: \1 ^' Mmtd9: 00307000 0001f000 "kernelA", o! W% h2 X, C+ d7 w  X
mtd10: 00307000 0001f000 "kernelB"
5 [/ o& @; i: P; bmtd11: 02815000 0001f000 "rootfsA"
9 z" m+ M; s: z1 \# Cmtd12: 02815000 0001f000 "rootfsB"
, x( j5 d* d0 i3 Rmtd13: 0003e000 0001f000 "wifi_paramA"* b5 x" i% r! d2 g8 a1 N9 V: c$ }  u
mtd14: 0003e000 0001f000 "wifi_paramB") I% M) C3 [2 f) g
mtd15: 0003e000 0001f000 "system_param". O1 x) S+ E- y# I/ b/ T
mtd16: 0141a000 0001f000 "file_system"- s$ R8 j1 N, F  o/ _) f
mtd17: 0081d000 0001f000 "frameworkA"
) q- F3 R5 Q% {0 t2 ~8 R0 pmtd18: 0081d000 0001f000 "frameworkB". f; i5 u5 K- t9 B, ?6 q$ U
mtd19: 07003000 0001f000 "apps"7 j- c! }; K" R4 h- o6 j
$ u/ G" j5 w7 i5 @/ _

! f6 F+ B- ?% ?7 N( p然后根据这个详细结果来修改备份和还原分区命令1 R- S8 }$ n2 s; q% v8 L

# g# K9 s0 b2 c! G
$ D) j9 u/ }: F6 F- r" w- }. F! q, L( D# _" b& h

! U* h$ T+ ~/ n2 e/ j  t2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
6 J& x" K9 v! ?. }3 ^3 F将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
$ N1 Q: t+ p0 |  F' R5 Q2 J( r. J直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
- k. D# h- D$ z7 V4 D+ J, l* N7 `0 H2 z& l  Y
下面用rootfs作为示例
' H2 ~/ i* R1 k7 o, x; |; E; k) y
9 [/ U' D7 Q7 b% G) F& m% h
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
1 D8 u5 n/ W/ R1 T9 p4 K3 M
1 p; F3 K! h7 `1 q
0 @; H  \$ c& s, Z) P点  确定  开始查找,会看到一堆杂乱的乱码如下图:5 _6 T% f' s/ `! q$ ^5 @' A+ v

; I% `  D5 U8 g/ o1 n0 Y* ?  \. _$ X找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除1 i0 W0 N+ Z4 J" j6 o9 ^
( a+ q7 k& Z8 A, j0 x% [  w" P7 J% I
删除后如下图( v. }9 e5 e- |5 v: }% v  D
1 s! f4 M  a; M! i& P' H% d
2 ?' \( r  z9 ?) i6 c
然后保存,就是一个完整无多余的分区bin文件
  ~; W& d, F& {- A/ n然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
4 I4 d: G' g: Z; c' T0 ]+ M+ b
2 n! _( ^; I7 l: D3,还原到光猫分区中(此操作风险很大,请自行承担)3 ^- w7 q, T" N5 F9 a: h  i
将修改处理好的bin文件复制到U盘上,插入光猫USB口
& s9 D0 q) ?  U! X然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
1 n  V" B: S, r8 Z- g  J. N& Fdd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
8 B9 M; @8 P! Y: x, h7 a5 b) g4 [0 G
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock91 m# G% i) Y& F  G$ T4 S+ q+ v

/ o: [* y+ z4 V8 tdd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11, ?( _5 R" V6 S' G5 B/ o" ^0 g
7 t3 g2 o, V2 u7 q$ x" D8 H5 R# U" d( |
* Q+ i- y( \5 ^$ H6 {, h  f
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
/ `1 S  z# p7 R, V0 l' W/ Z+ V* C" X5 Y7 Z
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
4 m, [( t! H; P9 Y3 Y$ e0 e- S" d, L& v7 b, f
此操作在某种承度上可以代替刷机,也可以看作是手动刷机
$ F% ^6 k4 c% h1 h. B, @8 i: b
' h) B( D6 O+ K1 F二,合成线刷固件(使用组播工具或WEB页面刷机)3 R! w1 y: J" A3 {/ s+ G8 [6 b

- Q" _7 m  [/ ?9 d' Q. n1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
+ \+ Y6 O) D$ }8 }这里使用一个论坛上别人所发的补全shell的固件作为示例
, L# X+ X, ?0 Ea,然后点添加项目,然后选择前文所修改好的3-uboot.bin
1 f) t3 R% C* A2 V- G- I1 r9 F项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存! |# w. L, a- U  e6 y1 b

7 Q/ \+ C9 f& I' T
0 Z# {7 C% g4 yb,点添加项目,选择修改好的9-kernel.bin
1 H6 g! Q" C/ y/ F( ^项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh
0 K, b8 s7 F) s$ Q& n2 x, @0 z如下图
$ d  L: z; Y5 N2 J# A  ?, X, p& O" x1 }, U
4 U; T2 d3 L, U3 `0 g- ]- d
c,点添加项目,选择修改好的11-rootfs.bin
/ C5 X; W# c5 ?) S项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
6 T/ z! `1 v7 }' E; I, O3 z7 b* G' o; C1 ?/ _; v. F$ r$ b
, \* U2 I: r& C4 ^6 x/ q* }

* S  D' v8 p$ |% G5 b" |最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
% N8 }/ }, Z% q来个补好后的固件图
/ ?+ e- ~/ G5 z' G
: l* Q5 R, f2 T  H
! k& ~' `% L' N; ^/ d
3 P. }+ |* t+ q, f. H- I: B& Z: K2 U# l3 R6 s: e
8 I6 I" |" X/ X: J" b9 N
5 d' J8 e+ F" K1 ?) i2 F/ y
未完待续
7 t* h8 Z* {: f5 w
" ?# a9 N* E, m4 B8 G! `. M' d7 Z
, M* j, l: H/ l* O6 M2 ?4 x7 g
: V) U# b7 Q, K6 k- V# p! K4 Q
7 I8 I. c! |1 [) H0 r2 n! ]) ]" H* `6 |- [4 z

  x1 j  T. r0 ]! \, Q8 _* L0 j: ~9 g7 `* E) j9 e& ]- g# ~

4 w7 l) I) b' k9 v/ |& A) y4 c7 d7 [) p6 ?4 U

, C3 F2 z. j& k/ M6 t' c3 |$ n
' e; M  O" A% {
9 a% K$ V+ E0 _3 q8 B6 N' R0 R

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点评

请教一下,如果光猫没有USB口,使用TFTP dd if=/dev/mtd0 of=后面有什么格式  发表于 2018-11-9 14:43
2#
发表于 2018-9-22 19:01:00 | 只看该作者
支持楼主,学习一下
3#
发表于 2018-9-22 19:57:13 | 只看该作者
& S, r+ s5 }7 C1 a7 P" y
支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
4#
发表于 2018-9-22 20:34:34 | 只看该作者
这个可以有,可以试试以前备份出来的了
5#
发表于 2018-9-22 21:32:26 | 只看该作者
不知道用的是什么软件亲。
6 q: u: A' ~7 J& \, _有些命令为什么我输入之后显视错误呢。

点评

***t 到光猫里打命令  发表于 2018-9-25 15:11
6#
发表于 2018-9-23 00:57:39 | 只看该作者
支持楼主,学习一下
7#
发表于 2018-9-23 08:34:46 | 只看该作者
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑
) {  t7 k: N: L% o5 N9 A. Q) `" V
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
8#
发表于 2018-9-23 10:38:57 | 只看该作者
来了就坐吧
9#
发表于 2018-9-24 06:42:31 | 只看该作者
楼主高手啊,打包工具第一次见
10#
发表于 2018-9-24 07:14:42 | 只看该作者
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|宽带技术网 ( 粤ICP备15054574号 )

粤公网安备 44152102000001号

GMT+8, 2018-11-20 16:14 , Processed in 1.123047 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表