找回密码
 注册

QQ登录

只需一步,快速开始

查看: 92052|回复: 156

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 " n1 U; S4 v2 k1 C0 U
1 k4 _# L! L0 E5 X3 W8 X$ G* q
此操作有风险,只供研究所用,由此造成任何损坏请自己担责) }$ i" p, V/ z* A( y( B% o( p

4 v+ y/ I7 r8 F3 H* F3 z/ _一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)& y4 f* @- n3 q0 \7 [
6 i/ b6 O. m0 y( v8 J' n
1,备份各分区:( V7 J) O6 i5 [0 i6 {
插入U盘(剩余空间大于1G)
. a' Q+ ?  }0 A6 {4 N) H一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)+ {7 v* W# l7 h# O+ r4 b+ Z6 V

; t# L: |! ^( q, b% i4 C0 _备份命令如下:, e' g, k, `5 v) e6 c2 I9 \- v

) o, k' b# ?) q% A0 G0 S  Q8 @  _) Ydd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
3 z) g- R8 X$ ~4 V: b! }1 J0 |! I# d0 b' i$ R" Z; T; k3 Z! g/ e
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
5 k( h4 g6 d& r7 W# {/ }9 K
( f$ A% I5 o) u5 A' a0 J" u# g6 Idd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
3 j  L3 k  m/ K, @+ e
8 t% ]( Y; W; {% _$ odd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
; @' G+ K- ~" a. f7 i( e# ?+ ^  Y# F6 B* i" G- U; `
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin7 E. ?; b3 y0 J8 m- T  ~+ Z

( k* _9 z' Q$ D. G! p0 p% h1 n! vdd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
2 _/ v; W7 M) K- Z/ A6 I7 Q7 i# r2 H& P$ B
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
+ i1 R5 e1 A, J1 v# g4 x1 I3 }
  t1 x( f5 I1 K1 V# Add if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin( R! `* e5 Z1 i; D% \8 g

' S, b/ B! b8 y& D, X, edd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin! d) }8 R! h* P; o0 j9 ]

' k% H5 B- j7 ~8 h4 zdd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin
' n# Z8 q' T! I1 u  p, ~; J4 P# r
. O/ I6 h. F+ F" ?2 r$ pdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
+ {& V  z0 O$ c: Q
6 O- N9 I3 S" v9 a( c+ r/ ldd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin2 ~# E( a( n4 |2 Y1 C, x: x9 _- o
3 J  C5 Q9 N; v) m( s
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin) q7 {2 ?7 A# w; R/ X* G& G- E
: L6 U8 L: N0 S$ t! j
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
, b* L; i# V- i: R+ o" R1 s& x
+ d! o/ U& z8 H7 j) A" |4 e7 aU盘根目录下这些 bin文件就是各分区的完整备份: ?6 J0 s0 d; U; \' e* z

7 `* ]8 A/ Y# m8 Z$ O; fA和B分区是一样的,所以只需备份其中一个即可
" m5 L% x1 [  R2 |' F各分区的意思如下:
% ~+ Z: j; R$ D) f# Zmtd0: ="startcode"
4 D9 n; V2 K; q" i) e% B- a7 J2 xmtd1: ="ubifs"  s2 O: w- {5 ^7 E
mtd2: = "reserved"
  P- C5 U+ p0 M. n8 R/ k" I! Hmtd3: = "ubootA"6 b( x# {) `5 R# \
mtd4: = "ubootB"  K) O5 c; a) N! S! U
mtd5: = "flash_configA"
) |0 v  F+ T; U! wmtd6: = "flash_configB"8 C- b3 ]" u; j6 b+ b5 _
mtd7: = "slave_paramA"- Q/ p) G; y( G! C9 {6 Q
mtd8: = "slave_paramB"1 L$ y7 r; l& b
mtd9: = "kernelA"2 W' ^' z2 N1 v4 T
mtd10: = "kernelB"
7 @6 L# j8 }( Kmtd11: = "rootfsA"5 A( H+ {3 \- v  R! |6 V
mtd12: = "rootfsB"  w8 i6 Z3 P. i9 H8 u* c
mtd13: = "wifi_paramA"' {( P+ a% p( r+ Y0 E
mtd14: = "wifi_paramB"
6 z9 X' l; L! x/ a$ nmtd15: = "system_param"
2 V* q! _8 M$ {mtd16: = "file_system"1 c$ G# v' q- |: W
mtd17: = "frameworkA"
& i8 [9 e+ i2 W& Umtd18: = "frameworkB"- I7 y6 J+ i, \* g6 @; ~
mtd19: = "apps"
( s6 }( F+ `' nubi0_13 = "jffs2"6 B9 o( F+ Q8 G% A  q1 k( p
; b: [6 V6 D) I

1 `4 [1 r' O0 f9 i' {' T% b其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例4 G7 z) b3 a' J+ p5 G

4 ]- T( s% ?7 K+ ~3 V) ^% W其它光猫可以使用命令cat /proc/mtd
/ W8 C. T0 V- F; w# n5 ^1 c3 F查看详细分区结构,8145V结果如下:6 U- v8 [. X1 A( \& Y
2 _4 ]0 K! \. U! S# F7 Y! l0 y

1 i' B- G6 K9 Adev:    size   erasesize  name1 G9 h0 F/ L- v+ R" Q* c8 J
mtd0: 00100000 00020000 "startcode") Z9 l0 |* _; J* j) l1 n
mtd1: 0ff00000 00020000 "ubifs"
0 e6 @- C  Z% s- @4 b3 G% rmtd2: 00000000 00000000 "reserved"
9 M& W' H* Y, }mtd3: 0009b000 0001f000 "ubootA") ~/ p5 v5 O" Z4 E/ N: j; Z, E
mtd4: 0009b000 0001f000 "ubootB"
* }. @$ o& m! _) ?# mmtd5: 0003e000 0001f000 "flash_configA"
1 R. ]) O. D1 }7 \% \mtd6: 0003e000 0001f000 "flash_configB"
5 k! y. `% D/ i6 {0 G0 Fmtd7: 0003e000 0001f000 "slave_paramA"
% D; D: i6 t0 e, d: J% O' ]mtd8: 0003e000 0001f000 "slave_paramB"9 C3 B& f; V( C0 R" @
mtd9: 00307000 0001f000 "kernelA"
, w6 R4 H0 A4 {mtd10: 00307000 0001f000 "kernelB"
! d' c) |, Y; p/ ~* I6 p4 V1 Tmtd11: 02815000 0001f000 "rootfsA"  |1 q- V5 b0 ^" b$ T0 ?
mtd12: 02815000 0001f000 "rootfsB"
4 D2 }, J* b; u* c. {. Gmtd13: 0003e000 0001f000 "wifi_paramA"5 N1 U2 M- o) J: P) r  c
mtd14: 0003e000 0001f000 "wifi_paramB", g7 D9 c3 @) F7 k7 }- y- J% g
mtd15: 0003e000 0001f000 "system_param"5 e' V$ ]5 k( }$ _
mtd16: 0141a000 0001f000 "file_system"
# K5 V8 p  k6 I( y. xmtd17: 0081d000 0001f000 "frameworkA"
: p  t$ d8 f( M8 q1 j& N* Emtd18: 0081d000 0001f000 "frameworkB"
' R3 k+ S0 ?0 a- I4 Nmtd19: 07003000 0001f000 "apps"' @4 h' |7 O5 R4 y7 \1 F7 n
9 @* E7 t# K* c. C

; `4 i. z/ i" }4 m4 d( P% X; X然后根据这个详细结果来修改备份和还原分区命令
7 v& }# ^/ i3 l, r0 H
& h2 N8 A$ ~6 m! w2 U# t7 h/ M# l! F$ U  m  l% M! z

) O8 e2 l. ?# n. F( }# @1 u/ B
* q5 w8 h2 z" C2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)1 s$ c2 g" R4 j/ Z1 c  U, T6 c" E, S& @
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
4 x$ F% v, j% }1 J7 n& p直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
& D0 k- Z' E6 Y! j8 R; V2 z
+ [& [) p" s6 |! H) ]下面用rootfs作为示例# M& x7 u( s( q& ]/ _

3 l3 H6 \- N# S' G( t4 c3 D# A$ b! p& q. z5 p) G: [( a# S& R
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图8 c" g; G, L1 y

7 w/ ~" L3 x' k( P+ G# X2 `( ~
! W+ s+ M! R: t1 v点  确定  开始查找,会看到一堆杂乱的乱码如下图:
. ?8 \/ `0 Q' i9 P9 B6 z3 A
8 s2 ?6 y* X5 {: W5 a' x* p& K, L找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除8 w+ h+ c. g/ B1 R: d% V2 p9 G! Q

' a3 Y7 t0 ~! c$ n" L$ _2 M删除后如下图' @5 y; H- D1 E& Q3 ]( p
7 k: Z1 Y/ J: @5 ]
; T& t. w* t3 n+ }! k  G
然后保存,就是一个完整无多余的分区bin文件4 \; W0 `6 W& p4 ?/ J% S. H3 a
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
2 ~+ T8 q; u$ i/ s$ S+ H8 S) C8 i) T9 I: t1 L2 D
3,还原到光猫分区中(此操作风险很大,请自行承担)
' p6 S6 w3 k* B  W; i/ L4 g将修改处理好的bin文件复制到U盘上,插入光猫USB口
0 |% g/ Y% S" O( [+ B1 o2 y然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)7 e+ M% {2 F4 |
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3* C& d1 L7 @1 [

- H5 D3 }  ^8 p* u/ Y! @dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
. V. a2 ], O% s9 K. ^( G" k3 R: a) y+ O  f
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11" I+ B* n4 n. _0 D, \1 P
, J3 w* B4 Z1 {5 m( }! ~  Y
+ l& W7 k% K$ m
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
5 w) F; n- X! M# p( u
, p- R7 K2 T. F2 P0 E/ l还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
6 g) [1 i9 j9 s! c/ a, ?0 {5 @4 U& a& M" L
此操作在某种承度上可以代替刷机,也可以看作是手动刷机) D. P* ]* B/ d1 G% a& t3 G. N/ e

