找回密码
 注册

QQ登录

只需一步,快速开始

查看: 84950|回复: 154

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑
* q3 Q( n' G7 m' t) \# y1 c$ A. b" E  l4 t9 o/ z
此操作有风险,只供研究所用,由此造成任何损坏请自己担责* @/ N5 d  w6 X: _/ d& [: K2 o7 r
3 a+ q' S! W' m3 V
一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,); a$ J; n8 z9 s

! [2 w) N8 E) A- e% e5 Q7 R8 Q8 j1,备份各分区:
- {" \2 r$ {& B4 {插入U盘(剩余空间大于1G)
' |- v6 H0 Q% v+ E一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)4 G1 ?' n; F9 i
1 e% ]+ m  Z9 i
备份命令如下:( J  ?7 O! L% t1 B& V( @
# f) X3 v- @) x2 ]
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
- K# P' j" K, G+ P) M
! q, a2 D' A- T; W2 a0 Z$ q) @dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
" b$ C6 ]# d- S8 [; c/ J0 T- R) l. r
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin6 S9 A, a* }: O* a

- y- Z4 t; p, X- Y3 C, y- D) edd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
: S5 @0 e: A7 b
0 b* B& s, l* h3 P9 idd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin) M5 B4 M( ^+ l: k% A

8 ^- E8 D" S, N5 t3 {* d: C0 o5 Ddd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin: H9 E  u( B/ ^7 q0 S$ \: D* C
0 m8 K" S5 a) y/ N2 @6 F3 f
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin( W+ O9 C7 k( u& l7 |: j

0 `. [9 p& I' {& s' f) ?3 w) Gdd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
- W1 A8 [1 `6 R/ F$ |
8 h5 s+ s3 c5 [/ }' N# Z$ b; y9 xdd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
! g% ^% Z6 o6 B: L# a
$ B, n* P, U/ R& W( {" wdd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin, e6 R, G- f3 D0 \
) e( S: i8 b6 s' M# |; n( z5 h
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin- B; C( _& ]! [  ~! z! o8 G
9 }5 V8 ?' a7 }' L- ^
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
0 d7 S' l; Z  q7 Z, S1 B6 m# c8 j1 ?$ @8 Q8 j
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin, I9 }$ H! s& j; k4 C( J6 \) w/ {; F) h
! Q8 I% q, S" _4 @
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
# X1 \3 u6 W1 e. O1 x* s  o4 q! q% l0 M
U盘根目录下这些 bin文件就是各分区的完整备份& q1 c9 y$ e" Q2 D7 [# V- ^
4 {; G0 x0 T( [" s( _0 I1 `3 m
A和B分区是一样的,所以只需备份其中一个即可' T0 L& F' z" D8 A
各分区的意思如下:/ ?, p  T8 X; Z: E: v" g+ {( F. u
mtd0: ="startcode"
4 _  a  u) \1 Y$ [. Kmtd1: ="ubifs"
1 a3 X( D! L# h3 Y% w  qmtd2: = "reserved"
7 z# w8 b- {2 m, D1 i, ~mtd3: = "ubootA"/ N) q# |$ |) W' G& T, g" w; R
mtd4: = "ubootB"
, x& I& r4 o6 J3 v4 Fmtd5: = "flash_configA"; m% d" L& h. f& \
mtd6: = "flash_configB"/ T3 M, n; c! F6 R
mtd7: = "slave_paramA"0 u5 a4 @8 e1 S
mtd8: = "slave_paramB"
) P; k2 H7 X/ @) Y8 Fmtd9: = "kernelA"* `* y" k0 E) `6 d
mtd10: = "kernelB"1 @, A" R5 S( C9 J
mtd11: = "rootfsA"/ o2 b7 V. f4 Y2 Y* A8 |  l
mtd12: = "rootfsB"5 L, ?8 H9 U1 {( O- w- x$ S
mtd13: = "wifi_paramA"
) q0 g$ E4 w4 n# g8 I7 U. L3 X1 Z7 w# smtd14: = "wifi_paramB"
: n0 r, P) e; C' Q- pmtd15: = "system_param"
' h2 X) c9 O, K+ N* i0 Qmtd16: = "file_system"
; m. l" Z  L8 H/ I' emtd17: = "frameworkA"
. f4 Q7 R9 w. Imtd18: = "frameworkB"8 J1 L1 }7 s: q% p# K
mtd19: = "apps"
8 o* ^, C2 Q8 Z7 O8 U) n3 wubi0_13 = "jffs2"1 l# T# c0 L  E* n' N, O
0 u, B# O+ n, w: A% G' _
# `+ ?3 W& {6 N: ]1 m4 w0 R
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
) p6 w& [$ R! f1 p% T, G. q, S. u
其它光猫可以使用命令cat /proc/mtd% _& ?; p8 K. x9 p/ T
查看详细分区结构,8145V结果如下:
; N7 y5 y6 o7 `  Q
, ]$ |; i8 t( a5 ?) r6 I
" C2 l. n  r" j1 U# F9 E* J
dev:    size   erasesize  name  K+ I3 O  t; p* z
mtd0: 00100000 00020000 "startcode"
/ y. T+ P# Z; V5 I  g& q5 p9 ~mtd1: 0ff00000 00020000 "ubifs"4 _( R& l  w( D& Y4 V
mtd2: 00000000 00000000 "reserved"+ d( s' U' ]1 |2 u+ L" i% G
mtd3: 0009b000 0001f000 "ubootA"
% x' M# {1 Z; |; {3 C) Mmtd4: 0009b000 0001f000 "ubootB"
& `4 k, k! H+ _& ymtd5: 0003e000 0001f000 "flash_configA"/ L2 k( `8 _5 |7 m8 b% v
mtd6: 0003e000 0001f000 "flash_configB"6 s. m$ s7 [! B8 C; q6 @5 \
mtd7: 0003e000 0001f000 "slave_paramA"
9 j1 S8 i" b# I! ]  Zmtd8: 0003e000 0001f000 "slave_paramB"
5 f* f0 W- R# ^# j8 zmtd9: 00307000 0001f000 "kernelA"
8 i1 a6 s5 x5 p7 f; m; g( Y9 Omtd10: 00307000 0001f000 "kernelB"4 a4 p, `5 m0 @# R) S6 }
mtd11: 02815000 0001f000 "rootfsA"
0 y( l; C* }4 T# Q+ r( Tmtd12: 02815000 0001f000 "rootfsB"
. `) k6 Z$ t5 k1 |  i, H5 Kmtd13: 0003e000 0001f000 "wifi_paramA"2 \, \1 \& S' m; ]: n# A: y2 r
mtd14: 0003e000 0001f000 "wifi_paramB"" M5 ~( f+ B7 t
mtd15: 0003e000 0001f000 "system_param"
- [3 _* G7 n+ D% ?/ Y- |1 omtd16: 0141a000 0001f000 "file_system"
# e3 R8 D5 u; z/ u. Y# M$ p0 imtd17: 0081d000 0001f000 "frameworkA"- @6 D  p! U! n# n2 D
mtd18: 0081d000 0001f000 "frameworkB"
- s5 F6 J' s( t) m, D6 X6 Qmtd19: 07003000 0001f000 "apps"' Z* ^% `7 B, W7 Z- x0 b$ O; |# z& b  K

& X+ m: y% `( G" `+ q- ^( Z0 O
3 D* N* F8 J8 \1 Q' Z# `; U# T) A
然后根据这个详细结果来修改备份和还原分区命令0 t/ ?0 p6 X9 f2 Z7 W  g

# _) P% D) q( Z1 {8 h# `3 F5 p% L$ W8 L% @8 V5 g' d. f
& E7 S. b- \$ v, ~4 q* k
8 y: I2 G7 ^. ^
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)- L5 z$ P$ F; K( {; W
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
) A5 A0 U! g: R5 ]/ t- Y直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
) c" N0 Z) |$ g: w1 I  C4 Q- n1 {9 |+ j0 s0 _$ z& D# T# I# j' b' I" Z
下面用rootfs作为示例1 ~3 q8 i8 \9 c
/ q& T  @+ O* H! Y1 k
2 q0 |* E2 P+ I" @$ ~
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
7 n! @( D0 F& |
' d" [" `( U6 c, z3 h8 K% T% _4 T/ b
点  确定  开始查找,会看到一堆杂乱的乱码如下图:
, ]' y* N6 @- u1 [  T" K
4 z5 `' e' S/ K8 B找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除2 }1 `6 ?: @4 q

; S) R" O. f2 B! Q& ?* z6 I删除后如下图
1 `  M. u& V2 G9 f8 F
7 c+ V3 c7 k( G+ g& Y2 |! k  W0 z8 R7 a# k& y
然后保存,就是一个完整无多余的分区bin文件/ E$ E0 m5 V( t6 m3 e( d  L
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值1 [/ d) v5 R1 K4 ~9 o% Z5 N& s
' R, N# w" Q+ n8 i: f1 G
3,还原到光猫分区中(此操作风险很大,请自行承担)
6 h  @& y! q- j+ j( p0 y) O将修改处理好的bin文件复制到U盘上,插入光猫USB口5 [7 G8 d7 C: l
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)% S: U0 X6 c/ C9 J
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock39 T% d8 ~( J5 G  I$ i9 b% t7 x: \7 }

8 P5 q8 A( z# u1 k' Edd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
3 v* X5 f- P  {% b% z! a2 I
0 |1 |; C$ y2 A5 Jdd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
+ C( J7 `0 V' D, S
7 P. y" x& j' k2 e2 d# P
9 ?& o% O/ Q0 `: K说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动
, D) ^9 D# ^3 j6 z4 b' c& K) Y* [6 K. B  H1 M6 y1 v
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,& Q' m# s  E# Y4 |
& {- d& F. @- n
此操作在某种承度上可以代替刷机,也可以看作是手动刷机
$ [/ Q- K5 t1 A+ Z0 i, |3 s% K: j; [' W
二,合成线刷固件(使用组播工具或WEB页面刷机)
8 L/ W" u. E3 ^2 ^0 f- K4 \+ H3 `4 \8 c2 v( Y# N
1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.# q7 r- g3 e4 F! x
这里使用一个论坛上别人所发的补全shell的固件作为示例
- M) M' M0 [$ Z9 _a,然后点添加项目,然后选择前文所修改好的3-uboot.bin' p. z/ e& B; y: z5 n7 v: k
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存) l/ }9 _+ @/ ]* {2 u& x* q/ X
( I, Y5 Q8 B, z9 m
9 k8 U" f4 S  x; |& u
b,点添加项目,选择修改好的9-kernel.bin# }/ n# Z! v7 i; X# k- \/ [, D4 Z
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh
- S5 e; G" [% w) n% s/ ?3 N! D如下图
9 B0 Z; p) n- R
& d  u! h9 J2 k9 E  V) e! D( a
, B! M" E' P! W( T% [8 p- Pc,点添加项目,选择修改好的11-rootfs.bin
7 C( E$ y% @; N5 w2 A) D( k6 w, y' t6 }9 d项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
0 ^/ L- ]% g. H1 {7 v1 y4 F$ ?
  J, P2 P% w! S" J0 b# {" @4 ~+ ?3 I% |
; \. z. c8 K# F& K, [: X( r* n
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机* f  F/ F# A1 `1 F1 I5 f
来个补好后的固件图0 j* c! a' `8 {' Y6 ~' G" L: |2 z$ i% l
9 J3 Z. {" C  f" e6 z6 H3 ^

  I( Z$ P7 P2 S& S5 L/ j& n% E+ \6 R% e

* v0 k8 Q8 Y2 k  x) Y) W$ H# R7 E$ k, f( Y9 d* o; Y* v- e

* h- a/ u/ M# `- l未完待续# ^3 R) ^( {0 h8 I1 a# U% j
: T* A! t6 |5 O" N3 f! E

* j7 |1 J( _& ?; Q: M3 \2 Y
# P. _! {, S1 }1 A6 u! G6 o5 I' {3 K  G- d

8 {# \  ?. G* y3 ?' C
# a' t+ v7 t' [: n. ?" w7 @. P
5 ?( t5 `2 g" }+ h( ^" ?$ S
) n% |" V1 B4 I& H7 _8 v! M, Y. x7 O: |2 E( d
2 t3 W7 p5 J7 y7 u
  |6 G+ i9 `( v# N8 |/ I
) R& {% c, H1 `$ B

本帖子中包含更多资源

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

×

点评

你好大神,麻烦问一下华为光猫直接用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-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:087 n. j' L; R. O( f* O8 _% r6 @* x. E
谢谢指点,我添加项目后发现高级数据编辑无法编辑了。- ^# A, T8 ^; L0 b7 ^& U! z
HS8145V我尝试过使用115和118的备份,我发现115的 ...

$ [% A7 q- m/ q6 Z0 `2 K  X118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,9 K2 t: B/ a/ L  F$ H
115的解包squashfs很简单在linux下
7 @" v# u  \, I0 K% M7 Vunsquashfs -dest aaaa rootfs.bin- p' Y% ^4 q% H# B: [6 w
就可以解包
. w: ~$ c* }( T( l' |5 Q' _% q  w- a. |+ i+ Q5 H7 i# R% q5 Z
封包命令+ I3 r% f% o. l, k3 `
mksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4
, C( X4 s: }* O& H" R% y0 z7 L+ B1 ^# n% F2 ]

1 ~! e/ p3 ^* _' w118的就比较特殊,他是由二部分squashfs组成,需要用winhex分开,然后分别解包,再组合,很简单,但也可以用Firmware Mod Kit自动解包和封包,但这个工具需要稍作修改,

点评

请问 unsquashfs -dest aaaa xxxx.bin 提示Can't find a SQUASHFS superblock 怎么解决啊  详情 回复 发表于 2020-9-5 06:00
多谢,修改是指要修改源码针对bin的结构修改吗?  详情 回复 发表于 2018-9-27 21:32
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

粤公网安备 44152102000001号

GMT+8, 2024-3-28 20:23 , Processed in 0.026878 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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