宽带技术网

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15124|回复: 65

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

[复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 ! g! X5 @- f6 W3 K
8 G3 n8 e8 B5 C0 j! u2 J" j, j/ L
此操作有风险,只供研究所用,由此造成任何损坏请自己担责+ y6 o4 y. N. ~# l; J/ ^

$ k- j6 F- B2 `- E: ]: p& H$ s8 `/ F一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,), t$ a) B7 s) ^8 J% ^
4 F+ R% p; B( B
1,备份各分区:) j1 c; O) Q/ F- e, L8 `9 R% N+ I$ R
插入U盘(剩余空间大于1G)# s) o  ?5 }0 g$ ?1 T3 d* C9 ]  C% y
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)( F5 {' H7 i8 o4 h1 i$ k
6 i5 h$ \* G. ]! s- ~& p
备份命令如下:
; z4 G3 V: h8 L" m, Q. Q: m. u8 e4 V
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin* ~+ u# l* |  z( _4 a, [( M; _
) Q4 _! f. ~$ x' E2 E$ N; X4 s" e7 d
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
2 o, ~' X/ ^1 d( `: H1 s7 s* Y! {9 r( r& O( P( Y* _
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
& ^' N0 d6 ], ]4 T0 m' {# B* o# e+ ^2 S# B
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
) v" d1 U3 J8 C: `3 E
' r: {1 C; W' X4 z3 ^dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
2 r0 f5 D/ L7 F! I5 M/ z' j" n+ s# o" i
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin9 a3 [+ |6 B4 a* r, A
+ t7 ~# r4 c; |1 v( e
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin# V' K3 p, o# H3 a' M& ]

& M5 u7 Q# ~' d- vdd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
0 ?/ q9 N& S5 @) E$ r# e6 O) j  P! U: {$ i' r9 L7 F9 e
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
- V) p1 d1 I# w/ L# U
1 N. [9 i9 _0 S  v% Q/ ~0 Qdd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin7 b7 ^% Y2 N. x4 z3 u6 L1 C
" b& D; J9 P6 u/ \$ @
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
0 M* c0 g# N: h& c+ x
5 D$ S+ K; v2 q: l# udd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin. `5 }' n3 i/ [( f" D
' [" K! c  K, D$ }+ E
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin# `2 Y) x7 S& l0 {& |/ T; ~% j
2 V" U% S6 u( i- O0 H) S* x3 _
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin4 o3 c" t- ]& s& `2 }- b8 M4 ^
/ }2 v" k& x7 E8 m! F
U盘根目录下这些 bin文件就是各分区的完整备份
7 t: R  M$ V' W9 Z
# F: O" c1 u  ^7 y9 ]1 WA和B分区是一样的,所以只需备份其中一个即可- r  v7 m: p; l  o! O# @, l& ~6 T, \
各分区的意思如下:
* O9 S8 \4 H! U; _mtd0: ="startcode"
. D0 Y2 P! y  t$ h# k! c" N  Vmtd1: ="ubifs"
6 }3 f" i# u% X0 ]: b, \) bmtd2: = "reserved"
. _5 ]7 |& J: y1 Rmtd3: = "ubootA"! ~4 d+ q' w, O
mtd4: = "ubootB": j6 U8 J% T) n& G+ r2 |
mtd5: = "flash_configA"$ g4 _2 L8 n" ]1 w  M, }
mtd6: = "flash_configB"+ f; W' z9 @& l
mtd7: = "slave_paramA"
- J1 J4 J8 I% a9 n: A5 ]/ lmtd8: = "slave_paramB"
, y, U% U9 g" [3 j0 R5 Qmtd9: = "kernelA"
6 W2 q+ M# E4 ]  k1 g( i" Pmtd10: = "kernelB"4 K: W: P% I" k  h) n
mtd11: = "rootfsA"7 R8 ]. ?  P: k& x9 D% t7 ~
mtd12: = "rootfsB"
, E3 {& Y! d) Zmtd13: = "wifi_paramA"- p5 u& C: ~: V- N/ x% Z
mtd14: = "wifi_paramB"7 N) Q6 r4 t! [. f/ ^! e/ O) _
mtd15: = "system_param"
0 ^! V" b' a4 B& Omtd16: = "file_system"
* B, f: [5 M2 U% q) k  fmtd17: = "frameworkA"* S. _! F3 t% e1 \  J* _
mtd18: = "frameworkB"
, E. i" Q; e/ @7 `1 k  j5 i9 M% emtd19: = "apps"
2 o$ D9 Y5 {* t. z& w/ m6 L3 [ubi0_13 = "jffs2"
3 O* V, v6 z- B
  l# d$ N" \+ ^% ?2 I8 {- [3 b" M
2 `3 d; k$ S5 S5 ]: Y& d3 T其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
% K! }0 G( i2 C3 y9 h4 A. d2 `9 l6 t1 V: X1 p% p  f/ g/ J
其它光猫可以使用命令cat /proc/mtd
2 d' j' G  B) x查看详细分区结构,8145V结果如下:
" T, P3 {0 F) z  W* |9 a

5 t+ \3 ~+ u5 A0 ~1 _
$ \) n9 W& a: O. j& p/ q
dev:    size   erasesize  name
- G+ T: O; m1 P# j6 P1 U" Vmtd0: 00100000 00020000 "startcode"8 @; K6 n" L$ R. L$ I
mtd1: 0ff00000 00020000 "ubifs"2 s$ f$ K, ?! Q: ~; @! I6 C
mtd2: 00000000 00000000 "reserved"6 _# y# d4 W& m! s3 M- N, a+ c; J+ b
mtd3: 0009b000 0001f000 "ubootA"
. p/ n; D% e' Dmtd4: 0009b000 0001f000 "ubootB"6 M/ S4 q1 F) \) F2 H  e6 m
mtd5: 0003e000 0001f000 "flash_configA"
. B( V8 e. g% w/ m8 h( dmtd6: 0003e000 0001f000 "flash_configB"
2 G; ]& q4 i$ emtd7: 0003e000 0001f000 "slave_paramA": F3 i: g2 d0 N4 n1 \
mtd8: 0003e000 0001f000 "slave_paramB"4 J3 P$ W& ~7 v3 V
mtd9: 00307000 0001f000 "kernelA"
6 _  {$ W- _9 V& Z2 j5 Nmtd10: 00307000 0001f000 "kernelB"3 E# a3 ?; S3 w' Q2 |8 h4 _
mtd11: 02815000 0001f000 "rootfsA"3 r/ k' J& z8 e
mtd12: 02815000 0001f000 "rootfsB"
8 l) `/ Q% E" D+ K1 ?9 K. |0 K+ Umtd13: 0003e000 0001f000 "wifi_paramA"
5 h! _5 x2 [2 O( V# g+ R$ G0 Qmtd14: 0003e000 0001f000 "wifi_paramB"
" ]* f6 V8 ?4 C) E- \mtd15: 0003e000 0001f000 "system_param"
3 v  G% a! z) t3 _+ A, G# y$ D; fmtd16: 0141a000 0001f000 "file_system"+ |6 p/ n% g; `% L( O( H4 V
mtd17: 0081d000 0001f000 "frameworkA"$ t! Q, s, A$ L+ I8 y1 O: U# I
mtd18: 0081d000 0001f000 "frameworkB"4 ]  [6 W. i, y; z% X2 j" C  ?
mtd19: 07003000 0001f000 "apps"
. j5 w6 c& l8 t; A8 z+ j# I% J0 v9 G, S  }+ ~' G

$ x% n+ }' R$ S4 x/ }8 [然后根据这个详细结果来修改备份和还原分区命令
3 F5 ~( U: b+ ~* f4 I4 J, x( E; x3 c3 i2 T5 @$ |4 ^
$ Y8 i3 `( u& }+ O! i# c
6 r: f! k+ I/ u, L) O: ]; [. P

; a4 I7 f4 ^! j9 {1 u% N0 u2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
% S( \* Q) X& O( P' @/ a将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开. ]9 x+ G( V, H, d2 I# |! ]
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值5 p$ w1 _/ c9 Y8 W- y* n6 j9 p
6 z/ |, ?) `& X% w
下面用rootfs作为示例
+ g2 d. q( M9 |
" m* S4 `- g, m: c: _2 L$ u, o. o: V9 a  e, |. w( `& F) i7 k; S$ g
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图( z9 f5 G& O5 c! o0 k- n0 e
7 z! I9 ]# J  X0 M& u! _

# }) h9 ^* s# V1 K9 a) c: M点  确定  开始查找,会看到一堆杂乱的乱码如下图:
6 ~& Z- D5 H. p" w4 I! o
* _' M) }+ `: t8 B. m+ i找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除8 E8 |; ?  G: U' v* i
; A, I9 n# L" s
删除后如下图
0 I8 c- h1 Z# L) k( P3 \5 v% `; [) r" d( `, t+ x
9 g" n' [: }4 c
然后保存,就是一个完整无多余的分区bin文件% H' K, W0 }1 m0 U9 ]- I6 k
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
, P# p8 k' U0 }% Y4 ~: C1 I1 Q
7 p8 D  I! \4 I3 S8 K% ?/ O3,还原到光猫分区中(此操作风险很大,请自行承担)# [6 ?$ J- }( m
将修改处理好的bin文件复制到U盘上,插入光猫USB口$ p4 f) S) ^' a  H  o
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)7 D2 |' s) x& C5 p5 O, R
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
# t0 H  }# O. |, \7 k, s, m! |
7 R1 ~3 o! r$ N8 o7 P+ ]# Ldd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
7 s' }1 s! V9 r; y4 O/ ^! R! ^# M% a) S7 s. T$ V& i
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock113 H! `9 k" }0 q. Y9 y& M9 H  v
0 O+ d4 L1 n( d5 b1 f8 Q
% _/ ~) ?4 b* z& I* X" Y. t# K
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动# p9 t2 P4 Y/ f

( d2 X6 R1 _! F" b8 T* b) m6 K还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,8 f0 i) ]8 W( |4 B

: O5 T: @3 i- x# [此操作在某种承度上可以代替刷机,也可以看作是手动刷机
/ G( Q) Z. v5 h" w* Y* u0 l7 K5 L4 p/ V( A+ w4 L" s- B
二,合成线刷固件(使用组播工具或WEB页面刷机)$ D& Z- k( j) f1 N

* Z  A( E) g7 C2 r8 U1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以., y/ Z. A5 [) v  d
这里使用一个论坛上别人所发的补全shell的固件作为示例
) ]% H8 L  }2 A; g, n, L7 @a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
0 m4 b4 B1 c, E. t% I项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存- `; P7 L# A6 x: ^

5 l* s  d# g% y) M% a. ^
' A9 e4 u$ x  C& Y  Tb,点添加项目,选择修改好的9-kernel.bin
5 E, E  _+ d' E项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh9 u  @2 N0 @: M- `* R: Q: U  V
如下图
; D0 h) o$ ^9 l# ?5 G  a$ E5 p8 H& I+ h# T9 I
0 r9 I; m5 D. O6 ]* C5 x0 G
c,点添加项目,选择修改好的11-rootfs.bin% f# V9 f9 p2 r, X
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图* G# E0 y7 S, W% M. Z+ k+ `
1 a5 i2 E" N9 r5 S% i

