找回密码
 注册

QQ登录

只需一步,快速开始

查看: 120351|回复: 159

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 ' v( p( m, ~: T- j8 j
1 S9 H. I9 h8 w: |
此操作有风险,只供研究所用,由此造成任何损坏请自己担责
3 l: B: A' b$ S) K- f
7 f* L0 G& k2 l/ E一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
  W* ]2 c, e. ?- v" {5 l8 {, Z  K( ?; V$ n
1,备份各分区:
4 r6 j8 v3 S$ v5 J, b& B( d0 @插入U盘(剩余空间大于1G). i& D! d, O1 ?4 l  U& v1 T
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)- m) n; f' V7 D, C+ @

& H( n2 q; c  X. ?备份命令如下:
' D+ P2 d* ]. E# Z1 O" T7 g$ Q' K$ J2 t' i; O
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin* b& w# M- g$ z0 Q1 H0 g. R
! x7 o3 {) v  \
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin0 S) f# L$ c; p4 c0 Z
3 l0 j2 Y2 h8 q% J
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
9 e& C, I# u! Q6 r! P/ F, d/ I2 |0 X9 P+ A& E
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
$ U  z# ~  N( m9 `+ P
3 j7 c  F$ @# o. e1 S, `/ f) Xdd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
" M6 B3 z1 C4 o) s( m; V* o5 i- B% B( c' r" W6 w
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin+ |2 E" v9 [9 S3 N% v0 p

