本帖最后由 ceocn 于 2018-9-23 11:53 编辑 " {' N+ A& _! ^* g- d8 U1 u
. y0 d l3 P. J5 A3 i g
此操作有风险,只供研究所用,由此造成任何损坏请自己担责
* w% U9 i& b3 J( H. t+ D* Y7 _* T# R! ]- Y, ]. M
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)* R$ m: E0 f: r1 t+ e z/ E) O$ c
% J B. B) L& a
1,备份各分区:+ V, O& E1 V( m# x6 ^9 c
插入U盘(剩余空间大于1G)
8 q" F; Q0 [* e3 x$ D0 l一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
/ q" R$ d; A" q* b8 k$ ?; m. w( l9 ]/ r! R: i6 k
备份命令如下:( A, i- R8 h& r2 D: r9 A+ p2 x A" R
% M' K4 f7 A' ~: K0 U
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin" |4 t3 r. w6 x' r, H8 R8 d+ z
B9 `. y) j9 J$ ?5 r" W
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
& m- x `6 O4 p( X$ k+ r* ~
6 W; N! |' l# E. ddd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin( D! v0 r& f' \0 a
' u; ?: w" F( }" u6 o$ Sdd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
4 l& h$ D; d5 D
1 c% B" x' @. H3 m! Ddd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin* l* P2 m) z% e* Z' j O' y' W3 b
# }( q. u: k7 ^2 a, r/ C) p7 rdd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin* d# ?6 p7 E h* L# R+ y
4 M! g! J+ ^$ V. @3 }( ^dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin3 R; q0 X3 s# ~! [/ L5 }, t
3 o! D5 K0 |% s" e; }/ Sdd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin* s/ C0 |) M3 X& O+ l f4 \
- D7 a+ n) m$ n1 Q1 e8 `! s
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin7 S9 `/ r* d2 O
# I4 ^9 } x: V$ T$ [6 b$ @: Edd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin1 ~3 O5 ^9 D1 @$ ]6 T* g. i, D
1 d1 F J) X2 k# A2 e) F1 A: }- X
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin P# Q/ G6 k- Z5 F
$ W4 k0 q3 B% I% Y* Rdd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin! R# E: y; n! r9 L# W/ R2 X
- e4 a. A% G9 _( `: r/ G# j, ~# Y. t
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
4 D) Z# w% X; a( C+ e3 b) a, d6 @! V. ]6 V7 e
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin, f* R, c. U0 T; r: i' j3 V
0 E5 Z! W' V8 r
U盘根目录下这些 bin文件就是各分区的完整备份1 H( i$ N3 B9 ]) T
/ V v# P# H) T( L. [9 I
A和B分区是一样的,所以只需备份其中一个即可3 h5 z0 Q- K: `" D
各分区的意思如下:+ D) i W# c; C9 E+ a
mtd0: ="startcode"* S' R7 m1 M" m8 L% K& `
mtd1: ="ubifs"
9 y) s* b8 q, H4 v" amtd2: = "reserved"4 U/ ^7 a- i) q7 g* r" l2 h
mtd3: = "ubootA"
" e9 U, }; M1 n& i$ i. l1 [$ Emtd4: = "ubootB"3 g! {4 w# }* T3 B- W
mtd5: = "flash_configA"
1 T; W* u# _0 a4 G) C7 x! o" u* S& Rmtd6: = "flash_configB"9 V, s" s9 y( [2 u$ u L
mtd7: = "slave_paramA"5 x* T7 l5 g7 M0 U
mtd8: = "slave_paramB"- ?: b+ R" A W6 j. F2 L
mtd9: = "kernelA"
& F4 K% B' C! {" @& wmtd10: = "kernelB"& D: c* R4 D1 }/ J
mtd11: = "rootfsA"
R2 R5 ^- b3 ^" smtd12: = "rootfsB", ~! p' \: K; I2 ?+ n
mtd13: = "wifi_paramA") \ g+ u( z3 P% f
mtd14: = "wifi_paramB"
; G( n k; L" D; \, Amtd15: = "system_param"0 r/ x- C( ~9 m; o$ P, K- V
mtd16: = "file_system"
* ]1 S2 f3 d: S( q. c4 Umtd17: = "frameworkA"
' s5 X9 Q: ~0 `6 p qmtd18: = "frameworkB"* O1 i' J1 v, A9 ?7 Y/ h) A
mtd19: = "apps"
& q1 E; M1 \% e! f2 Nubi0_13 = "jffs2"' `; \$ l2 B0 g8 a6 t* p$ Q, A
" t }/ W2 Z) e; s" V4 a( e% ]% k r
% x7 U$ D8 q! }, ~% a. z) c
其中最重要的是uboot kernel rootfs 这三个分区,后面也只用这三个文件作为示例
& k) f2 k8 o# ^2 x' K$ t5 h* r( r/ e& ~
其它光猫可以使用命令cat /proc/mtd$ Y$ }0 H$ Y, g3 P1 l* G
查看详细分区结构,8145V结果如下:
@% D* _2 V$ l& S) e# h8 r8 |: g1 T9 t5 z8 d: ]
1 P, {4 I1 b8 cdev: size erasesize name0 H5 U* x0 D; N. r @& X
mtd0: 00100000 00020000 "startcode"
" [1 a1 L+ `% Y N) e. k6 ^mtd1: 0ff00000 00020000 "ubifs"0 |/ M4 L7 b- f! c4 Y1 A# y4 A
mtd2: 00000000 00000000 "reserved"+ \# `. K" G- M
mtd3: 0009b000 0001f000 "ubootA"
S# t: } ?7 X: amtd4: 0009b000 0001f000 "ubootB"
) b6 R/ m' w! ~, |$ Nmtd5: 0003e000 0001f000 "flash_configA"
1 Q' B) n* ?5 V/ t* t* }! V ~0 K ]mtd6: 0003e000 0001f000 "flash_configB"& a' I2 {5 A3 m
mtd7: 0003e000 0001f000 "slave_paramA"( V$ t0 t: j9 ^+ I
mtd8: 0003e000 0001f000 "slave_paramB"
\0 ]+ z* _. `: g9 Gmtd9: 00307000 0001f000 "kernelA"& V, b3 S& L& ~$ K
mtd10: 00307000 0001f000 "kernelB"
8 l9 C; C; ^- B( P7 l& qmtd11: 02815000 0001f000 "rootfsA"
0 e$ j4 N0 P# D" P; N" imtd12: 02815000 0001f000 "rootfsB") k6 E4 y/ j# U: h1 C
mtd13: 0003e000 0001f000 "wifi_paramA"3 |- O1 t; k0 Q% f3 Q
mtd14: 0003e000 0001f000 "wifi_paramB"
I* d# T S- z& Tmtd15: 0003e000 0001f000 "system_param"
' u# L0 ~* C9 _) I% |mtd16: 0141a000 0001f000 "file_system"
2 ]7 u4 Y; i/ \' g; Q5 Q0 Cmtd17: 0081d000 0001f000 "frameworkA"
& T% n% c0 @/ W9 t! ~$ D K2 Amtd18: 0081d000 0001f000 "frameworkB"
* ?% I! p( E& M smtd19: 07003000 0001f000 "apps"
) r. _* z' P$ k4 h. x' u% v; o W2 L: B: m% H& v
`' o9 T* o2 X$ _0 f( z0 ?然后根据这个详细结果来修改备份和还原分区命令
$ V. T: t* T2 N8 s7 m7 l5 y7 }9 [: W$ ~
5 z! d' A* W; A }
0 B. ]: H9 K/ u# }. ]
! h1 c% l' n: X: S; w4 T6 u2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)+ U) J+ _& U& y8 a+ Q: g2 C
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开% H2 z* v' T4 t$ K: l
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值/ N5 Q, }8 f/ j" T) @, b: x, e
?9 D4 D8 o2 O0 ]下面用rootfs作为示例
5 P# F- y8 ^. T7 `# }+ Y
2 S0 Y- D9 l4 ]$ K. X+ I
# }6 X* W: L+ K% W- B; T将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为 十六进制值 ,勾选 向上 查找 如下图
, Y# h4 o7 y0 [5 L2 u. X3 i2 O3 G( @# M {; ?1 j& @7 ]' z
# d" S% V; f. F* H* N点 确定 开始查找,会看到一堆杂乱的乱码如下图:) I% K# J0 z( ~
1 N3 n- c, a3 w找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
- F" f( ^- v1 i6 V6 ~% z) ~3 K2 U! U; M* Z5 h, E
删除后如下图
) H9 w- ^8 O8 B9 g* b0 D0 F, f
$ ~/ Z) L, t" b7 M
; _3 `% C) ]6 ]# n+ ~& o然后保存,就是一个完整无多余的分区bin文件8 J8 [: m* z& G2 q
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
: i& \6 }7 x; ~- e4 S3 H
; [; ?6 z0 o, j7 B. q/ O3,还原到光猫分区中(此操作风险很大,请自行承担)
$ s3 ?; q# O5 j% r7 c9 O9 y! n将修改处理好的bin文件复制到U盘上,插入光猫USB口
: N5 q5 ~9 a3 ?6 d" v! M; D& p然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)3 w$ S/ P# A. e/ X2 O |
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
& j3 }. ^3 ~6 {8 Q9 v& K& [% U0 e) v3 ?6 ~/ y, N" x
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
. x7 ]3 `1 J7 y5 S$ L4 _4 @5 S ?
$ h4 }0 ?! g; k u. x) \7 Hdd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock116 j }; ?9 v( M3 E4 b* D9 B
7 I* \5 p- Q0 ?" ?. ]1 q
1 U1 K8 G6 k( h; `. s. X/ e说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3 9 11分区在运行,否则就是B系统4 10 12分区在启动7 y9 ?/ Y; w# Z% [8 j: D
: T# V- }% S# G8 q [+ {
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,& u2 e$ ?9 d- X. M( I: i2 B1 n
" M4 D2 }) N" j `此操作在某种承度上可以代替刷机,也可以看作是手动刷机
) M+ W4 F8 d% m
0 c6 }& D* l& i4 l# U/ D: U! s: l/ _二,合成线刷固件(使用组播工具或WEB页面刷机)
1 }: f0 `7 x7 s& l% |. ^% m$ Q6 t4 H- n- t
1,使用HWFW_GUI工具合成完整固件打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v r017 r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.% |6 m* l2 @5 c; m& x1 Z t* Y
这里使用一个论坛上别人所发的补全shell的固件作为示例: y. u" Z) ~; u) Q4 n
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
- I' F6 S" y# t! X项目路径写flash:uboot 项目类型选择UBOOT 如下图 其它默认 点保存+ y1 T7 f Y* N' N1 |- Q F
$ G, W& N0 O1 B8 j& W5 @$ [' d6 `7 V
b,点添加项目,选择修改好的9-kernel.bin$ Q O9 v+ U2 Y: \
项目路径写flash:kernel 项目类型选择KERNEL 项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054 不要前面的whwh; G. N/ D& e& z/ A* r8 v
如下图
0 u3 v3 x( E$ a% d1 B) Z) a0 @- k5 w
" V" `' J- N9 ^/ f8 Wc,点添加项目,选择修改好的11-rootfs.bin
* X% ~6 q+ Z, @6 `: ~, e, Z项目路径写flash:rootfs 项目类型选择ROOTFS 项目版本写V300R018C10SPC100B054 (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是) 如下图3 }! _! q+ A) m) p7 ~
0 j# p; D$ F4 z3 s6 r: S& c1 {) N2 h1 N$ Y( `; u6 n* T* B; l
6 v% I. P5 a6 t( n* E. Q7 U
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
: E# V+ Y& K c6 S& m% ?来个补好后的固件图) e; d# w# z1 d" K
" x& P% E0 u, c( p5 f; l4 Y
& C6 j5 U0 T5 @9 ~2 }
; o) Z) [/ K @ `
" ], ]& c$ b# L$ ]+ Q1 x4 Y$ H/ |8 o6 @7 `' {
8 q# t! W0 C+ d0 }4 z7 J1 j) N未完待续, R1 I# C9 r2 @/ f6 i- k
. X7 i* L) B* c' h/ c" ~/ f5 k8 N( G3 m# e9 c) J
# g! e a5 B4 r5 D; ]6 C) N
" c4 F8 I( |. M* u+ b I
# g; J9 h& j; J: c
$ n3 i! }( [& U$ H: {: c, N
5 g) G4 H5 H0 [0 a
& Z3 S' B- d/ u/ [+ A- D( T% \. m$ ?
) H" Q: S8 u1 W- i3 s3 w4 [; v1 h+ Q$ ?2 s
) ] `: V8 }/ d( a
$ O6 Y: b; l0 s4 t8 ~* U
|