找回密码
 注册

QQ登录

只需一步,快速开始

查看: 89839|回复: 156

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 8 M. J$ h0 I. a

6 y9 }% z* Q- w7 B* x" F此操作有风险,只供研究所用,由此造成任何损坏请自己担责
1 |. C8 \; x4 g7 s( x' [5 e$ t' j" g7 |3 Y# v
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)% h: x% A% A6 e2 |5 x/ t* F

( V/ U; j9 r2 _5 }" P* C( w9 G5 T9 H3 g1,备份各分区:' \& o  R" _* e
插入U盘(剩余空间大于1G). Q2 z6 Y! s7 X. w) M. E, H: x
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
5 D( z+ v0 I" @$ P7 Z+ c) n+ e+ z3 M
备份命令如下:: V3 D8 p' m! g7 b0 a6 H4 z) Z

( M* B9 k0 u" Edd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
) a0 s% f: n, j; v3 P5 s  e! P2 a" G# Y4 c* Y& j% D6 c/ V$ l  b
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin) p% P  ~- J0 g! }

. T/ i: B- @- i; S. K, Mdd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin7 f% c* @" }6 Q/ |8 U5 y
0 z, p. M$ }& r
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin! j; Z9 u" A" @5 r
" S" B/ F8 `0 x2 O3 n  L
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
7 s8 w9 A" s# F
: ~6 K: s% ]: e8 Ndd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin7 T3 Z2 k! N- r" [4 n+ W

# `) k& N2 S4 h4 y# v7 r& zdd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
" B# b# `; [/ ?0 A0 _
- |& G2 v7 D, c- Idd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
6 ~6 q3 }) m6 L' p+ @  |8 I2 j- ^+ y& z9 I2 `: V- k$ `
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin. H+ L1 a" }6 D% X, z" z
, \8 S# P0 q5 F5 H" s! H& b
dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin' n6 G% D' ]$ t" c, D# D  J
# [- S4 r4 X0 Z6 L) L, [
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
" D* i  }5 _( F. T* O5 R% E
1 j* l) d* o' ]3 Idd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
+ V: \, s. Q! d7 C+ Y
" g% e" d/ s, K9 l" W8 _& y' M( ddd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin, z% Q8 a9 h1 Z9 z$ o8 q
/ M# z8 v) F* x# M/ G" B0 F& _+ R
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
- F5 g: K+ L. S8 z- ~2 q' q) l9 N4 m. K, i
U盘根目录下这些 bin文件就是各分区的完整备份- p, E2 W1 l/ O$ L  u