& T! `; u2 C- M* m  qdd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
' V* @/ [) x/ F4 l9 Y: m: W; {& @
& a1 @: `+ z* R: vdd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
1 R  Q* }& G, C. E( E9 `
7 U$ s+ L6 f# c9 \0 {dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin$ a$ z" [7 h" {: Q
( l# Z3 a- m1 D- Z6 N, Z! Y
dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin
3 Y4 }4 P; z, e1 x- [4 r- T' t9 y: ]' i8 V2 y/ l* G
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
! g" w* e6 S  y! ^# k9 R# K) @$ @0 d8 C" x) s7 J8 e8 [1 [* r+ ^: g8 D
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
& b' M# p: h$ i3 _# ^& e' y) \, g4 Y" x* y) K" ~! `
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin" C8 k3 B" k6 a( `( h

2 b& Y3 W1 z3 y2 l" W1 y! C$ D5 tdd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin5 ?, ~" X/ r/ K9 f1 R

' L( b* K. w( i" ?( l- cU盘根目录下这些 bin文件就是各分区的完整备份
# i( p$ P2 @% F4 w! D/ Z2 W! a, z6 Z& i! @1 I9 |* x
A和B分区是一样的,所以只需备份其中一个即可
8 p4 k( K, f, L* ?5 x: c各分区的意思如下:
' A- U& Y8 g  M) H' A$ umtd0: ="startcode"
/ E, M. l6 R$ O" n) ^: |9 tmtd1: ="ubifs"
1 c" U( m9 M2 e6 M$ gmtd2: = "reserved"
  P$ a* {" p7 |$ q5 }& ]1 jmtd3: = "ubootA"
, k$ u  Q8 ?! ^" U: x8 j  Rmtd4: = "ubootB"
$ W0 H3 A- T4 o$ L; [  }0 J! \mtd5: = "flash_configA"
; `# B/ z  Q. q8 c  k+ rmtd6: = "flash_configB"* ?. o, U, O: F; {% L
mtd7: = "slave_paramA"
- h5 n; Q; a. R3 _# D% xmtd8: = "slave_paramB": c% ~8 Q* j2 y$ @/ y! d
mtd9: = "kernelA". @5 z6 b. Z. B) J5 w
mtd10: = "kernelB", b& b0 w, |: o2 E- U% R
mtd11: = "rootfsA"1 ~& ?: w. k* E6 X$ H: x- ?
mtd12: = "rootfsB"# o: a* I; ^" R. y  n4 [/ n% }9 _
mtd13: = "wifi_paramA"
4 V* l0 o4 L6 [# C" q( {mtd14: = "wifi_paramB"
) W+ p0 v7 p+ C8 a& x: e4 Hmtd15: = "system_param"7 x+ U* r7 V9 |. d0 Q& v
mtd16: = "file_system"
. T; u+ z) g3 Q6 }5 {. F. Vmtd17: = "frameworkA"
; D4 [- c' D4 i. rmtd18: = "frameworkB"0 j2 T  v% `) A1 G( U: \+ |
mtd19: = "apps"9 @0 T& t* \$ o- |# q& X$ s
ubi0_13 = "jffs2"
" c& x7 ]$ O7 F. y% \* w
. K" o  {% w7 J0 e, e- O% J/ T
; m. @6 Q9 s! E; x. }. C1 K4 \其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例! y% ]  a; a: ]( n

, K- y5 R, ?  b其它光猫可以使用命令cat /proc/mtd! r- \: D8 B( X$ i$ K# m5 A  G
查看详细分区结构,8145V结果如下:
0 n( }' O; h# }7 Z

$ H3 R8 @- I4 l3 |

8 g: r  E5 L+ p2 ndev:    size   erasesize  name9 w* r4 f$ x. W% ]' _0 q: }
mtd0: 00100000 00020000 "startcode"
. j1 E* C% j6 [# Tmtd1: 0ff00000 00020000 "ubifs"
# O$ @: M2 d! {* {. Gmtd2: 00000000 00000000 "reserved"
/ \: F' N0 V. L9 O3 r0 E/ x/ Lmtd3: 0009b000 0001f000 "ubootA"
- M3 r6 y2 r! V3 W5 @9 v" q6 `mtd4: 0009b000 0001f000 "ubootB"* ?0 Y' ]  S1 r" {  }
mtd5: 0003e000 0001f000 "flash_configA"
3 k, ]# }2 y' o) Mmtd6: 0003e000 0001f000 "flash_configB"
8 |' ^- C  d# u+ j) O, X1 Xmtd7: 0003e000 0001f000 "slave_paramA"+ @! b0 p( E; e0 u, v* V, _2 |
mtd8: 0003e000 0001f000 "slave_paramB"
' o% z& j1 q+ smtd9: 00307000 0001f000 "kernelA"
; p* d- f' y/ B, J; Y& [mtd10: 00307000 0001f000 "kernelB"4 x9 ?" a- O6 H' C+ }4 f
mtd11: 02815000 0001f000 "rootfsA"
3 q3 W# m' w) J+ @: l4 M: W- r. imtd12: 02815000 0001f000 "rootfsB"
# C" U& ]$ w# h0 a6 @# n2 H  T/ fmtd13: 0003e000 0001f000 "wifi_paramA"/ B) T! t5 \" r0 C! \) x" |
mtd14: 0003e000 0001f000 "wifi_paramB"
! F5 `8 }9 f9 }# A; Ymtd15: 0003e000 0001f000 "system_param"+ n$ r7 Q+ E$ l* `2 h: M
mtd16: 0141a000 0001f000 "file_system"
4 q, C- W! X' m' `# ]# v- gmtd17: 0081d000 0001f000 "frameworkA"
+ X5 Y0 W8 o- f7 jmtd18: 0081d000 0001f000 "frameworkB"
9 N# ]6 |% q: Q  T& z& P" Fmtd19: 07003000 0001f000 "apps"0 `& _0 J4 ~$ b; D  m
2 @- Q) |- ]" A; U( A( ^: q" W( ~

2 e3 d+ B) E+ S: n) u然后根据这个详细结果来修改备份和还原分区命令8 X! O6 e" D  u& k5 F
; N! m, _( q5 W6 s8 S
8 G" e) d# n1 K0 n
& R- W, z4 U3 k

" e! B* ?- u; k6 n) i3 _2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)  r" e% Y. Z2 L& d
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开: e8 X0 o- I) N+ ]; M) E2 Y
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
) `: U$ Z8 u% a0 f( H! N( [. [% l) L  [$ `
下面用rootfs作为示例7 z+ {9 P4 q- m8 D, E1 v0 `; f
( }& A# k* a/ T: `
5 U4 ]# H9 n7 n1 L% O3 ?& W& p
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
2 Z/ J# ]# F- Y9 }+ `5 w4 \/ X
# e, q- Z5 u8 G3 p' n/ \
( v! [# X8 i0 H3 \3 M8 {点  确定  开始查找,会看到一堆杂乱的乱码如下图:1 _! e+ c. d0 J# G. Q+ x$ M

& k( L! A0 Y! N3 U, S找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除; i: J9 j$ I1 R' ?$ P- P
# o9 N# h6 E; o$ Z- |
删除后如下图: Z7 G2 p- C7 }1 D& ~  P
7 I1 \6 a2 o& W& v( {( R# q
2 o# f8 u) X" g& ?% s
然后保存,就是一个完整无多余的分区bin文件# G# c! O  \2 q
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值4 Z! q5 S) j2 E0 W

7 ]$ I* b: |. ^7 t' o3,还原到光猫分区中(此操作风险很大,请自行承担)
  i; v6 D$ V: h5 Z" q; ^8 e5 n将修改处理好的bin文件复制到U盘上,插入光猫USB口
1 @' i$ }* N' j2 g8 `$ \然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)3 _, Y% E) l0 w9 J
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3* s' g& E! N6 W7 S

1 @" U, K/ a' [dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9! i% e; o+ f9 n" m
% K- ?, ]  S3 \4 ^* O
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
% c  `2 G6 a2 \$ I; K( F2 d8 `# V8 }5 }. a4 O4 _4 b: H

0 P1 e* X# C4 t说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动; S% J8 T- D1 q# U' w# I

1 H1 I$ m4 C! w0 |$ _还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
: F7 h9 p  G0 ^9 b* j5 _$ C, ^7 _& v# N) Q" l( x
此操作在某种承度上可以代替刷机,也可以看作是手动刷机8 |: k+ R' F$ `# `

) v  L6 u0 U+ H0 Z  E, \1 q* H; l+ D二,合成线刷固件(使用组播工具或WEB页面刷机)! }7 ^( D8 V+ a- p3 g$ @
( i0 n, O6 g) r* b. z0 ~% p
1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.! `' }$ f5 _1 H( q1 r' W
这里使用一个论坛上别人所发的补全shell的固件作为示例
) F$ _1 ]9 Q# d. s: {& Ba,然后点添加项目,然后选择前文所修改好的3-uboot.bin
) P# z! e2 \( d# p! d, ]项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
: b4 A; P+ ?! R0 p2 S
+ Q. |8 p( Y; B" G# J3 Y3 R
1 j/ f+ V6 q6 V, O9 pb,点添加项目,选择修改好的9-kernel.bin' y& q) ?2 }9 x% N7 G. B+ j
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh: h, S1 T, P* j/ u
如下图& K! z! n, [7 [3 n+ I- Q
& F6 T6 f  ?) D

2 p" q- _- C4 _$ f1 R+ I$ ~4 yc,点添加项目,选择修改好的11-rootfs.bin( w2 d1 s- W7 q  K
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图: t  P) B2 V+ f

7 ?/ U% v1 r* K0 W
$ B' e0 d8 p, K) T+ m& F' n
: P: o0 Q  j9 F2 Q最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
+ N) f! O# m. V$ I" V, g. \. J来个补好后的固件图
7 J4 ?  `! i. D/ m- O1 [$ j1 v) Q4 ]+ p- ]6 p% k

+ u* n! I! r3 A$ L' }
2 K1 k) I0 N' N+ \0 A3 H5 w- j  F& y" p; y9 W
4 m5 s5 _0 b0 A: @. N% h$ T
3 p; j+ {5 v6 @- Z  F5 L4 b
未完待续
( X, E) M5 s$ y5 }8 p1 l% @+ o+ \6 z# y4 }6 M3 }6 x3 F

