找回密码
 注册

QQ登录

只需一步,快速开始

查看: 123645|回复: 159

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 & U1 P' q# |( ]- ?& o3 I. S# V5 \' {
) i  ]- W( F/ F$ e' q" W8 r3 ?
此操作有风险,只供研究所用,由此造成任何损坏请自己担责
7 z, w: }/ ?6 L! J
0 O, \8 J" u' N  X/ Z$ {" I& b2 R+ D一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
0 e5 {0 P4 B3 r4 k/ }( r
# Y' t( s, \5 f3 h) ?, Y1,备份各分区:( I2 N: L1 j6 i3 B) \4 C
插入U盘(剩余空间大于1G)
8 I! ?; c* _9 \2 O, P# x: Y一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
7 L2 }- E6 K  `# j1 l( S$ I+ B3 R% H( c4 y
备份命令如下:
; U& }( `5 f; z( }; a3 y1 v4 u4 y! W/ i: d0 ?% j$ @+ S
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
$ M! S$ W1 ^  e* x
. S* \( h+ F& r$ ~( g: Wdd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin& L# ~" ?$ j; T# I
, t/ P8 Q; C, e6 W
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
; F8 P3 q  a9 A! B- K9 k- \& o; S* c/ ^/ B' b
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
, p/ }2 }* }, `5 \+ T" G9 |! Z  U) {/ Z; M* ?
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
! E0 E* P/ J; y+ O8 n1 y
5 {# v3 A) L- S7 w: D0 q  p$ ldd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
3 Q4 e3 _& F& [7 W3 q$ e. o( k$ p* f( }, T
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin- \! B; m  O' a5 A' q2 f6 Y
4 L/ {  F7 V2 q. O9 X
dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
4 d+ g1 `2 I) r- O, p, h# |: G2 w. J' a7 T8 c
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
; F6 a5 J: U; T$ @) j# \! v
1 O( n0 T% g6 m1 u' edd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin3 n" Z; O1 _' `( X, s$ u
: C' Y# Z) e* k# X) }- Q* |
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
% J! n0 O2 F4 u- @: a! T) H7 H% v7 O3 B
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin- u% Q- _- z' k! `2 H+ i
( G* a! q3 C! A/ B) f0 h* j
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin$ N6 o! F; C+ b, Q
2 R, r/ g' k( m- [* C4 T
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin" B/ w; g' W4 w8 w( W
7 V2 k  Y9 |- ]9 `4 a/ t. p: C
U盘根目录下这些 bin文件就是各分区的完整备份' A) F4 Y! n6 g; b# ~
" J' k' E  o- p
A和B分区是一样的,所以只需备份其中一个即可
" E! G% W; |8 k! y. ?- O各分区的意思如下:! e) F' U+ A. i4 B
mtd0: ="startcode") S" @4 M$ f3 H3 M
mtd1: ="ubifs"
( }  m/ k( \. C& {- x0 ]/ Ymtd2: = "reserved"+ O, ]) T% }" O" ^; }0 N' d9 J" T
mtd3: = "ubootA"
  n2 g( J) {) C. X+ f7 ^* Nmtd4: = "ubootB"6 ~5 [4 t7 R* ?
mtd5: = "flash_configA"2 N+ c4 V1 z0 W
mtd6: = "flash_configB"
6 A! v4 ^+ u& f* c( g& Pmtd7: = "slave_paramA"* \7 {& y( j+ x; z- Z6 W
mtd8: = "slave_paramB"
! u* Z6 P, t* ]7 rmtd9: = "kernelA"/ k5 |9 @  H$ X( o
mtd10: = "kernelB"3 o6 X3 \' p$ e4 s
mtd11: = "rootfsA"
8 y. W" D; j/ Pmtd12: = "rootfsB"& S( r; F+ }  M2 x
mtd13: = "wifi_paramA"# z6 P/ x) p! L% }1 v4 s
mtd14: = "wifi_paramB"
0 b5 U" a7 k. M  P8 dmtd15: = "system_param"
* ^  `6 P+ F0 I4 Z5 d8 nmtd16: = "file_system"
; ~/ h1 x" m' G, i7 r3 U" Emtd17: = "frameworkA"
; ?- h  T4 e# }% a" w( @* X, V, Tmtd18: = "frameworkB"
$ u/ g/ R7 [, amtd19: = "apps"
+ }5 |( [! I$ f% c3 z$ d$ lubi0_13 = "jffs2"
# q8 d# q0 Q8 Q6 M0 V) a
0 C8 G+ J8 y6 W  L
$ Y9 t- n2 I* E4 @& J其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例: q9 Z4 F9 y8 S8 L* q

; Z* d1 z7 f- ^7 K8 A& l其它光猫可以使用命令cat /proc/mtd
8 X5 F  F% N5 k: x' q查看详细分区结构,8145V结果如下:8 ^$ u; }( g' O
+ _; r' t( d/ M; x

; V7 ?7 F- E! {; ldev:    size   erasesize  name) I5 A6 f$ s' t3 \" U+ H' D' @
mtd0: 00100000 00020000 "startcode"' m3 j6 m* v3 M# F
mtd1: 0ff00000 00020000 "ubifs"/ J( F  U3 a6 @
mtd2: 00000000 00000000 "reserved"6 w# f; n8 G1 o+ ]6 j" a. _1 y
mtd3: 0009b000 0001f000 "ubootA"
9 A/ \/ T$ i( U' o; Bmtd4: 0009b000 0001f000 "ubootB"4 f1 Z3 k9 S/ u6 w/ z% A
mtd5: 0003e000 0001f000 "flash_configA"" \8 d% B# V1 U$ q' h: H2 }
mtd6: 0003e000 0001f000 "flash_configB". N% @5 Y' L2 y! o+ f* {
mtd7: 0003e000 0001f000 "slave_paramA"4 M0 d+ H0 v: o% M% r9 ~
mtd8: 0003e000 0001f000 "slave_paramB"& _3 v& F/ m: h% r4 J
mtd9: 00307000 0001f000 "kernelA"
' Y( i$ }* R. ?mtd10: 00307000 0001f000 "kernelB"& \( U+ h7 q9 y) h- L# J% w
mtd11: 02815000 0001f000 "rootfsA"
5 r/ D* n) L- D' {# Y7 h0 a0 j5 Pmtd12: 02815000 0001f000 "rootfsB"' k; i6 L0 C2 b) _: A2 j
mtd13: 0003e000 0001f000 "wifi_paramA"/ A) N; T6 {6 u
mtd14: 0003e000 0001f000 "wifi_paramB"
- B2 ]% T+ I. wmtd15: 0003e000 0001f000 "system_param"" L( l" B0 n9 R+ _/ K) X
mtd16: 0141a000 0001f000 "file_system"
3 G$ I9 `5 F/ E  O  f) m$ G4 Wmtd17: 0081d000 0001f000 "frameworkA"
& C: S2 v0 Q* ^; G! g  ^mtd18: 0081d000 0001f000 "frameworkB"- ^$ |9 Q, L' f: n! s/ n
mtd19: 07003000 0001f000 "apps"
# t/ t1 h+ F9 l9 l
9 z5 @  K, W1 e$ _# H
9 w: `" J4 h( y. @
然后根据这个详细结果来修改备份和还原分区命令
) R$ ~5 ]1 ?5 f/ |" P  D- T" Q- Z3 l$ u! w  E