, ~* d' d: L+ r6 a. C! P& \7 ~$ T2 o3 |
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
1 \6 R% E+ p8 }5 {( ~6 c9 |- m来个补好后的固件图
9 |" y' N9 X. n( Q1 E4 a. {2 e5 s) c1 s$ W( \
4 a! }9 n  M% k" ]8 c8 e3 {
/ A: [6 {. C) K
2 {# Y& W7 b5 V5 e. T- j
! M& E# S: h, y4 x: x4 O( |3 j

6 R$ [$ r- ^; i% ^8 T未完待续% \# q: M9 K% O: r! D, e
$ s* z4 v  y: ]

+ _3 _! X0 R1 }- o0 j) r/ ?# X9 B9 B2 q* P- Q

) a5 [( ?) i6 V* t- P) W  ~' J2 s6 }: u5 ]5 q) W

7 W& l) n6 U5 m( E+ I- ~* E5 Y8 o6 @) V+ g+ p9 I! `

0 `! L- J3 g; g7 Q' k4 ~% V9 k* D- L* z3 Y  H
( f% ]0 i8 k2 ?0 I1 e" ^' N
" G( N: _. w8 h8 ^8 a$ ]
' D7 L! D1 y# H0 R; ?8 M

本帖子中包含更多资源

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

x

点评

版主为什么删你 固件帖子 抢他生意了  发表于 2019-4-30 13:46
请教一下,如果光猫没有USB口,使用TFTP dd if=/dev/mtd0 of=后面有什么格式  发表于 2018-11-9 14:43
发表于 2018-9-22 19:01:00 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-22 19:57:13 | 显示全部楼层
3 q% Z$ W5 ?6 N7 d  Z: i! v) P8 H
支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑
2 a. h3 B% H8 D( p) i6 P9 \* W# q; Q: m& P6 [  J6 ]
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改

点评

论坛上那个018的开shell就是  发表于 2018-9-25 15:09
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

粤公网安备 44152102000001号

GMT+8, 2019-9-16 18:55 , Processed in 0.211742 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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