找回密码
 注册

QQ登录

只需一步,快速开始

查看: 120459|回复: 159

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑 , e2 n- I# o( X' F+ q6 x6 T' D+ f
: Y* P8 c0 Y( v, R' z
此操作有风险,只供研究所用,由此造成任何损坏请自己担责
# e" O" t9 N# O/ m7 n9 S& }5 S6 W* e5 f) f5 c6 ~( A+ U
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
) B) _/ A  h) C, o" O8 f& i1 P( T7 `# O8 P( a7 ]0 c- w1 T3 I
1,备份各分区:8 }( v) K! O9 ^. s
插入U盘(剩余空间大于1G)# X; l0 `% X' M( \! R* b4 g
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
- {! e! p; z' Y
  c" A% L9 G' p4 S% @3 S备份命令如下:
& d$ n  C8 p( |* h* L7 Z9 V
/ V  n' ^8 z: G1 U, sdd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin8 O6 X, R  H/ g

' ^8 P' L  E1 O9 }( ydd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin2 m, [* P- o* |2 w. |4 \
% f+ @6 i( [5 P6 u
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
  l" X! s- O* `  @6 ~
( `2 b. L1 O& j! T" ]dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
# c. @. X# O' J' H7 A
. U- E/ x- `) Ldd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin+ l, H; M/ m' T& f; n+ n; a- p: R  l

6 G5 p: \5 r7 |+ @dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin8 i& j6 {' M+ s

1 O; Y& O+ B' P1 Qdd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin# c3 x' p" R1 R( N

1 n/ b, F1 ?& K/ x  x3 \% Y) V1 Edd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin* n9 s6 ^+ {' o1 o# ?* e* a# J1 K
: S4 |- [5 K3 j1 s$ g7 ^
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin6 d# M/ q% B2 d: J. F

, }' ?' r' ?+ Gdd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin2 U6 ^# q  C) p+ i. M" Y

! y) e( M8 t8 U  p- Gdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
; M% f- t1 ~; O1 J+ D4 X% F
! Y1 \' J7 R. B+ Idd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin* m! ^' d* H/ o$ p' _2 M; ]

2 {3 }/ P; p  p+ u9 hdd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
* l  i/ D. H4 Q, Q. N& U, |! }
) Y# z, F# ?9 @2 sdd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
+ b* Z: N6 }+ c5 Y5 f0 d  B1 B) D' `% b8 i# W
U盘根目录下这些 bin文件就是各分区的完整备份
( a& S! ]5 `- _. z! k
! i) E9 X+ U, U, bA和B分区是一样的,所以只需备份其中一个即可
  ~6 C5 y; x  Y' q1 v4 {' V$ U各分区的意思如下:( S+ ^2 }7 S6 W. b- h
mtd0: ="startcode"
6 u+ e; v. l% O# x( f8 \+ W$ Imtd1: ="ubifs"& _8 l8 ]: }9 h* K% v$ \
mtd2: = "reserved"& D4 J1 }6 R' q, H0 x4 g: H
mtd3: = "ubootA"
+ I2 U) {3 h- Y7 s+ s" Imtd4: = "ubootB"* S. K# J( V1 b" P: w
mtd5: = "flash_configA"% N/ L, |3 s5 t; D
mtd6: = "flash_configB"
3 R/ d. c* D% _9 _$ z  cmtd7: = "slave_paramA"9 Y% L1 b% k9 _8 [
mtd8: = "slave_paramB"
3 \/ ~# ~) x8 @mtd9: = "kernelA"
8 l" A, b: z1 emtd10: = "kernelB"
! H9 _/ H3 g' L+ q; o9 v; t+ |* Imtd11: = "rootfsA"- e& ?" e6 j7 p" G
mtd12: = "rootfsB"
/ E$ _3 B* b2 R. t+ M$ v6 T9 n* F7 ^mtd13: = "wifi_paramA"
9 }( z  y. e" b6 g$ o" |mtd14: = "wifi_paramB"  G0 ^4 o8 K5 f3 c8 G
mtd15: = "system_param"
) l8 {+ S, |/ |% W% u4 vmtd16: = "file_system"6 q+ _6 h. ?3 d8 v; h& K
mtd17: = "frameworkA"  E( l! P1 {* m! z/ O% e
mtd18: = "frameworkB"' q  {2 S: a0 Q1 K* B+ n0 ^
mtd19: = "apps"1 d! |- n' I) S3 Z' i8 o6 l
ubi0_13 = "jffs2"8 e) N3 f4 x8 M5 Z
1 z& D7 S, M% i  j3 ^
8 P' @4 @* h6 _
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例2 g, \( i, j* P  p; c% J: |

( j+ @2 H( a: g0 j8 r9 B其它光猫可以使用命令cat /proc/mtd: g3 d2 j/ }6 B1 v. W7 W3 E
查看详细分区结构,8145V结果如下:( a4 B& q4 Y8 x% W* c

2 A; K! v# A2 j, ]' l& Z. l
4 T7 m1 X/ n/ ~  f4 K
dev:    size   erasesize  name% g+ [0 Y2 t0 m! L6 m/ |/ b
mtd0: 00100000 00020000 "startcode", ^- q' Q3 T( c* ^9 p  X1 t
mtd1: 0ff00000 00020000 "ubifs"  D  Z- i* w1 Q1 [( K$ s7 n
mtd2: 00000000 00000000 "reserved"9 t7 `, |2 k$ G: o4 W& z3 A4 \. W
mtd3: 0009b000 0001f000 "ubootA"
  ?/ D# `0 ?1 O6 kmtd4: 0009b000 0001f000 "ubootB"
6 r  x8 Q8 d$ R3 I) F8 _: \mtd5: 0003e000 0001f000 "flash_configA"
: c! B- U) x  z5 \8 W: @7 zmtd6: 0003e000 0001f000 "flash_configB"! X2 X: m0 w( B2 K: l
mtd7: 0003e000 0001f000 "slave_paramA"
% _3 U, I$ d( }4 o6 I8 ^mtd8: 0003e000 0001f000 "slave_paramB"* P3 h* Y5 c- r3 u% R
mtd9: 00307000 0001f000 "kernelA". S" j( l1 X3 ?) j
mtd10: 00307000 0001f000 "kernelB"9 z: l7 _; c4 a9 c4 m- F
mtd11: 02815000 0001f000 "rootfsA"
. j8 b4 [# X8 I) i* s! ^3 Amtd12: 02815000 0001f000 "rootfsB", t! T4 `7 T" a/ v" ~
mtd13: 0003e000 0001f000 "wifi_paramA"% u& l* |! X9 H( p- l
mtd14: 0003e000 0001f000 "wifi_paramB"
. t- s; r! O6 e$ v6 Lmtd15: 0003e000 0001f000 "system_param"
, V5 K& B/ I- ~7 |& Gmtd16: 0141a000 0001f000 "file_system"
* r& ~! r7 B% U8 @- r1 I/ I& Emtd17: 0081d000 0001f000 "frameworkA"9 J5 ?: A  |3 W) X! y2 x& l4 ]
mtd18: 0081d000 0001f000 "frameworkB"+ W1 O& g! k+ z  s5 G: i  Z. P
mtd19: 07003000 0001f000 "apps"
( ^4 a. k- K; W8 j; z0 i5 t# E/ Z. |
+ ~, o) M+ W5 H
6 m* W' k5 W1 S4 j1 M! p1 O0 Q
然后根据这个详细结果来修改备份和还原分区命令; }9 t7 k3 W4 ~6 g' S' o2 c: ?

