找回密码
 注册

QQ登录

只需一步,快速开始

查看: 89629|回复: 156

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑
7 k9 p  H; T- \$ j2 n
9 b4 ]6 z: y. m5 d& ^( I6 L此操作有风险,只供研究所用,由此造成任何损坏请自己担责
! {: |2 N4 B/ u# Y4 f7 o) C- c) G5 f+ ?% Y' ^) ]) ]& F" c/ I
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
1 A. o1 y7 @7 ^
; D: E* _+ P9 r1,备份各分区:
. M3 i% w, l6 D% F8 K( ?插入U盘(剩余空间大于1G)6 c- i- \  G, }: E( Y6 u5 S
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
6 [+ R/ W+ A7 E" b' L, b0 e/ t, k' k- l3 w8 o7 y8 b( a: P
备份命令如下:
! `! K; A3 J$ K- J6 N) v- x9 x, m! L. |7 V8 k3 f
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin; s% V# U4 F* w! b. T0 n

+ B; H* U4 x  h9 D: W3 ~' t+ ^dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
, `/ y* T- y; j* }; J- j2 X
, u5 R2 f- ^/ O) R8 v* o6 wdd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin) }$ ?) g8 }, |& H) e/ h
/ Q+ Q& h. z: T
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
! s0 x+ q& U: j% D) P* T8 x! h) E9 S' L! v) Z* @3 d9 C' n) P
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin( `% E% G+ I8 u3 t3 F  J

+ b" K/ s% U; Q/ J8 N# Q) Add if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
% L+ |( K& C% u; W5 k  t4 |' o/ n- ]. L0 Z- R% u
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
3 S0 \5 B! D5 c( B) a/ p; J' E
+ e! f& ^$ e+ I# sdd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin% t5 C; T. N: j: Y$ h: _" j

2 d$ x! q- s% f; v+ M, s/ fdd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin8 e1 k4 n+ J  W  h: i
8 T7 Z4 ]9 r$ [8 R+ y* `
dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin
/ \# z4 e0 }' J) y+ X: J! Q+ Q- k5 k4 J6 Z2 }% u) z5 U
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
* v! v7 X0 j: B1 m' l0 C: j1 S
5 ?& R$ ^0 t, h' }  A+ F: a+ Hdd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin: j) m/ V) x2 @; g$ B
1 J7 n7 H: M. F6 P: k
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin( r" z  I3 N- Q* q& t5 ~: v$ I6 ~

1 [2 ]. ?8 n! w0 odd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin8 N' T  [/ `' K* O! \9 v; ^, v( p% M7 E

( \- Y0 {& \( w' R( hU盘根目录下这些 bin文件就是各分区的完整备份& \& _# f. _; T! U9 G# T* h4 q

) ^* L* {4 A  DA和B分区是一样的,所以只需备份其中一个即可3 z' j: I# w+ p5 Q. J
各分区的意思如下:8 z& d' Q9 }. p
mtd0: ="startcode"
5 ?& w% S# k' g6 l: ]mtd1: ="ubifs": B1 Z6 x6 y7 }+ [; |1 D
mtd2: = "reserved"
8 b7 f5 W5 `* w4 a1 E- I( h0 xmtd3: = "ubootA"6 o( F9 U9 p# s4 I. J
mtd4: = "ubootB"
( G# K+ l  c0 K1 y8 ~. hmtd5: = "flash_configA"  D5 }( E7 R1 f: T5 T
mtd6: = "flash_configB"1 P5 b; b* H, p+ F& y% E6 n4 U4 e
mtd7: = "slave_paramA"
/ y  k3 P+ P7 o0 [- a% Zmtd8: = "slave_paramB"
' I; \. e7 K7 ~# F, i/ l. q2 S) p! Amtd9: = "kernelA"
; i% D6 A$ r! Y4 jmtd10: = "kernelB"
5 g! p# I* V) }' H% W# wmtd11: = "rootfsA"# u& j1 ~: \6 C) t% n$ `
mtd12: = "rootfsB"0 n6 ?. B9 g& H" s4 r; b
mtd13: = "wifi_paramA"6 _, L" q; v! L( [5 T1 S
mtd14: = "wifi_paramB"
% h  B4 W: T% c$ q( |6 w( c: `8 amtd15: = "system_param"9 h0 x8 S0 v' c  Q  f
mtd16: = "file_system"
7 \& w/ r! p) L( Imtd17: = "frameworkA": J: Z( [; `% |
mtd18: = "frameworkB". X" C+ l2 S: g$ B! }
mtd19: = "apps"
0 d/ _: P0 O' U+ Z/ r+ Aubi0_13 = "jffs2"
# E1 L* P! a4 e& L% P1 ~$ h
2 p$ T* H) W5 ^" X0 g3 z3 \' g) @/ R( C" A' @
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
) R. w  f1 f0 f2 L( f
1 z$ w8 ?6 S' C; Y! s- O% G其它光猫可以使用命令cat /proc/mtd
0 Z' _  O6 t3 b查看详细分区结构,8145V结果如下:
2 C& n' b1 c8 Z$ s# G

/ @( E& J' q6 D, {( w
; _* p. _: E7 g5 W  `: U4 `+ ]
dev:    size   erasesize  name( I$ L$ }/ D  b" d$ |! t5 k
mtd0: 00100000 00020000 "startcode"% ^  p" \1 J% x% V& \' n
mtd1: 0ff00000 00020000 "ubifs"8 S  G8 d6 H& w% ~" O
mtd2: 00000000 00000000 "reserved"
; y0 e1 \* M3 j' _mtd3: 0009b000 0001f000 "ubootA"! s( _" P6 V; B% C
mtd4: 0009b000 0001f000 "ubootB"
8 C9 T- k  _8 \5 }1 [mtd5: 0003e000 0001f000 "flash_configA"
/ l) C+ [7 s& g5 x+ S* hmtd6: 0003e000 0001f000 "flash_configB"6 ?0 m4 c/ H  `4 x) x0 T
mtd7: 0003e000 0001f000 "slave_paramA": y5 y7 ]( {; c2 ]
mtd8: 0003e000 0001f000 "slave_paramB"9 N4 U, Q, c8 B4 {+ }
mtd9: 00307000 0001f000 "kernelA"
* q. Q8 H% K. z" w$ Gmtd10: 00307000 0001f000 "kernelB"
9 K; y# }$ Z, \: I# Nmtd11: 02815000 0001f000 "rootfsA"
% m3 }" [4 g/ \: ?$ F' u( G' \mtd12: 02815000 0001f000 "rootfsB"
: x+ {$ l0 y3 N* r$ @- ~mtd13: 0003e000 0001f000 "wifi_paramA"3 e6 ]  ~1 m! k1 f# _
mtd14: 0003e000 0001f000 "wifi_paramB"
3 y7 H. g! g. vmtd15: 0003e000 0001f000 "system_param"
4 Z7 W% Y3 C, }! amtd16: 0141a000 0001f000 "file_system"! ~: H: e  ^3 h' X
mtd17: 0081d000 0001f000 "frameworkA"2 i9 g6 U7 t7 Q5 Z9 k! Z/ {% r
mtd18: 0081d000 0001f000 "frameworkB"
6 L$ F' O0 Q8 z" hmtd19: 07003000 0001f000 "apps"! W* g) t: @; n3 \' E/ l7 b1 L1 j
; o2 @7 i: ]1 A5 m
! w4 {! N. K& j' Z/ H( r& J
然后根据这个详细结果来修改备份和还原分区命令
" L+ j7 F- c8 x' ^" v0 S3 h
* q0 E  [8 w  C: s5 Y& F( u* C  w& M3 Z- s  Q# h9 d7 ]1 v
* X' H* h( ?! X' E2 ]

+ ~0 H  H' Q9 C& S2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
$ P/ W/ R- R" p2 d4 O0 c将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开0 w1 f2 x: ^$ h
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值* F% q& v3 R7 |/ m' S$ s* z
# e- n; g6 j/ n+ ?* l
下面用rootfs作为示例2 E) @' G+ j9 n" T* A# d# S0 Z
$ j/ }; f, s2 b' w6 \2 L# M
* n( I+ `$ W  c/ y0 @, h
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图& L6 |% ~  J2 i7 t1 e

* Z0 ]% R. ^( Y* B8 o
; z! S0 o  i$ ?+ T: c! ^7 x) [0 b点  确定  开始查找,会看到一堆杂乱的乱码如下图:1 \. y5 H$ @$ ]2 p7 m5 K' T
- L# e& X' K) S7 T5 P- i
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除5 z) C9 T+ [6 g" n9 E
. V% x. }4 |! l; W: m
删除后如下图
" P2 w( P$ n& o9 r2 |
! u9 q# L9 L% Y/ k" b( q" n8 m
$ B' a& I2 _% M" q# k4 w* }然后保存,就是一个完整无多余的分区bin文件5 r5 Q% T8 @, J$ {1 d
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值( R! [; d2 v- L) u/ x

1 z: m/ ~8 L# S( o3,还原到光猫分区中(此操作风险很大,请自行承担)
- [7 `0 s5 p9 @6 b# u将修改处理好的bin文件复制到U盘上,插入光猫USB口
: ], I: N3 L* g. [, Z# I然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)7 ~  G! O& [' a. z& T3 u# v; q
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
9 e2 A/ n9 ]* S
4 j6 J& t/ E/ cdd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
/ f) ?1 y0 t! h  a/ `
0 x* i1 u2 I/ u& |dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
' a$ b/ D) _  j% j' y: V, K8 }4 A6 r) v7 Y
7 b* R. G: D- k$ l
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
# A/ m" _! e2 \/ C& B
7 L7 B) n: I- z  @3 W还原进光猫分区后,稍等十几秒,再重启光猫,就OK了," `1 u3 E/ z, R# X3 @7 e# Y1 P* ~# y
. K+ Z5 k5 V3 S
此操作在某种承度上可以代替刷机,也可以看作是手动刷机
0 m5 z, r  V$ e5 ?- s' m/ ]' v5 s# d1 r8 I4 S- u, D
二,合成线刷固件(使用组播工具或WEB页面刷机)& X5 c, L7 M4 l  c

+ ~# D$ L, {5 r7 T1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
; d8 }7 x4 m; L这里使用一个论坛上别人所发的补全shell的固件作为示例* D! Y1 a% ~2 [) w5 @
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
, z; F- U( R7 o4 J4 @: i2 m% a项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存- e& Z; s& w" X  @- \
9 M; I* z' F; W9 o
# ^3 B: M% T& }) E
b,点添加项目,选择修改好的9-kernel.bin" A5 k0 w* ?: W
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh# g6 p8 P( g% ]
如下图
9 B  x8 a& d$ V' f9 r
# N: J9 F- c5 i# Z1 L2 t# l$ h3 ?- x# K5 z9 f/ Q
c,点添加项目,选择修改好的11-rootfs.bin
/ U- l2 e6 v; X# u8 `% L项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
  ^% Y. |4 f) ]# J5 N' u! b( S( ~& P. s2 f' |7 C
' ^7 O2 Y5 g7 ?; v

  u# H( w" c5 a0 R3 A2 [" x最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
, @8 J) H) A, t" O8 }来个补好后的固件图! {; Z- v7 E) Z* W! q

