本帖最后由 ceocn 于 2018-9-23 11:53 编辑
' f* w3 i4 z4 r- D U$ O
- B7 v! X% e9 ]此操作有风险,只供研究所用,由此造成任何损坏请自己担责
2 i9 L' K' ?- x, c& m; L; V$ T' o9 ]9 W7 \& U3 L6 C
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)* O+ T+ u9 t) B
3 _2 Z9 Z1 H" `5 W, v
1,备份各分区:" j. v t- c1 ^7 y* D" \% e
插入U盘(剩余空间大于1G)
0 B# m7 ~. [" B/ B一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
- `$ y ~5 D5 @# M
2 z# H' T+ W7 t+ q备份命令如下:8 a, F3 X& r& T5 P& e
' }+ F/ |1 t f( e5 j; O+ I; n
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin1 E0 g# L* @9 l
4 \% _: S2 d# Z/ s$ F1 u# R
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin- j/ T+ _0 X3 Y0 S
1 }6 r& f3 Z+ j h4 ~1 \8 k6 o
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
, i" ? b( C$ ^) E d3 W
! |5 }. e% a; I! Ddd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
3 Y) R6 T. J: j9 x/ b7 o7 [+ w9 Z: o- \/ e/ g$ T0 `9 q
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin* Q& D* G q5 @) c% m$ w% b! m! J
8 W* i" y( V7 {) H; `1 v! n jdd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
. F/ `7 W" t5 U! m ~" [, T: J. M e! d/ X5 o- k
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin' O9 q% @( P F$ w& t8 u1 G
7 f, v& P. R+ r( ydd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin, b# r* Q6 o1 s9 f
* f4 M. W/ J$ S) zdd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
! e$ m$ M# i; z) M. ]8 @ m& a6 M4 o4 f/ h
dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin6 @* u9 |, B6 P! |* E- v" }0 o/ _+ z
, I* N& |2 z7 H2 xdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
* v5 }9 e8 `3 }! r
+ ~7 x/ {! B7 A1 n5 U w9 V( ?dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
7 r5 i: X0 d+ v: y7 a4 i; w9 a- g7 ^, T3 b5 ]2 q2 }. j
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
4 f7 i4 \' N c3 E2 g
N( g1 {" ^" V& R4 Ndd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
. r7 C6 _! J5 ], z' i8 K
. d3 j n: r/ @9 d i: xU盘根目录下这些 bin文件就是各分区的完整备份1 R5 P/ }2 y3 R4 q8 h8 f# y
3 B" c5 H( G* d: i, H4 rA和B分区是一样的,所以只需备份其中一个即可5 I& @: F) s% Y ]
各分区的意思如下:. n) ]4 d& M# A. B0 X/ j
mtd0: ="startcode"1 m+ D) y: [' |* t, F2 f. A
mtd1: ="ubifs"
A2 E% C* v& f0 Z( d& b) Pmtd2: = "reserved"1 a# E3 H' z5 S3 a/ {, C
mtd3: = "ubootA"# ~7 B* @! ?1 q) u3 L; R2 B
mtd4: = "ubootB"
% g( ~1 K5 [8 F+ u* mmtd5: = "flash_configA"
) ^; } f5 J1 ]6 l+ O# q3 \mtd6: = "flash_configB"/ N6 s G/ W! f& u P
mtd7: = "slave_paramA"
4 v6 ^8 V# g" a2 b1 dmtd8: = "slave_paramB": f# N. I+ B" z5 h0 k; i# E
mtd9: = "kernelA"
7 ]* j% G' s0 [+ c: [mtd10: = "kernelB"$ T6 `) c. y: S- z I$ r0 g3 I. M
mtd11: = "rootfsA"
8 P4 W( p% c' }mtd12: = "rootfsB"+ {4 |5 ~" t! P! I g1 m
mtd13: = "wifi_paramA"3 E" x+ M. c7 G0 B! H+ b2 D
mtd14: = "wifi_paramB"
3 z. ~6 J3 F" F. ^mtd15: = "system_param"9 w$ R$ a' G$ m$ ^$ Z
mtd16: = "file_system"
/ {* G0 w( k# k7 jmtd17: = "frameworkA"( [ `! `/ i3 |0 G
mtd18: = "frameworkB"
- c' G* ?' j0 t- u9 w) vmtd19: = "apps"/ r, _2 u' V2 Y, {2 @7 h# @6 Z
ubi0_13 = "jffs2"* K9 C+ t% I8 h5 y; |- l0 G$ v
9 v X8 h8 r" B' ?# q
$ j$ ~) A( }% j* p4 b% V U
其中最重要的是uboot kernel rootfs 这三个分区,后面也只用这三个文件作为示例
8 S, ]3 X: u9 a; P; f4 ]7 m2 V$ h4 M9 G( f d0 a! z
其它光猫可以使用命令cat /proc/mtd
3 H! \( E: P" n# O! e查看详细分区结构,8145V结果如下:
/ V5 j$ A) Y9 G8 |+ x# L2 s1 {7 N }: T% y0 ? X2 ^6 H1 q
: C3 Q/ t1 u0 H$ H d9 J: j
dev: size erasesize name
; y g( d8 |1 g0 smtd0: 00100000 00020000 "startcode"" f3 y& L7 d& e2 F: n
mtd1: 0ff00000 00020000 "ubifs"% i- J+ M$ w! O4 h
mtd2: 00000000 00000000 "reserved"3 b$ D0 y6 h9 M4 R7 F+ x+ a6 V
mtd3: 0009b000 0001f000 "ubootA"
( c! g' ~# P3 `3 Jmtd4: 0009b000 0001f000 "ubootB"0 D7 F5 d, I0 w
mtd5: 0003e000 0001f000 "flash_configA"
) n) F8 L9 f) Rmtd6: 0003e000 0001f000 "flash_configB"
; }% n3 s( {% n5 ^5 c" umtd7: 0003e000 0001f000 "slave_paramA"
/ y$ z( u8 ?7 t, j. vmtd8: 0003e000 0001f000 "slave_paramB") Z+ V; u% F" E0 V/ h) \! J
mtd9: 00307000 0001f000 "kernelA"
4 Z" I5 c* ]0 ]5 Y D; A. s" Q0 zmtd10: 00307000 0001f000 "kernelB"8 \/ z/ s6 N3 L- n5 N
mtd11: 02815000 0001f000 "rootfsA"
! {- ^) r! L8 g# ]mtd12: 02815000 0001f000 "rootfsB"5 @6 K# Q( ~# ~; d
mtd13: 0003e000 0001f000 "wifi_paramA"
5 [( `0 l* \. [( [- qmtd14: 0003e000 0001f000 "wifi_paramB"4 I# Z! e F+ v$ V/ J- M
mtd15: 0003e000 0001f000 "system_param"
6 g( U1 v8 @/ `. d3 D. T3 xmtd16: 0141a000 0001f000 "file_system"
) j% z2 J' }: c2 y9 M- z* ]3 nmtd17: 0081d000 0001f000 "frameworkA"
- q8 U: L; l. D& J1 Dmtd18: 0081d000 0001f000 "frameworkB"
1 m7 c7 x2 F8 T& S2 z! fmtd19: 07003000 0001f000 "apps"
0 e6 _5 r4 |% m$ Y E! H
" W& p# ?5 o+ q% J, ^: m* m7 ?( }# q' U$ H+ x3 Z6 t0 G8 {
然后根据这个详细结果来修改备份和还原分区命令) ^4 d; {! f0 m- l4 K
1 W/ i/ B8 [8 M T
8 d* p% ]4 X# A, S7 u( o" J0 \- B( n- l/ g
, r2 t) {' E! {. Y: a% j- D
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
+ @: p! e+ o+ {3 V将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开+ H& l% y3 U1 {( l) a' L% W
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值+ O! V# p7 v9 e5 R# |# j
) P% T9 `7 [) ^- I7 {+ z0 C下面用rootfs作为示例
0 Y' s# h' s) n4 \0 O& N' U. _6 s6 u" s/ k# Z4 g% B X! e! S
. H, T+ z, `: E( A0 [( s' J将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为 十六进制值 ,勾选 向上 查找 如下图
% K& l z7 t6 t0 P
; r2 G' H1 a( k# B
# N- x; A# E) x: g点 确定 开始查找,会看到一堆杂乱的乱码如下图:6 \& p' `. M7 v/ W
$ g @7 D. @0 f7 s! `5 @. }, U8 O找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
( \* @$ m) s {! }8 V1 p% }5 U
8 [( x; Y. P& o删除后如下图
# Z& @3 ?- ?& ^
% p( d$ }4 H! B* ^+ A5 P6 u0 Y. n. f* V* w/ V4 l
然后保存,就是一个完整无多余的分区bin文件
2 R( _4 j& p+ `1 F. I& T M& I然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值7 e$ H; G) T3 K# e! L% m% v' p0 a
" @: ]3 a6 x& q( H9 Z6 w3,还原到光猫分区中(此操作风险很大,请自行承担)
0 f& ?) V: s1 }+ o/ |. k将修改处理好的bin文件复制到U盘上,插入光猫USB口/ r& a9 h5 ?. \9 M$ B
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去) p* r1 \) ^+ h' b
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
+ z$ l7 W( Y3 g
# V+ X4 u* H3 V; Ydd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9& t6 S$ f9 r( z2 D) A
! \2 ?1 x9 K3 O2 P) ^" x) U7 e
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11) l0 R$ }1 _: D) j2 k2 H) C' N) ?: H
4 ^/ X6 U }1 L# Q/ d" S4 H
7 v" `9 E/ A- M" t( d }% h说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3 9 11分区在运行,否则就是B系统4 10 12分区在启动- l: S% H+ f$ b: v+ t
m( I/ g5 M9 B还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,6 w9 _ b, o* D: l
. s3 L6 M* y$ {7 u此操作在某种承度上可以代替刷机,也可以看作是手动刷机
! u2 l3 F$ _6 |7 O% [& M; l' R! z" K
二,合成线刷固件(使用组播工具或WEB页面刷机)
( w4 w" U8 v) y1 I* p0 g8 D* C* {4 ?3 a
1,使用HWFW_GUI工具合成完整固件打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v r017 r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
N+ z7 a9 e! w; l4 H: ^$ u$ u6 H这里使用一个论坛上别人所发的补全shell的固件作为示例
0 s5 ~: z+ c. Na,然后点添加项目,然后选择前文所修改好的3-uboot.bin6 a- {" ~' q3 L7 I6 T8 }+ T. n( j
项目路径写flash:uboot 项目类型选择UBOOT 如下图 其它默认 点保存( t! H. X; Y2 n3 {4 n K
' v* i' J- ~$ [& l5 x
A$ b5 W H3 F, W* r' A% O
b,点添加项目,选择修改好的9-kernel.bin
) I+ ?. q5 H% s, U" G1 {2 q项目路径写flash:kernel 项目类型选择KERNEL 项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054 不要前面的whwh
! _4 a; L; b" Y3 Z' K# g% q5 M如下图
- S# m$ U4 u+ v; `9 k% ~; n5 a8 J# R1 m+ j' Q( S( d; T. T
# @7 {' c; \2 ^7 E, ~$ e. sc,点添加项目,选择修改好的11-rootfs.bin) p0 l" v1 J6 @: A& K
项目路径写flash:rootfs 项目类型选择ROOTFS 项目版本写V300R018C10SPC100B054 (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是) 如下图
# m! Y/ w" J4 D4 j7 b; r
1 W( c# b( s0 d; i2 s0 C: j, Z" u! ]% ~! Y3 p: M/ s% ~
4 M& B+ A9 C! t
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
& v2 N) q% h1 q: u来个补好后的固件图
( p( H+ ?) P) g) h- H- a9 ~0 n6 i# x
' ~& S/ G1 L+ J6 g1 Z
, R0 i0 g2 |- H, Z3 |+ U
2 P7 W+ G( c) s8 L/ @
- O! f* d7 T8 ]' J0 i6 \: p/ a* f" O# U9 p/ O8 C# ]" o% j) r
未完待续
6 O3 Y3 p6 [# p$ i- i2 f4 t2 s5 V
! b8 D9 A3 M4 w e6 x0 B
4 x1 l# b$ \3 u7 |
0 [8 ]% T4 \+ g! v& s: a0 ~5 }4 b- F- w: ~! R) c
" p4 ^& u# `# t& q& V, s" S
7 F+ r! c* a& V5 Y
P( [) L( M8 ?% }- P, {
" q$ D4 m" n5 W; i$ L L9 W( A4 l& s
' N* P2 |1 o3 w; T0 W
) ~7 Q6 b* p, A- D+ G. {
6 v4 r% c1 d& b) K, G. Z9 U |