- L+ p, D/ \/ f& B/ G2 X  h2 ^. r6 w. w% [
5 w4 o  L! v( _' o1 @% g
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间): S) T( R0 ?3 T: F' n
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开; U$ k7 k/ X: m+ p) B, M# z
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
8 L7 m0 g% p) z* \2 ~# w& U
! W6 j/ k% h: k% F- m* D下面用rootfs作为示例
2 d$ @% h9 v! t" E+ X( [4 W# q6 D
! M" `) w% X9 R; E* T1 t2 G% r# r
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图0 S9 A; h6 T- V

4 A! W% m1 }2 P/ D
; k" T( D) F1 I- R5 |点  确定  开始查找,会看到一堆杂乱的乱码如下图:- p" _' B  k( n! X" H6 m$ D( r
( ]6 p# ~" T4 W+ K/ \
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除% w) ?  ~2 n7 ~( @" o
9 k& Q0 c6 x% Z: O7 K6 F  x
删除后如下图7 P3 u; _" D7 ?- ~. J+ k  R* `
/ o4 i3 Q) ^: z
; r3 f' W6 e8 Y& K( z) q& c
然后保存,就是一个完整无多余的分区bin文件
: P- _3 w* p- z然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值8 }) o% z7 {$ ]5 \! Z# p" O  Y
. @6 N! ?  Q1 X
3,还原到光猫分区中(此操作风险很大,请自行承担)5 s2 G+ t+ m9 d& \/ H/ }( q
将修改处理好的bin文件复制到U盘上,插入光猫USB口
  B& t1 J# M- z$ B1 d, n3 `- d然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
1 V: r4 N9 |3 O) N2 ?dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
6 A1 T8 t9 Y, l" e/ M, T$ \% X$ T# S+ D4 Q  k" l! p6 c. j& k
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
& k. Z- Q. k5 w7 j. c+ O
. ?  x) L1 U" ]dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
5 e' l* h2 C3 H# |1 J9 _
* l6 J9 ?7 }/ S$ g7 ~# \' j+ {! i; ]  k/ ^
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动* ^* d: |# g# m  o  a. S
6 Y9 K7 y' O3 }5 O
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
6 V3 N$ `: W/ p9 {: p4 J6 k
' j1 [4 I" S5 N& Z* T( i此操作在某种承度上可以代替刷机,也可以看作是手动刷机: s4 |" x. o' ~/ Q- C* P

7 D  F5 W7 o% G/ Q+ B4 Y+ Y' C二,合成线刷固件(使用组播工具或WEB页面刷机)
/ U2 h& n+ u" W
9 e# z# v. C5 W: L! ?. z1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
7 }* n7 f" k. g这里使用一个论坛上别人所发的补全shell的固件作为示例: F7 ^% `; @+ J) l! d3 G! i
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin3 {% z# B: e& @
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存9 M: B1 h( W" f0 v  j1 {
, O) g% ]. F' i) I, q
7 s) y8 Q4 P2 K9 v2 U
b,点添加项目,选择修改好的9-kernel.bin4 M" e& L' T& U! D+ }( q
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh
9 r+ k3 E* z8 T4 }: n如下图; i0 [. \$ {# E% O' U& H$ z  I, W
1 h' p3 K$ r8 w2 i; b
/ {1 E4 n6 o  R: P- |0 d9 S" k
c,点添加项目,选择修改好的11-rootfs.bin
. i4 {6 c. v* |: G+ I" g+ j项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
  h/ g" u6 A" O1 [; V, }+ l4 I' g( a! J# n) M2 M

* L; n3 b/ k0 w# S+ F3 `
7 ?& [* D' ^7 A' @1 _6 k最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
1 I; h  n2 i' I' f来个补好后的固件图/ _8 v, r/ t  V6 B

3 S/ Z& S* s3 a6 B5 x
5 K' c) y6 ?7 H
# n2 ~5 I* G- o% t4 M" A  Y  T; \! [, S3 z! [' |2 ^, g
/ \+ [4 Q: a: ]: C
; V# g$ x, u) p* Q+ g  t
未完待续/ T5 P. r$ F4 Q# b, [

+ c9 V7 j% W% ?- y8 L, j) Y6 w8 `) G0 z" K' b+ V, u/ c7 I+ \! _

; t6 F5 e: M- n+ X
( n3 e. w/ r$ K/ Y3 y
9 w3 q. R& p3 e1 e; B: f
( R! S2 i3 u, ?" G. M6 V& ^  ^  \7 C5 c/ X8 ]

0 A% o9 A3 w+ a
" s9 e- U$ A; ?8 _6 F# A. Z* n% J4 d8 b- @& V& Q6 z6 C

3 d, A6 P1 w& }$ e- A) C( b! s  G# H% j) E$ Q/ s

本帖子中包含更多资源

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

×
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
 楼主| 发表于 2018-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:08
+ L/ {6 G. [# j6 C0 Q0 ]; `谢谢指点,我添加项目后发现高级数据编辑无法编辑了。) m. H& z5 w* Y0 O; L
HS8145V我尝试过使用115和118的备份,我发现115的 ...

7 @2 l% m) f- ~/ u9 u" n! n. d118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,
( A2 @5 ]4 h3 s115的解包squashfs很简单在linux下
7 A& ^8 Z! @2 Kunsquashfs -dest aaaa rootfs.bin
9 i6 ?8 J% R  Y0 B9 V  }" B7 y# B就可以解包4 ~5 ?" W3 ~& n
- y& H7 N4 @& l5 \' z* d
封包命令; p& D: j" y3 e" f4 v
mksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4
' Y1 [  c' R* S' J7 Q3 e( n  D( f! t0 h# U7 M: b; @

( c$ r# A" E6 y' e9 g" |6 N! \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 | 显示全部楼层
" M2 O5 [. K& g" u$ I
支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑
; d9 u4 s8 O0 l& f4 l1 O, t# a* \6 N$ s8 I4 S5 N
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-17 17:15 , Processed in 0.031968 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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