宽带技术网

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29759|回复: 104

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

  [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 - \9 @4 z1 q3 O+ x. I% p8 ?& T/ b1 }

. P0 e# L' l! [( H) e此操作有风险,只供研究所用,由此造成任何损坏请自己担责; [$ d: m/ U) P* K- o0 |1 M! E

0 ~$ B- G0 V3 f8 z" Q" _) P一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
% R2 v  m( n6 o0 p0 }6 S
( V0 s7 ~  D- ~: d1 @& _1,备份各分区:3 v8 _! s9 p$ a; U0 L! w" |  T
插入U盘(剩余空间大于1G)
9 K. g, P5 c. o9 r) n6 L一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)4 J( R/ ?% R) h. p0 q& z* Q& f

2 J* ^  X9 x5 a# K4 j' n备份命令如下:
+ p/ A6 C* }6 _2 L8 B; s+ P) ~1 \
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
+ c* o5 G9 j7 S) }- A) R8 c; ^* m8 o
8 ?. T5 i9 ^; I8 b7 [" h8 ]dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
, g! x  ?! S* \- J+ x* h+ S6 e- w$ C8 N/ _& i
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
5 @' F5 f$ B1 t6 Y- V' e1 P$ ]- Z; n* T4 v" o
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin! e1 ?; T  R' O8 ]: h8 ]

: T1 i8 G: s7 K/ ldd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin2 h  O4 W* x: A1 j. R; H
  ]) S* w! P1 h! b" y) S0 g! E
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin- y4 S" t4 Z, u8 A8 `' ~$ R

+ E6 l7 v$ ]5 [& w* \' ]dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
0 D4 o' W# i) ?, r( ?8 n3 @" ~3 ~6 p3 e+ S  z+ T. ^
dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
- W: _% k: a+ ^  w0 O3 c/ K4 `: \. ]2 y  Q# C) B# ~! n# F) k9 o
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
8 H  }3 M2 h3 M6 P  w) d
3 d2 r0 M+ L! u- p0 }# G. T# H$ Mdd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin! B0 I9 m7 O) \0 E# i0 v

  T: O+ }3 q: D3 s7 u# pdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin- ^8 {. G8 |7 H6 }- k
, b% m' ^* e8 [% L" `/ b  }
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin- F+ G! ^- x  _6 P# \8 j) |

) i" e) O. g& J, b1 C% xdd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin1 i0 ~7 [% r: i8 T

" r: R) p- N% Vdd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin5 N8 d# P8 |9 K" r* E
0 J' G- b* s' W; D% _/ c/ W
U盘根目录下这些 bin文件就是各分区的完整备份" L, j# ?; P1 |2 N" q* v& l