6 @! T3 M! k; {, L' U5 j! m# X  m7 h( m
) {& O7 i5 Y$ @: G: g5 V
- a& X- E# `) `: d0 d8 l: D! l: [' `/ ?2 K) d$ L) r8 f8 v" x  ]
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
# O  g0 ~& A: c, E4 m将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开* c, T; v' S9 v6 C3 i- A6 B
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
9 l9 g2 n( J; |! m& p
- W  U0 j. N6 w  r+ E0 [2 j" G4 k* [0 n9 |下面用rootfs作为示例
* t% \4 E1 A* F# _' k( U5 m" L! c  R7 P0 e# |: E! D. T
: U) }" `1 q1 v9 e" j9 v0 @
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
1 Q/ ?  P, {- \' }9 F, @
, x  S  H! m7 b* }. t8 D5 G( t3 d& n" W2 d- e
点  确定  开始查找,会看到一堆杂乱的乱码如下图:
! C3 C/ b, ^4 j! V3 `; Z( y# Z
! W8 F9 L6 E  t9 f  F$ t找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
, h2 u  B! y" K/ I2 B/ B6 |, {' o; J; f$ Q! E+ o
删除后如下图% n, l) j, y  U2 u
& c: G# [+ c3 o

: U3 |- ~4 x( U9 C' U3 F% _然后保存,就是一个完整无多余的分区bin文件
% m2 M& U' y: ^; E然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
! }+ i  [; e: F! T/ Z
) I0 O  O, e2 r2 d% Z3,还原到光猫分区中(此操作风险很大,请自行承担)5 a0 z3 Q8 g' z+ u- t- i0 d$ C* p! x
将修改处理好的bin文件复制到U盘上,插入光猫USB口1 L  W( v: L; o9 N3 H# a0 ~
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
# o* r3 H1 v- {dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
1 ]0 W: Z# X/ _! G6 z' A, O# z8 ]% s3 J( Z2 c* t& u( g' |
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9# t6 P5 c1 F, ~! k6 @9 ?
4 C+ i" G/ k. U; w6 S! I. B
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
+ r4 M* n# ]6 [: `3 I% l* g) l5 ]2 y9 t6 R; I4 H& B