! F0 Z( S6 {# G$ ~9 w6 }3 L/ o* a- B& b$ P9 v9 G# u: ~% \, N6 Q
* E/ X) A) F3 Q) a& p9 n. c
7 ]6 }: f/ q6 j* m0 d
! m0 L- g8 _- d- V! n* R

8 \- Z" \' }5 y# U# T+ T5 {1 L
( H4 d0 s' |$ @: C% ]3 M' `( Y/ a; w& M' `7 f/ t
" T" G1 _+ ?4 s: I5 S" T! P

% L$ X/ p: d/ X' a/ D8 _5 K; P: W9 D

本帖子中包含更多资源

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

×
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
 楼主| 发表于 2018-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:08
) D* m# O- G; k* h( r. i* ~谢谢指点,我添加项目后发现高级数据编辑无法编辑了。
  h8 }8 O  r* W( y3 b  bHS8145V我尝试过使用115和118的备份,我发现115的 ...
5 j5 a" v1 L# q! W7 w! n# O: N
118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,
& V3 u4 d6 Y9 o115的解包squashfs很简单在linux下1 K0 H3 V2 }$ A( f
unsquashfs -dest aaaa rootfs.bin) T; p5 k& M6 L7 X; M3 Q, ^7 N# @
就可以解包' k0 e  g; ]5 E4 g

+ H( B; |, R- b) `4 C& ?, ~封包命令
" b3 U! Q+ ~2 J. b4 ~: Ymksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4+ T' z4 J/ h9 \9 f0 ~

: d  N- y/ ^1 c1 x' s) Z4 d
4 ^( E8 T% j3 _118的就比较特殊,他是由二部分squashfs组成,需要用winhex分开,然后分别解包,再组合,很简单,但也可以用Firmware Mod Kit自动解包和封包,但这个工具需要稍作修改,
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改
发表于 2018-9-22 19:01:00 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-22 19:57:13 | 显示全部楼层

( y. [2 v# ~7 T0 O- D* O支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑
' Z% ?- B4 h, g- _5 A0 ^! o, p) ~
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-2 19:33 , Processed in 0.030068 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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