+ o& ~# Y9 s. v9 g, `A和B分区是一样的,所以只需备份其中一个即可
' o0 Q& h0 l/ v  K各分区的意思如下:7 B) @% [4 }% ]' U6 |2 n, M* x
mtd0: ="startcode"
- G/ N- }: C% L8 Tmtd1: ="ubifs"
* z8 A# f! p. d2 {/ b! J6 vmtd2: = "reserved"
7 O7 }6 c( J1 J4 b; r% bmtd3: = "ubootA"* h6 L* ]' d: D9 q6 U0 A1 Q
mtd4: = "ubootB"
# `3 G) x7 G' b  o1 jmtd5: = "flash_configA". s1 {: \9 G  g. d* A+ t
mtd6: = "flash_configB"
$ u  S2 r1 s% L& d4 N7 s3 tmtd7: = "slave_paramA"
( ~/ i, d) V) X1 L7 S$ J$ K1 Dmtd8: = "slave_paramB"- A" f# e! p& B9 S* L/ b
mtd9: = "kernelA"9 K) o) Z6 e7 t' M2 }# O% \0 N4 Q. a
mtd10: = "kernelB"  N# I0 F3 X! J) S3 u) T; C
mtd11: = "rootfsA"6 H* U2 s; m5 L
mtd12: = "rootfsB"" ^$ f& I! o2 X# N/ a5 k6 e* q
mtd13: = "wifi_paramA"
- M# ]% g, q; I& J6 p. Tmtd14: = "wifi_paramB"2 w* [. R5 G1 l9 F. e- o8 r% g
mtd15: = "system_param"
; ^1 L- E8 R! A3 g1 Hmtd16: = "file_system"  t. v+ y. A# i, j' ^
mtd17: = "frameworkA"7 x8 N: }, ^& c" f
mtd18: = "frameworkB", q0 ?$ P2 N( M. e. F9 A4 r+ P
mtd19: = "apps"
; M$ G; a) a2 X1 Q. t  Xubi0_13 = "jffs2"
2 F* D) ^* S+ `% Y  B& f6 S9 B8 O. \5 w0 l8 e8 i
7 Y* \) M: H( x" \  ?$ V0 C
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例5 K& J. A: ~/ m+ y
+ w  u) Q7 N2 s9 o, |9 j# k7 i2 U/ l
其它光猫可以使用命令cat /proc/mtd+ ~2 b4 o8 y4 t5 ?* E- v2 e
查看详细分区结构,8145V结果如下:% n& f- K9 }# x$ N8 o8 M1 d5 C

7 D0 L. m+ s' F  s" b" x

! `3 G: U0 y6 O8 Z3 O8 I# Tdev:    size   erasesize  name
# \7 Q" ?+ Z9 v) z1 I0 bmtd0: 00100000 00020000 "startcode"0 W# v+ w# f' H4 c
mtd1: 0ff00000 00020000 "ubifs"
+ M6 j% A  V8 G8 ~2 {mtd2: 00000000 00000000 "reserved"; e7 v) H& H. W
mtd3: 0009b000 0001f000 "ubootA"
2 U" t8 c- N" ymtd4: 0009b000 0001f000 "ubootB"1 @6 o# j# T! U' s( p0 e; R
mtd5: 0003e000 0001f000 "flash_configA"
9 ^3 L. a: j6 U9 k, e7 U2 ?mtd6: 0003e000 0001f000 "flash_configB"
7 m4 k$ `8 Z/ @7 m! n# m# mmtd7: 0003e000 0001f000 "slave_paramA"+ @: Y; }3 u" r0 z
mtd8: 0003e000 0001f000 "slave_paramB"8 N5 k; ]: _7 v7 g
mtd9: 00307000 0001f000 "kernelA"
7 q6 ^' u( R2 ^. u+ p0 Mmtd10: 00307000 0001f000 "kernelB"6 c, I  L+ G" G9 h; q5 [
mtd11: 02815000 0001f000 "rootfsA"0 v5 z7 f7 Y5 O  f# u
mtd12: 02815000 0001f000 "rootfsB"1 q* J( `) |6 w
mtd13: 0003e000 0001f000 "wifi_paramA"4 n2 r6 ^! F* L( M( ?7 u8 [
mtd14: 0003e000 0001f000 "wifi_paramB"6 Y6 T2 P  b" ^  `; B/ j  |
mtd15: 0003e000 0001f000 "system_param"& g( S: M. {% L0 d* a/ w
mtd16: 0141a000 0001f000 "file_system") c4 A3 L/ B' I1 J8 p) R% a
mtd17: 0081d000 0001f000 "frameworkA"
' X5 O9 {9 g2 W) Y9 _3 Qmtd18: 0081d000 0001f000 "frameworkB"% Y6 ]# S  o, q9 u; R6 X  E6 H. I
mtd19: 07003000 0001f000 "apps"
" T+ X) R* k  {8 Z  z. S# G! C& R# B5 }  O% p+ n5 G
/ }7 ~4 E; v  }) o* @: c
然后根据这个详细结果来修改备份和还原分区命令
( Q" W" Z* M: z
# X- w4 ?/ D2 R& D4 \6 t7 o: N; J; Q- z
4 m  {  Q: m/ y- Y, m/ ?
* f; |4 J! q) m9 H; Q+ ?/ D  j( W
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
* z4 ?7 r3 e, y. O9 ~将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开  v2 w' b: Q7 A$ Y
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值2 V0 p# c( u" i7 }; ?2 X( P

/ q4 P3 u1 Q$ M( U下面用rootfs作为示例% n. q( ^7 q0 {- l) }6 {+ y

% Q/ B$ a% O+ U7 Z' ]5 m( [$ f0 [/ h: u8 k  C
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
- E3 X* i; e5 p
& A6 a$ S3 v" |! T0 o+ K9 N  M6 j$ u$ e; l) l& |- M
点  确定  开始查找,会看到一堆杂乱的乱码如下图:5 i. k; K8 T4 j) c& S* ~$ l2 d; U
/ N& J, T9 G5 d2 ?0 S; ?
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
, a0 ?. U& j2 n% C' H/ _3 t3 p
6 n3 \1 T' s7 Q0 ?7 q* R删除后如下图2 H$ {  `2 A. N* D+ U
: Z0 ?8 D, B1 h+ ?9 t
2 {3 }: ]( j/ @
然后保存,就是一个完整无多余的分区bin文件: h) U, Q! M/ Z" c1 \# ^
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
% z) N, ]) @" |) B5 j
) _/ D4 e. ]1 v1 C9 W' ?" U# |3,还原到光猫分区中(此操作风险很大,请自行承担)& K7 m9 l, T) V
将修改处理好的bin文件复制到U盘上,插入光猫USB口  n( q3 e+ _$ Z, C- Z) v' Q1 r
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去): }; |5 ?" Z! e7 I
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock36 m/ x# w$ O, j$ O
& l: x  X! b( R) r
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9- B( f5 k% R2 v* a
: r% H9 V4 w% |6 I* G4 W/ n
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
- W* g$ R9 f7 P7 c
6 V7 y( K7 C! \: r% l0 [7 I
1 T4 w2 q8 l+ x- |7 D1 _说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
& B7 N; t$ I( l/ v2 S7 p. T' V/ Q# {
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,% Z  a7 g! w  p! `

* q" w/ ~8 l. Q此操作在某种承度上可以代替刷机,也可以看作是手动刷机
. }9 d: n2 T' o3 T/ R( N% |
; O4 ^0 n. R  ?. d) d+ ?* y二,合成线刷固件(使用组播工具或WEB页面刷机)
2 n' y5 r; ^6 q) b9 k, D' y
7 y( |4 [) h' o+ K. k8 I* p1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.# l4 w- N! i$ J1 h) ~* W9 ^7 n( A
这里使用一个论坛上别人所发的补全shell的固件作为示例' Z# i  q- [/ m8 N+ r) ?4 Q5 h
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin  g8 u" _- s$ u3 u
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
2 x7 s0 S, W" \7 s4 M5 ?8 x% x. Y; R
8 }; Z! z& l; K& V! L) o& T  \' a
b,点添加项目,选择修改好的9-kernel.bin" g/ h6 o5 g5 ]
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh( k+ j; l7 c( Q9 v9 ]' J3 M: G7 z
如下图4 [; M* Y' t. n! s' V$ q) ]8 [

4 v+ E, |. E5 r3 n, m9 R" l0 }& R( H( d# \7 K4 b9 n- h* J# m
c,点添加项目,选择修改好的11-rootfs.bin
4 T1 B8 I/ c$ `  _  ]6 |项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
) U/ J  e5 J2 \+ w: A; i. u* P; e; Z1 S, A: }: a* Y, ]9 T6 S