0 p( c: g( ?) }( A  J$ S1 c说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
# z( t1 d! \& R7 Z2 k: r) i% e& ~% Y' b) f0 x
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,% @- u! G$ a+ g7 G, P; Z" ?
# z8 ~6 ~* g' e4 _: D
此操作在某种承度上可以代替刷机,也可以看作是手动刷机. E! n' R+ K% b2 e" c- h$ s
% A, J" U+ ^5 {# C( ^
二,合成线刷固件(使用组播工具或WEB页面刷机), m; {; L  x! T  `0 W. {$ c) X

" z. H( s4 K" B/ J& F1 Q1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.  g4 ?/ S6 h- r6 h
这里使用一个论坛上别人所发的补全shell的固件作为示例& H2 N% U$ N! L7 D. v
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin' ~4 @+ }# o. `# K( i
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
- J* D- q" t; A% `& Z; T+ f/ p
3 m1 U! P1 t3 W: l; a( J; X
5 P4 _: R3 M9 @# Mb,点添加项目,选择修改好的9-kernel.bin
/ i1 J' C  U) {, ?项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh1 U- Q$ `. U& @' O- h
如下图' _. z/ _7 @* F( j" o0 H
1 x' J! k% l. V5 C4 H% F  u5 x
5 ?( _( p8 S2 X8 X7 i
c,点添加项目,选择修改好的11-rootfs.bin- y! N5 E* X6 F9 }8 c# Q8 _
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图9 |9 e, n; B+ s4 `& r% f3 k3 I

3 s6 `' ?( L+ \7 z: E0 h1 b3 B8 e3 u/ u1 B; |

! ^4 l7 J5 B, y& |; w5 X. ~$ Q3 g最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
0 u% [# P) s6 @5 X) G来个补好后的固件图8 n/ E- m; o9 e( B

  i3 g- x4 N& G( t" X5 Q3 ]4 A# q4 |. j& u: U0 v

- ^# A; ?0 J( e' [: b4 J) ^
* l8 U0 R3 c- ]* T# p3 S! A
1 }/ s! C1 B, E: @. _- L8 w( L4 W6 e+ S* X% V7 C6 j- J/ L
未完待续" U7 I! `4 i, h/ T5 \2 S
3 j6 R" c. N, {6 s' g

: J  Q. I+ t9 d' S, O
" C; u* ^; v( ^' ?* L, T% u+ O& l5 @" y, J9 c$ s9 a0 E3 T2 f

! x% g6 Q0 G; Z
0 G& m. j0 c' ]6 P/ m5 g# ^9 b% D  L+ @$ B9 z0 W- T' N

2 n( b3 h0 K; E7 C! [; |: M0 U9 {  B* }" F

1 |. i7 L, o6 L
& C0 e0 L! X/ H) j
% ?9 O; V" i" b0 t

本帖子中包含更多资源

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

×
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
 楼主| 发表于 2018-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:08
. B% a& o; O" D! a! o谢谢指点,我添加项目后发现高级数据编辑无法编辑了。1 X5 n* G5 Q+ g; |3 m  k
HS8145V我尝试过使用115和118的备份,我发现115的 ...

8 g2 A' c2 g2 k/ [; K) {118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,4 q% b- a& t8 b, v3 c
115的解包squashfs很简单在linux下& ]+ m) Y) p1 z# r- D, W
unsquashfs -dest aaaa rootfs.bin
0 [! C: p- a, \" T3 `0 ?9 Z就可以解包
; x9 t/ A2 T2 @3 X5 B! [1 h8 M9 [3 I$ n  ]
封包命令' N6 j+ W) C) y4 W/ s! Y( `
mksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4
$ E& I$ \) X: Q  K
+ w  F( W! s' K
& P# f$ V: p/ n7 n7 N9 G& s118的就比较特殊,他是由二部分squashfs组成,需要用winhex分开,然后分别解包,再组合,很简单,但也可以用Firmware Mod Kit自动解包和封包,但这个工具需要稍作修改,
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改
发表于 2024-6-25 10:13:39 | 显示全部楼层
这个描述的详细,收藏下
发表于 2024-5-16 15:56:01 | 显示全部楼层
谢谢,看是简单,这些命令头大
发表于 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 | 显示全部楼层
感谢,学到很多实用东西。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-4 11:19 , Processed in 0.032465 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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