本帖最后由 ceocn 于 2018-9-23 11:53 编辑
$ t1 m' n2 w, j5 K" H
$ \4 b# {) Y7 \( [) i此操作有风险,只供研究所用,由此造成任何损坏请自己担责
8 I- ?2 ^" \; L- k I
+ }/ k7 a+ r1 R一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)% f; T" I7 i+ Y, I% m! u9 v4 h0 I. ?
/ F" z2 \# S$ Q4 Z& z, A8 s+ j1,备份各分区:7 n! l* H: _, o: X
插入U盘(剩余空间大于1G)1 \( ?' x1 y" T# Y
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)* f8 b. T* Q; H8 E9 D, ?! k
+ y, r5 ~- a) V( N3 a备份命令如下:* L3 E% j; y; Y$ P& o, P
% r5 P2 |+ m7 a8 I
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
$ l. U/ U- w. N3 [# r+ _: P+ e: v" I9 _* l% z& R* d
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin4 U5 t- T8 z# @0 B8 n5 ?. F
- j) ^" A/ W3 X. C
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
% O. U1 q$ D9 Q D+ o; F3 f3 @0 _' }" e) H5 c0 ?
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin8 g. T3 ^$ v5 U6 O0 L h. E/ Y
+ d% T+ O4 p4 g2 [1 hdd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
1 k- {) ]2 g! R0 V9 f& \4 F5 t3 S0 V+ k( m; g9 D$ j
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin- F) s8 Q0 t! D% a& F
# T" q' n( @2 {, w& }dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
1 ^; P2 m- D8 k0 o# W& ?9 n# m+ [" K
4 d. _+ G/ y2 G9 ~# f$ X' ]dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin# H* D1 L$ V, x/ Q0 j5 N# j5 ^3 R
# h/ t8 K2 M; K5 b Ndd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
, |) Q y! Z5 z4 q; Z: E
% O/ X4 }% U7 p0 Z& `2 }dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin! Y9 w# ~- r/ m6 ~( F6 c
' c, j% D4 A4 e: v; W+ Q: I" ~dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
) N" L! n! @: E3 t) {
! v0 a( t- u8 D$ L* q7 i+ C. odd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin" n$ D1 w; V0 e& F1 f
# _; H4 a1 U) T$ @% f9 U6 D3 Z& y7 Ldd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
0 _) p# W9 u4 z; I2 c$ c) _2 w; z1 W i& b1 g
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin. O" g; k. z3 N5 o/ i U
1 E. U# b$ C& Q3 S: s+ O
U盘根目录下这些 bin文件就是各分区的完整备份( i* ~, H9 q. r
3 L' j, a0 v- Q$ ZA和B分区是一样的,所以只需备份其中一个即可
/ ^. @. z& F/ R( g各分区的意思如下:
3 J/ w# C, S6 u' R4 r8 J& n+ C9 Imtd0: ="startcode" ]0 n5 [! ~0 u5 \5 N) ?0 Q7 O
mtd1: ="ubifs"
) i- z: p% c& f# v0 Cmtd2: = "reserved"
# ^& o* @2 d4 V7 E8 C3 Vmtd3: = "ubootA"& n4 O3 f- Q' F+ A' S5 S
mtd4: = "ubootB"
j4 h, j: |1 R( b. F* b% xmtd5: = "flash_configA"* ^' A9 Z3 O q) G! A4 _" O, Z6 g3 i
mtd6: = "flash_configB"
; M0 f, p/ R" hmtd7: = "slave_paramA"3 z. b1 V8 j' @4 b) O
mtd8: = "slave_paramB"
( l* v" |; D5 ?9 }7 M% b- `mtd9: = "kernelA"# h' w1 q! ]# ?$ M! \" o4 p$ S' `9 H
mtd10: = "kernelB"
+ C0 L: b: w% ^) v( Lmtd11: = "rootfsA"0 |( J- V) q5 ?: O; Q
mtd12: = "rootfsB"
% v2 E/ d y: n& W( Dmtd13: = "wifi_paramA"
) Z+ J7 G& y! S4 Rmtd14: = "wifi_paramB"
5 a% u6 r- b/ Y7 y3 S. z- ~mtd15: = "system_param"
" t M3 F e" J3 D6 \mtd16: = "file_system"
: f5 e E- l. k# k% i( p( D0 Umtd17: = "frameworkA"
3 u$ p- P% M9 W/ ^" I9 C Q( D" tmtd18: = "frameworkB"0 k! C2 r- @- P* B
mtd19: = "apps" D w8 u7 U$ u9 ^# I/ C3 M
ubi0_13 = "jffs2"
4 j) ] {( H' J: z
3 U5 w1 g$ a) P/ y P/ B
Y, ?: Q6 V+ o9 \其中最重要的是uboot kernel rootfs 这三个分区,后面也只用这三个文件作为示例
! ]9 z6 X8 i- C
' g/ |3 o7 }; [+ K: H% A6 o( V9 v6 \其它光猫可以使用命令cat /proc/mtd
' X0 J- x& m6 d查看详细分区结构,8145V结果如下:8 x* h; M* w2 c6 }
. O( j3 T& m" K# k/ }# H# ~- B
9 B2 m3 E1 U+ j2 Z% odev: size erasesize name
$ x' ~+ b% [/ D+ Fmtd0: 00100000 00020000 "startcode"8 l# Q: w9 s( ~% G C4 g4 r }
mtd1: 0ff00000 00020000 "ubifs"! G9 i6 N" ~/ T9 b5 B
mtd2: 00000000 00000000 "reserved"
; G2 l" h x8 W5 Umtd3: 0009b000 0001f000 "ubootA"
4 l y8 @( R. t) m8 {# p) Zmtd4: 0009b000 0001f000 "ubootB"
7 j" `' e2 v) H6 Amtd5: 0003e000 0001f000 "flash_configA"
5 }$ c T; o. q# [mtd6: 0003e000 0001f000 "flash_configB"
+ d: ]: R% y. q9 s- B Z5 k7 _mtd7: 0003e000 0001f000 "slave_paramA"0 A* `( ^: |$ n" u$ z K
mtd8: 0003e000 0001f000 "slave_paramB"5 k# C5 N7 [3 f( \0 I5 f
mtd9: 00307000 0001f000 "kernelA"5 R1 D5 k+ D# s
mtd10: 00307000 0001f000 "kernelB"
1 A5 i+ @) }6 D" q0 f7 `mtd11: 02815000 0001f000 "rootfsA"
" w; _! U& C- I; F7 V6 i% ~/ }mtd12: 02815000 0001f000 "rootfsB"
2 v* ^! A. y- w/ v3 Mmtd13: 0003e000 0001f000 "wifi_paramA"
; x4 @$ Y X/ w: C7 dmtd14: 0003e000 0001f000 "wifi_paramB"
9 v# l* {" z2 G7 v4 cmtd15: 0003e000 0001f000 "system_param"# M2 Y) D9 M" Y5 p; |" Z8 l
mtd16: 0141a000 0001f000 "file_system" N, C% p4 B9 b
mtd17: 0081d000 0001f000 "frameworkA"
8 f8 {9 S7 c& B, G) fmtd18: 0081d000 0001f000 "frameworkB"' s0 v1 |* k, o/ {3 q: H, l
mtd19: 07003000 0001f000 "apps", M" z1 \) ?* R* _% A
" c* }5 B+ h+ V" j& p
! P: \# r) ~6 N- L- B/ Z7 k然后根据这个详细结果来修改备份和还原分区命令! l% c' ?- k* n/ `2 ]* I! R0 ~
& q. O' d ?4 J! H
! i/ k9 K. _& j: r- o7 D
3 e& r' h) q- u0 k
: I6 U4 |7 d0 X6 q' z7 c' U0 U# x2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
7 [% E6 L# \5 e9 |3 h; g" Q& I将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开% L3 q7 l- z2 h
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
- C; a9 l/ G" W; T; ~; k! H: \
- z% V. i! I( R, A, ?- q下面用rootfs作为示例# T: W. c7 t0 [! U
/ m, ~) f2 U' L
2 s$ c3 y$ H3 ~; l& k
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为 十六进制值 ,勾选 向上 查找 如下图
3 V, Y& \1 V! N3 \3 L6 d! w& E+ `5 J$ y8 J# n6 Q5 l
4 v' f% s# Q" }; C
点 确定 开始查找,会看到一堆杂乱的乱码如下图:4 d- G9 o3 p0 g1 i1 H# u$ B" i
% P# r3 {" n! r" y# \+ R1 r0 Z
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除0 b: {& O2 R. }. l
3 U0 {) X0 m; s: F7 }* d# Y删除后如下图+ I- x# i1 D+ n9 C3 O
4 ^ [) _7 h2 X2 f6 w% k B$ M5 ] I5 e* _6 a
然后保存,就是一个完整无多余的分区bin文件
4 n- ?4 E# F1 |7 m然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值& X3 J1 B1 V# e1 U% w- X9 U
( G' y; s Q4 {% W+ {/ U& O8 ] {8 t
3,还原到光猫分区中(此操作风险很大,请自行承担)
7 {5 d5 r2 M) `: p! H+ X将修改处理好的bin文件复制到U盘上,插入光猫USB口9 S3 R. M" f0 R2 ?
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
5 H5 v* W4 c# ^; D0 Rdd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
) t; _4 D4 E! P+ ?5 m5 A( r9 n3 B0 T/ E1 i2 D4 A: {
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9# v) H# A- X; ~3 j+ E; x+ s
1 _9 W$ p g2 D4 w9 udd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
" m4 V4 {7 x8 ^0 l6 }( D. i& E( k$ a' M5 q0 y* R" g) ?
" B* L$ o! b7 N) j7 q* o- E: T) k说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3 9 11分区在运行,否则就是B系统4 10 12分区在启动8 Q; U4 f; G" i) N) j/ s
; S; a5 I! M3 e" h还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
( u2 ]- {: A4 }4 ?
4 ?4 E1 [; z9 {7 R1 b$ F此操作在某种承度上可以代替刷机,也可以看作是手动刷机+ E0 d, h, I; F, P7 i
/ V% e( v+ W. E k
二,合成线刷固件(使用组播工具或WEB页面刷机)* T) `- I4 d9 o) p1 i0 |& m
4 \( L* u- N& A1,使用HWFW_GUI工具合成完整固件打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v r017 r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.0 n. U$ _4 k& b2 b- |& Y
这里使用一个论坛上别人所发的补全shell的固件作为示例9 v7 [# a( t- K/ e( H
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin) x3 z1 o# ?% f5 l/ c# a8 Q) w. i6 ~# I
项目路径写flash:uboot 项目类型选择UBOOT 如下图 其它默认 点保存
2 g4 i+ _' t- J9 W9 S" { ~& g8 C5 F* m: t; q( a# r
0 S& @4 [2 }4 x- M! S! [- v9 v
b,点添加项目,选择修改好的9-kernel.bin
" h3 r+ V+ T6 D; _* J/ h; G项目路径写flash:kernel 项目类型选择KERNEL 项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054 不要前面的whwh
, w. r C5 a3 s1 w! E; |% R如下图& p9 R' Z" z( `5 \! a: o
# ?' W! G0 T8 ^ X" j& q# o* |( Y
c,点添加项目,选择修改好的11-rootfs.bin8 Y v" p6 X( |4 C
项目路径写flash:rootfs 项目类型选择ROOTFS 项目版本写V300R018C10SPC100B054 (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是) 如下图/ F2 L9 k1 h& Q J; @) y1 f! I
/ w5 s+ A' F( w) @; L d0 X6 l2 w2 ]2 f- J3 i9 \, L
) ?0 x) l) F. }+ Q8 M- Z5 E3 S
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
! i+ s: L1 i8 h5 h, {/ k来个补好后的固件图
! }7 \, M5 U$ E, J# Y+ ~7 t/ u& s, G: m: n
; Y G, K5 ^' l e- _, L Q
: K" L, X& F6 w/ F. a
0 V3 J) o* ?/ Y% F9 L
7 N5 e4 Q- o/ Y/ |
/ f! v& p. A3 `* b" m" s2 v未完待续
+ ^+ g( F8 |: F. t z" l9 u! z8 c
$ D% S+ D% R3 f1 E$ l/ {- [- K
. J5 x& r) s U0 y1 C- F4 ?
3 o; d/ j+ s9 U1 V7 w7 i3 p+ n2 [
$ w4 D) h4 V; Z7 @% @1 _% q4 w! F/ V8 e/ ?
' I8 R8 X* n6 D3 q
: M$ l' j3 p1 e) S' O. s4 s' Q, t% `2 `' V( Z
2 h ^3 g8 ]- R5 k; u
- n7 c) I. v* `, R& a
7 _! I, K" v) \& Z |