* r5 E; n: \) L1 Y" o& ^( V/ J( X/ l$ r
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机: u1 o( y" Q& q5 C9 E
来个补好后的固件图) f' F6 m) g0 F1 f

3 G  \8 s2 t! o0 }  y9 F. I! T0 G/ h; `  Y
; t, k# r$ `; B( o
4 @: _. L5 B8 |6 b0 y& D

% R# b+ v+ f5 v/ m, w
) C( L$ G: K" y* W2 Q未完待续
  }$ P/ y! c$ `9 h/ E
5 W& q0 D' M/ K' ~4 }
* J5 J" }8 S; F+ w) F1 f4 A$ ?* M* o  P
( `6 }0 v/ i, L$ \' j- g- N  n, K, f) R3 z9 P( [
- `  b, W3 O7 Z4 e

& e! K2 L3 ~+ k1 B. y; ^" F$ J4 Y2 M, O+ |0 y

, P6 n3 A1 q; @6 w
4 x- J6 Q& d. z# }* a' @& i3 s( h2 u

1 c) i$ X3 G5 F; U0 T; t& z7 g* x# E) Y1 C

本帖子中包含更多资源

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

×

点评

你好大神,麻烦问一下华为光猫直接用tftp导出固件的方法,我用的hg8321R,没有usb接口,用命令在光猫里备份,rootfsA.分区一备份,光猫就自动 重启了,里面备份的文件也会一并消失   发表于 2021-6-4 14:06
请问大神 此教程可否用于hs8145v5上?  发表于 2019-12-8 15:47
版主为什么删你 固件帖子 抢他生意了  发表于 2019-4-30 13:46
请教一下,如果光猫没有USB口,使用TFTP dd if=/dev/mtd0 of=后面有什么格式  发表于 2018-11-9 14:43
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改

点评

论坛上那个018的开shell就是  发表于 2018-9-25 15:09
发表于 2024-4-8 14:54:20 | 显示全部楼层
感谢,学到很多实用东西
发表于 2024-4-8 14:20:49 | 显示全部楼层
这个真要好好学习下
发表于 2024-3-19 17:20:17 | 显示全部楼层
路过的,学习一下
发表于 2024-3-14 22:12:03 | 显示全部楼层
学习一下好帖
发表于 2024-3-6 10:22:36 | 显示全部楼层
感谢,学到很多实用东西。支持楼主,学习一下
发表于 2024-3-5 17:45:08 | 显示全部楼层
求分享个r22的shell文件
发表于 2024-3-4 15:19:53 | 显示全部楼层
感谢,学到很多实用东西。
发表于 2024-3-4 11:53:03 | 显示全部楼层
18年的帖子,现在按照顺序还能用不?
发表于 2024-3-3 16:29:24 | 显示全部楼层
学到很多实用东西,感谢楼主
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-4-27 11:05 , Processed in 0.029593 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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