找回密码
 注册

QQ登录

只需一步,快速开始

查看: 120473|回复: 159

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 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# L
2 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

本帖子中包含更多资源

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

×
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
 楼主| 发表于 2018-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:08
0 Q% B* W1 A  g2 X& F5 G谢谢指点,我添加项目后发现高级数据编辑无法编辑了。
' K7 V7 x! ?/ O' U. B" D( t9 lHS8145V我尝试过使用115和118的备份,我发现115的 ...
& D0 H# w% J) d6 q$ f: J! }; l, f
118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,# R2 g5 {" J, |* ^
115的解包squashfs很简单在linux下
: {8 c$ ], }, ~1 H! r' junsquashfs -dest aaaa rootfs.bin
/ ]+ ~# b+ G9 w+ A& C9 f就可以解包
  O" d8 X" o( h  \+ B
* j! B( u4 B1 B' |! `1 _封包命令% ?. ^5 k; j- d' \" t
mksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4
1 m, S9 L8 k! T0 N6 K6 F+ U* O2 l7 i; `9 E
* m1 U( _% l1 o: z& E+ ~
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 | 显示全部楼层

7 W1 I+ q3 f5 u+ ?支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑 - D( _" i, u& H& u" @
% u) k+ @5 Z4 a% b, [
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用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-4 22:22 , Processed in 0.032129 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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