3 {* f4 S. q1 D# j5 R! M6 |& d* l二,合成线刷固件(使用组播工具或WEB页面刷机)$ j2 f: M( _2 M: I6 N

# ^# k- F8 t' C: D. H8 P1 m9 ^( r: X1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
4 C- g9 J" W! N* z& g0 z- n) y这里使用一个论坛上别人所发的补全shell的固件作为示例8 p. N$ a, ?6 ^$ [+ P' C
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
! x7 k8 i$ f* u项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
5 @' j9 d" ^( J0 ~1 m/ b/ c
: ^: D9 L. t. Q- u) g2 Z, m) ~8 ^' f( }7 _- _, ]& T
b,点添加项目,选择修改好的9-kernel.bin
9 C' M; v0 S! p* \5 L项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh$ n9 G$ A5 g3 Z- z: u/ f! i$ s
如下图4 |; z3 I; q' u
$ Y4 C7 {% y2 t8 j( e$ c- ]. y

+ ?' {3 ]; T8 V$ k8 {c,点添加项目,选择修改好的11-rootfs.bin! U  q6 C0 Y0 n+ y8 \
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
; g' s9 R2 J2 h9 x
7 Z3 P% Z. f# A7 m
  K& |+ X' e$ V, v- Q2 E: j4 [# |1 e
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机( N/ F0 P5 b7 T8 K( B% |& H9 v/ U
来个补好后的固件图
3 N% l9 I0 J* ]3 ~9 v) y. Q- P, x# m: n3 ]
) `. g: \, i0 @' _
2 @, a2 |6 a) k7 |9 h" O6 q- ~

8 E9 z! `1 \  v8 H! J- _% R% d( g# F1 P5 M- I# l$ m, z2 g6 x) r

# ^. Y7 r6 i) X% d( y& ~3 C未完待续4 g1 A: S- @& g# b

3 ]3 s2 m8 @9 A2 C3 A* N5 x0 G
, S2 H+ e& E( G, W# d4 n
9 H: s5 [7 O0 t' }2 C5 J8 L* v
0 v5 e6 F  y4 W" J) l+ _: K) S  t- U" i' Z: H4 b' B

# P5 L7 g$ {+ i9 a. q9 |4 n0 W( G4 J. Y- X7 ^

; o/ Q4 ?* a8 C6 h$ D
3 v- R. I, [0 r' y3 [
! R3 X. e$ C/ m' c1 F: V7 {) ?( P4 R1 Z

6 T; ~4 z: G: Q& Z

本帖子中包含更多资源

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

×

点评

你好大神,麻烦问一下华为光猫直接用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 | 显示全部楼层

* e" G& |% F1 g5 ?1 g+ h支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑
' A3 ]; d+ p- r6 p- k# V
7 {8 q8 ~: `8 B5 P这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用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-5-9 17:32 , Processed in 0.028240 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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