# s) n" M# u! [/ d! N1 q; a+ x4 Y& G1 n' A% }9 o$ i- h

3 _. ~" m+ x9 z4 w* B6 i2 V1 y' n
* d# s, N0 Z, P, P( O( W$ f9 I5 I  n! S. ~/ Z

, |2 L7 r) z4 M; M9 e未完待续& g' W: m) B) G9 k

8 P/ Y! V/ D: f/ m3 B
4 b0 R; [; T8 }, b) {$ U% Z  u7 ?9 }5 g8 n+ I2 M$ y2 |

1 s+ A! T+ n' x/ S; `; h* q8 f) M- H

) L- I! H) t' G7 q) e6 V+ |; `! \9 t% i* x* d* P& r. s4 q

. U1 b* K' h- F' ~% F) W  J9 y' o, _

. O- d; l5 P' G% x4 y- j) l5 h3 c

2 f3 m" \/ W9 @& [

本帖子中包含更多资源

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

×

点评

你好大神,麻烦问一下华为光猫直接用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
发表于 2018-9-22 19:01:00 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-22 19:57:13 | 显示全部楼层
7 r: x, \5 j6 f. Z7 q. `. v8 E6 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 编辑 ! u+ E, A1 Q6 q. Y8 w7 a/ Z
. s  @. ~1 [5 S3 T4 l
这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

粤公网安备 44152102000001号

GMT+8, 2024-4-26 12:00 , Processed in 0.027868 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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