/ v+ L5 t# R1 R( a4 gA和B分区是一样的,所以只需备份其中一个即可
1 R! |! @4 H  c/ v5 C9 f0 X/ S8 i各分区的意思如下:
" [1 T- e/ i; s4 a9 V% _mtd0: ="startcode"$ Y+ h# ?7 Z1 j4 H
mtd1: ="ubifs"
9 l$ ~. b  f1 ?mtd2: = "reserved"
+ c# T; H  t/ E; g  j2 Q, Gmtd3: = "ubootA"& ^3 S$ E% M% A4 F$ Z
mtd4: = "ubootB"
/ _. o: G' \$ V( G2 omtd5: = "flash_configA"
, @! L6 A1 O' b* v4 K) lmtd6: = "flash_configB"
' ?; k: v; s3 |& Fmtd7: = "slave_paramA"8 l: D0 N* R  r) J! e
mtd8: = "slave_paramB"& A+ A) j& f8 n
mtd9: = "kernelA"0 }1 \4 M5 V5 Q; ~; H. H
mtd10: = "kernelB"" t1 s+ z* k# q" ?  g0 o" Z
mtd11: = "rootfsA"
' k; K' V. O1 A5 t6 E4 `/ h8 w( }mtd12: = "rootfsB"
) C! `0 Y+ F3 d3 ?' @mtd13: = "wifi_paramA". [! r- x) V) f- v; C. a
mtd14: = "wifi_paramB"7 T, `2 ?, F* W7 x9 G# E6 [! a
mtd15: = "system_param"/ |2 k: R1 g9 _; k0 t" e
mtd16: = "file_system"
2 @9 Y# j3 L- Y5 p- _+ Y6 B- Hmtd17: = "frameworkA"& x7 w. P; m2 l) a. ], {/ t3 Z
mtd18: = "frameworkB"# t/ {/ w5 L9 D* P
mtd19: = "apps"
. Q& A2 e1 y) r/ e8 g2 f% L$ e- g/ @ubi0_13 = "jffs2"* h2 S6 h; T/ _! A, J" ^8 v

0 W  t6 j6 }2 j9 W) \" Y+ S. i& y9 }0 G( I: {- a
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
' ?4 [7 y8 b; e; |, q- `
! D6 {- ]/ }" c9 u6 A/ H% v( N0 z其它光猫可以使用命令cat /proc/mtd" N) f0 P, d$ I# X- R# p
查看详细分区结构,8145V结果如下:& K- C( Z2 @  v% F. _
; Q' T" g8 v$ h. t

! ?: o+ {8 M$ b+ L- Mdev:    size   erasesize  name
/ d3 s' ^: {+ _% Y% Mmtd0: 00100000 00020000 "startcode"5 p6 c8 ~: O' v* l. j
mtd1: 0ff00000 00020000 "ubifs"# u7 R$ b: N( M! i+ a# a/ H4 k
mtd2: 00000000 00000000 "reserved"
- p7 x# o2 x/ c" e' H+ q$ H- Ymtd3: 0009b000 0001f000 "ubootA"  m- e- @& J0 U% W# S
mtd4: 0009b000 0001f000 "ubootB"# r# ]( c% T# _% \; D
mtd5: 0003e000 0001f000 "flash_configA"
+ m; n1 L' i2 r4 Nmtd6: 0003e000 0001f000 "flash_configB"
. q) b0 n/ T  h( g+ x1 R, ?mtd7: 0003e000 0001f000 "slave_paramA"
- C3 l  ?7 x" ^1 T  x/ g# N* \mtd8: 0003e000 0001f000 "slave_paramB"$ \  ?2 Y( c+ D7 L
mtd9: 00307000 0001f000 "kernelA"& U! h9 [" K8 ~, |, z9 Q! I) ]* |
mtd10: 00307000 0001f000 "kernelB"
7 q4 i( f$ ]/ @5 `# B9 Z1 l- amtd11: 02815000 0001f000 "rootfsA"$ L0 F5 K/ Y- ^3 v7 R
mtd12: 02815000 0001f000 "rootfsB"& J& z) C+ X: I4 i* L" y: i
mtd13: 0003e000 0001f000 "wifi_paramA"  N  [. W3 ]# D: G) X. Z/ y5 {0 t
mtd14: 0003e000 0001f000 "wifi_paramB"6 f) V& k- Y9 z
mtd15: 0003e000 0001f000 "system_param"
1 V! ]5 Y% V8 xmtd16: 0141a000 0001f000 "file_system"
7 h' g- Q5 {% C# E- I+ Z7 S; nmtd17: 0081d000 0001f000 "frameworkA"7 v. c. e& o8 h: E1 U3 A2 W
mtd18: 0081d000 0001f000 "frameworkB"
% h( k9 K4 M$ `' M! tmtd19: 07003000 0001f000 "apps"
& N$ Z5 K& @6 W& k9 R5 ^9 O5 q9 M4 J/ `8 l# S

1 P7 m! W6 s# r# J& N" B然后根据这个详细结果来修改备份和还原分区命令
3 m* L# J" B0 k1 j! d0 h8 n2 v
% C; K3 F. z( h3 a. i  d4 o# [9 s) U  K6 C: E$ _

' E; H) H6 i! L% D/ Z8 U) x4 p* H$ T* U
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
  o- r+ o5 m5 l将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开0 k! g% k* A7 _9 _4 l
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值% H- v. N" }5 i9 T8 v+ z. z
# \+ L, N; Q- ?, R; q2 m  w$ y5 q
下面用rootfs作为示例
" d1 Y0 o) X5 R: a$ D/ _$ `$ d  ]! I+ v5 N; g- x: J' ~

5 t2 r3 @7 z1 ~! E4 A将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图, w( S+ }" [. R4 k5 o8 Z

( F5 Q+ ?/ v; h4 K0 t7 Z0 a1 a& B3 _1 j, l9 }0 r, [
点  确定  开始查找,会看到一堆杂乱的乱码如下图:
* K, X& ~4 ?' e* o
1 O) `8 Y% m+ k/ P找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除3 q  e# ]3 H/ {( G+ {8 W

5 ], P% w4 P, p  `( H删除后如下图
$ J( T! _; k& r2 P
  B/ u# o$ B# P
; ]# [2 T$ _9 b, ~5 U8 p1 |然后保存,就是一个完整无多余的分区bin文件
- z7 q# h0 n# [8 \0 g( N2 ~8 [. n5 w然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值8 p# f" P, c5 \% `$ u

8 f- g+ n: r+ M" ~. a! J7 a7 r3,还原到光猫分区中(此操作风险很大,请自行承担)
7 M3 N. {7 l9 k  _- M) ?" J5 q将修改处理好的bin文件复制到U盘上,插入光猫USB口; `# A9 g) U0 r4 H. c1 B
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
7 O: T* i! ~. u) c: G- sdd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock32 C; D) D: P5 D

# U% l* h! m# U9 J" odd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9+ Y9 }( O3 e9 M4 u$ [; _
/ \% |4 G& w0 E4 A7 N  @- f
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
8 ^8 ~1 ^+ F/ |: K- z; W  ]0 {% z9 @+ j% L: y" |6 g. x

( l/ R8 ?8 Y0 F, C" j2 y说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
0 q& r7 J. o8 U! `" s+ K
9 A5 ?( w9 [3 s1 b9 {还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
/ y" p- K4 a  s( O4 m0 ]; i1 C( p$ J2 Y% ^
此操作在某种承度上可以代替刷机,也可以看作是手动刷机& I. W* r: S' S, ^

. @( i! |% O# v6 Z  G, _: Z二,合成线刷固件(使用组播工具或WEB页面刷机)
/ n! B" |. W+ t- B+ ~' G. ?; E' j$ W0 I: Y3 K" ~
1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
% b  K- Y' {3 ?3 @这里使用一个论坛上别人所发的补全shell的固件作为示例
! a# s- _, H5 q8 `( `a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
5 g% ]7 f0 X5 G! c* {9 {+ M项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存% r6 _; N1 V$ B: m" D

7 o9 S, E" W& o2 H5 ?+ s7 }
6 s4 [/ R& R& s+ @* x) @; |b,点添加项目,选择修改好的9-kernel.bin
. u: I6 L8 b$ ]" y) I: H9 }) Z- Y项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh1 U2 e/ y0 k6 ]4 Q: }
如下图4 q  ^5 M  h3 P# L8 s# {& Z
, R- ]6 r; L& x7 l( `

( q  K. `% r( K) P1 A( mc,点添加项目,选择修改好的11-rootfs.bin% f2 l! O2 f, N6 R- V4 d. p4 x6 \
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图9 r/ a. u8 V9 h/ j! g* h" E

1 V2 h1 r# z# o. e) d. D
  O$ q( u8 J7 Z4 U3 I9 Z
  T0 y2 t: j1 `+ ?最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机0 V6 Q4 V% t8 L
来个补好后的固件图
% {) i, r$ p; F! l* b1 h
9 k$ d8 f1 i4 e7 }5 O# X1 g6 W" ?
+ s. s1 ^' X+ l4 _6 g, I+ X6 q* x" H
2 o( g1 R  k6 F' D0 D6 A' B8 w# i( G( [

  `, \5 j1 c/ u& z
+ C/ g4 Q' X" n未完待续
* X0 G' w6 m' r' a& y( Q- W3 _- a$ a7 Z. R0 F& R; |; K
! _, l0 a# ?3 d
$ j* m- t; }; O& U8 p, g' z

, t9 B3 D; G& [: W" s- ~3 ]2 }% s8 g" o+ T( Q& Z& V

1 n, y, M! }; g+ W, V
# y- O, a; s7 k8 D8 f/ S7 R
# U/ [; h+ j0 c& y' w! a2 ^  F  _) k* Z6 V8 Q  [! K
8 h9 z1 I1 _1 `1 s& _4 w

8 X3 J6 z  X6 {% {
+ B3 T2 g& d4 e2 C  S

本帖子中包含更多资源

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

x

点评

请问大神 此教程可否用于hs8145v5上?  发表于 2019-12-8 15:47
版主为什么删你 固件帖子 抢他生意了  发表于 2019-4-30 13:46
请教一下,如果光猫没有USB口,使用TFTP dd if=/dev/mtd0 of=后面有什么格式  发表于 2018-11-9 14:43
发表于 2018-9-22 19:01:00 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-22 19:57:13 | 显示全部楼层

6 m  c. v3 u! H" P$ r6 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 编辑 3 q0 \* i7 q7 m' F% a: h% z

6 |# O1 l4 a& z! k  T2 {! v这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改

点评

论坛上那个018的开shell就是  发表于 2018-9-25 15:09
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|宽带技术网 ( 粤公网安备 44152102000001号 )|网站地图

粤公网安备 44152102000001号

GMT+8, 2021-4-23 16:57 , Processed in 0.025716 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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