本帖最后由 ceocn 于 2018-9-23 11:53 编辑
( Q6 z8 E+ N2 ` V; V) b% Q0 n6 |5 L& E; X F$ N7 H7 U
此操作有风险,只供研究所用,由此造成任何损坏请自己担责* \/ |& |5 {1 {' k: |4 P, q8 ?
2 c f9 p6 y* D2 P; H, ]: Z一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
. R4 o' n: |4 O" L3 G( t
7 W) X" h4 r* h' Z4 h1,备份各分区: L& I; t. H! ^" a K( s7 A! a" \
插入U盘(剩余空间大于1G)& M+ Q- D7 x3 e3 [' o
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)- e Y# s. W! o4 y( r9 A8 r
- a& d7 |1 ]7 C3 @3 a备份命令如下:' n8 m" B; B' D' H! |
. }4 l/ Z* u- U$ S- w
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin' R2 U& ~+ G. z
0 F, i p; ~$ ]6 Udd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
. u4 _. m3 ?. q, N
. H, y# p7 t+ T9 G6 b5 F8 l/ Hdd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
# D& `/ K* n' a. j
2 V7 }; }9 D0 j E1 T1 vdd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
$ o- r$ F) ] z. X7 Z
% t6 S4 k! l3 _3 Ddd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin6 K, ]: o) s. ^% r' r( W4 }! j3 x
! }: D# v, I D* Q
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin' L+ y: E! L' f K
: B# g* M- r( p8 E l$ w% x! I
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
! {" p' o9 L1 r, D
: ]" q8 M z2 o" \& p" Ddd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin6 x0 e' |; n& J
* `; r4 c6 t* ^# [0 Q6 ]dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin5 ?, u% B8 g& I( f
% P* L! |7 }$ }dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin5 ]5 d8 W, u$ I& z0 b
; J8 g) M. x5 z( }# Mdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin# Z y" G( H' @+ Z' |0 T
$ p5 I. q$ P: T) y4 B3 c& cdd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
! z4 U* M+ K- Q
) F q' q. g" Pdd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin; ?) C. w9 k! ^/ p1 [8 _" I% D
( `+ V* {$ Z5 d0 \3 d9 ~3 u+ H# R4 y/ wdd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
# m/ m# c: _, W" u* |8 y1 y6 m
# @0 H2 j. Z9 `$ c0 o8 K" E2 ?, w; uU盘根目录下这些 bin文件就是各分区的完整备份
+ k6 J" m0 p1 m% g3 z
" q9 D2 w0 _; T( w! `! i4 [2 |9 Q+ `A和B分区是一样的,所以只需备份其中一个即可8 C2 D' s; i+ Z9 Z; N3 u$ D a
各分区的意思如下:/ w" R4 n; L( [' P: D- l4 p
mtd0: ="startcode"% Y4 O" N7 D& ?% P! |# Y' r
mtd1: ="ubifs"
3 {- f; C. E* J( z- T9 p$ |- R4 emtd2: = "reserved"
9 o# ~0 N; Q& tmtd3: = "ubootA", d+ {1 o, ^$ j7 K
mtd4: = "ubootB"! f& n: w6 A2 E3 Z$ ^0 ^; g
mtd5: = "flash_configA"
6 e4 b9 \7 m1 X$ E8 |# h/ Emtd6: = "flash_configB"
/ X2 v4 f: |+ G, ~# Q5 b+ ymtd7: = "slave_paramA"7 ^/ N, f/ K: u
mtd8: = "slave_paramB"; z( s( X& a$ Q1 O# p' I
mtd9: = "kernelA"
. H$ |6 J4 I; o3 Y9 z: |9 omtd10: = "kernelB"
( [) G0 i& U* r7 M k0 t0 amtd11: = "rootfsA"# M: U/ }/ e3 ~( f6 V, c# |8 W
mtd12: = "rootfsB"
! b! m5 Q+ @8 d2 e2 x/ xmtd13: = "wifi_paramA"5 e* w+ w" P! X: {+ W
mtd14: = "wifi_paramB") t, M0 b# ^; r- t
mtd15: = "system_param"7 M Q( u8 Y5 Z" ?! N
mtd16: = "file_system"5 k! w: P" y: E' Y2 u" B1 h, o
mtd17: = "frameworkA"9 k. h9 \- l4 S1 E* C# W) |& ~
mtd18: = "frameworkB": D. L& N) z- Q6 D. }; b
mtd19: = "apps"' T; R5 i R r* ?- j6 \9 C
ubi0_13 = "jffs2"
`: V" `, N* u% k f/ b. I2 o- V$ v @0 t. f
# ]5 T! ^" t& e1 U4 t- [
其中最重要的是uboot kernel rootfs 这三个分区,后面也只用这三个文件作为示例
8 ]! Y! L& Z4 e+ g
5 U7 S. H( Q; U @其它光猫可以使用命令cat /proc/mtd
' M0 W. A6 w& X l6 I查看详细分区结构,8145V结果如下:& b: q4 ]3 @3 N: I) x
8 m# w! Z$ e+ t- V* H
/ L& d' j$ O% i
dev: size erasesize name n' I/ ]# h1 ^4 g% ]
mtd0: 00100000 00020000 "startcode"
" o) g0 j a) Y- A$ \# }mtd1: 0ff00000 00020000 "ubifs"3 F1 ^7 E0 G4 Q
mtd2: 00000000 00000000 "reserved"
/ A$ ^8 p) u% m9 s9 amtd3: 0009b000 0001f000 "ubootA"7 H; F( I% h" X3 }4 |( R
mtd4: 0009b000 0001f000 "ubootB"3 \* ?4 L! [! o3 {' E- F2 H3 ]: N
mtd5: 0003e000 0001f000 "flash_configA"5 \) n8 ]2 y& ~( ?
mtd6: 0003e000 0001f000 "flash_configB"- f- \1 \( Q" N! F4 c* _: ?' Z
mtd7: 0003e000 0001f000 "slave_paramA"3 m" A, c8 v2 X" ]- o% Z, D
mtd8: 0003e000 0001f000 "slave_paramB"% y! W' r3 E( R( d6 j2 {$ M
mtd9: 00307000 0001f000 "kernelA", r; ?* V t; E' I( r$ X) P( {
mtd10: 00307000 0001f000 "kernelB", t+ l' H, T# G# }3 \) [: L
mtd11: 02815000 0001f000 "rootfsA"/ y- ?; o* X) F* s: p" r$ @ { @
mtd12: 02815000 0001f000 "rootfsB"$ V9 Y: N. G: r( T7 o, V
mtd13: 0003e000 0001f000 "wifi_paramA"% y$ y5 J% _" F5 F/ |3 G& X* n
mtd14: 0003e000 0001f000 "wifi_paramB" W8 {2 ?4 Q+ ^/ V# c2 [- J
mtd15: 0003e000 0001f000 "system_param"% x0 q0 _% {2 D( M* Y" U# q% l) B- g- C
mtd16: 0141a000 0001f000 "file_system"0 ^9 V( W7 g& Q7 W3 M
mtd17: 0081d000 0001f000 "frameworkA"
+ \! W& s8 {& pmtd18: 0081d000 0001f000 "frameworkB"$ V: ]* S; Y3 M
mtd19: 07003000 0001f000 "apps"2 Z4 a" V. y3 w6 E& o9 p8 K3 }
0 C0 F/ R1 y! u' }+ h/ e
5 h d# V( S; [. `
然后根据这个详细结果来修改备份和还原分区命令
' e, M$ r+ Q$ C% V) @1 |- r9 G2 V( n0 i1 r
, b& M) Q9 c! }
' |- b( h* P7 R. Z5 m8 B& Z
& e, u: U5 o' E3 r
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间). g0 L* A7 w- ? H- ^% k2 ^
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
( O7 r- z3 y, O4 T; `. D* }% D7 X直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值( U7 ~, B5 p8 [6 N% Y: J: j
0 }2 T* K0 B G& X下面用rootfs作为示例) T) G: G& {& I6 B5 [
( |, {+ ~, y0 \, n5 P
' q! T& t& m# R! G* v4 D N" Q$ F" \将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为 十六进制值 ,勾选 向上 查找 如下图& N [5 b% i; \( z6 d, d
3 f. d/ Z5 z* ?6 \0 b8 d( }3 d9 x) l' q: R+ p& n' s
点 确定 开始查找,会看到一堆杂乱的乱码如下图:
4 v6 \ n9 L: X6 q. D) w0 Q( ] K% d/ B% V: @: X
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
- j8 [' X8 F2 ~% I
( `. M8 }: X& B% c删除后如下图
: w7 ~* }* l1 T& T6 {1 k1 k5 b% e K4 Q9 b
' X5 i/ w0 G& r7 _( _
然后保存,就是一个完整无多余的分区bin文件
6 R' x- q. a+ P2 q: N* ~( }1 P' P- K然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值* M; ^6 @* p) z3 b6 @
" y2 k% m/ ?9 f4 ~7 \: z5 o: q
3,还原到光猫分区中(此操作风险很大,请自行承担)
, u+ B0 y* `( R O- E0 H/ z4 {将修改处理好的bin文件复制到U盘上,插入光猫USB口, I2 X9 F2 W% n; S) p
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
$ f& ^3 M! H; w& z- r. t) }: udd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3/ j6 x2 X% R7 W
# }* D) x. r) M6 p. L8 L. W
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
9 m! |) j2 \3 ]& J! S, v4 x6 M5 F; W, C# @4 Z0 n7 X/ O3 O
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11- K/ m4 _# s# ?3 r& i
. b! A, m( P3 b e9 G" G
' ~: t. [5 T M# z! G- M$ K1 @说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3 9 11分区在运行,否则就是B系统4 10 12分区在启动. \2 G8 w# D% Z' \2 |
: G4 {" d8 O/ b" ?) N
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
* X R. f/ C6 K$ f+ R( V, b
! S: _3 n8 e- Y- e/ O此操作在某种承度上可以代替刷机,也可以看作是手动刷机
6 o! ~/ c6 B c; U6 T
; d0 i2 Z& |' x二,合成线刷固件(使用组播工具或WEB页面刷机)
w* S, \% X! N& U4 t2 V! ^. v: ~/ u9 w& N& s+ }
1,使用HWFW_GUI工具合成完整固件打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v r017 r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
, Z9 E8 H( h2 a' o' @& `2 U这里使用一个论坛上别人所发的补全shell的固件作为示例- C8 J4 {; ?( L
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin# J) L* @* X7 L% [* i. v" c$ K/ ~ \
项目路径写flash:uboot 项目类型选择UBOOT 如下图 其它默认 点保存
, ^" v4 U* X. ] x2 @. {. x9 B& {9 K. w# d
- A) k) ?% j0 o0 j* @7 h
b,点添加项目,选择修改好的9-kernel.bin. @% ]" B: ]' N! i1 q6 m
项目路径写flash:kernel 项目类型选择KERNEL 项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054 不要前面的whwh
- X# z; }% ]" Y+ z+ r& c6 c如下图: h1 H9 K6 R& [7 W/ i
; B1 y, o: W! C5 j M0 I7 G' y1 n) `
7 w0 a$ j( o- [5 Q, Q$ [& d
c,点添加项目,选择修改好的11-rootfs.bin
$ B; A2 b. b$ G4 q& j项目路径写flash:rootfs 项目类型选择ROOTFS 项目版本写V300R018C10SPC100B054 (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是) 如下图
! ]; E' i" `; }2 \- Q& h' ?
1 Y3 G; \7 b( E7 h/ ^! P8 U; J' a
, S, c, A* J1 X, b& Z$ T( t+ p
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
) U0 d9 I& J `6 M! r* a' G来个补好后的固件图) ~5 h }; h+ ^+ U" T
" v" k5 Y/ Z: R) [" p- C
1 r' }& ]8 S( |7 G3 m! R7 y, d4 M- A8 R" _" [( | O
6 O" [5 K" b( g* P
& {4 }4 y" V0 g. f- x
; F. E& I3 \- z! n% X3 W' Y未完待续! ~5 b! e! E9 |' b
0 o9 D0 M0 D/ u( u# s3 }0 ^1 ?7 `. T8 D
' e0 z Y! g0 j
1 e1 x$ p g0 L+ n! u, t# c2 ]9 s. M5 W& x3 {) C% c% ?
# w4 n! x3 n9 O# L1 _9 r: ]
# M5 P0 m6 B) o, D* L3 }7 w* ~, k X; K
' @ m7 m. ^% G7 K8 }
" y/ X& H1 W" C' o7 |" Q6 L
$ e& p* F& x7 o8 I8 ~- e% J, L1 M. N! ?4 {2 M" q
|