找回密码
 注册

QQ登录

只需一步,快速开始

查看: 123749|回复: 159

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑
( Q6 z8 E+ N2 `  V; V) b% Q0 n6 |5 L& E; X  F$ N7 H7 U
此操作有风险,只供研究所用,由此造成任何损坏请自己担责* \/ |& |5 {1 {' k: |4 P, q8 ?

2 c  f9 p6 y* D2 P; H, ]: Z一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
. R4 o' n: |4 O" L3 G( t
7 W) X" h4 r* h' Z4 h1,备份各分区:  L& I; t. H! ^" a  K( s7 A! a" \
插入U盘(剩余空间大于1G)& M+ Q- D7 x3 e3 [' o
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)- e  Y# s. W! o4 y( r9 A8 r

- a& d7 |1 ]7 C3 @3 a备份命令如下:' n8 m" B; B' D' H! |
. }4 l/ Z* u- U$ S- w
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin' R2 U& ~+ G. z

0 F, i  p; ~$ ]6 Udd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
. u4 _. m3 ?. q, N
. H, y# p7 t+ T9 G6 b5 F8 l/ Hdd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
# D& `/ K* n' a. j
2 V7 }; }9 D0 j  E1 T1 vdd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
$ o- r$ F) ]  z. X7 Z
% t6 S4 k! l3 _3 Ddd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin6 K, ]: o) s. ^% r' r( W4 }! j3 x
! }: D# v, I  D* Q
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin' L+ y: E! L' f  K
: B# g* M- r( p8 E  l$ w% x! I
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
! {" p' o9 L1 r, D
: ]" q8 M  z2 o" \& p" Ddd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin6 x0 e' |; n& J

* `; r4 c6 t* ^# [0 Q6 ]dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin5 ?, u% B8 g& I( f

% P* L! |7 }$ }dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin5 ]5 d8 W, u$ I& z0 b

; J8 g) M. x5 z( }# Mdd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin# Z  y" G( H' @+ Z' |0 T

$ p5 I. q$ P: T) y4 B3 c& cdd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
! z4 U* M+ K- Q
) F  q' q. g" Pdd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin; ?) C. w9 k! ^/ p1 [8 _" I% D

( `+ V* {$ Z5 d0 \3 d9 ~3 u+ H# R4 y/ wdd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
# m/ m# c: _, W" u* |8 y1 y6 m
# @0 H2 j. Z9 `$ c0 o8 K" E2 ?, w; uU盘根目录下这些 bin文件就是各分区的完整备份
+ k6 J" m0 p1 m% g3 z
" q9 D2 w0 _; T( w! `! i4 [2 |9 Q+ `A和B分区是一样的,所以只需备份其中一个即可8 C2 D' s; i+ Z9 Z; N3 u$ D  a
各分区的意思如下:/ w" R4 n; L( [' P: D- l4 p
mtd0: ="startcode"% Y4 O" N7 D& ?% P! |# Y' r
mtd1: ="ubifs"
3 {- f; C. E* J( z- T9 p$ |- R4 emtd2: = "reserved"
9 o# ~0 N; Q& tmtd3: = "ubootA", d+ {1 o, ^$ j7 K
mtd4: = "ubootB"! f& n: w6 A2 E3 Z$ ^0 ^; g
mtd5: = "flash_configA"
6 e4 b9 \7 m1 X$ E8 |# h/ Emtd6: = "flash_configB"
/ X2 v4 f: |+ G, ~# Q5 b+ ymtd7: = "slave_paramA"7 ^/ N, f/ K: u
mtd8: = "slave_paramB"; z( s( X& a$ Q1 O# p' I
mtd9: = "kernelA"
. H$ |6 J4 I; o3 Y9 z: |9 omtd10: = "kernelB"
( [) G0 i& U* r7 M  k0 t0 amtd11: = "rootfsA"# M: U/ }/ e3 ~( f6 V, c# |8 W
mtd12: = "rootfsB"
! b! m5 Q+ @8 d2 e2 x/ xmtd13: = "wifi_paramA"5 e* w+ w" P! X: {+ W
mtd14: = "wifi_paramB") t, M0 b# ^; r- t
mtd15: = "system_param"7 M  Q( u8 Y5 Z" ?! N
mtd16: = "file_system"5 k! w: P" y: E' Y2 u" B1 h, o
mtd17: = "frameworkA"9 k. h9 \- l4 S1 E* C# W) |& ~
mtd18: = "frameworkB": D. L& N) z- Q6 D. }; b
mtd19: = "apps"' T; R5 i  R  r* ?- j6 \9 C
ubi0_13 = "jffs2"
  `: V" `, N* u% k  f/ b. I2 o- V$ v  @0 t. f
# ]5 T! ^" t& e1 U4 t- [
其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
8 ]! Y! L& Z4 e+ g
5 U7 S. H( Q; U  @其它光猫可以使用命令cat /proc/mtd
' M0 W. A6 w& X  l6 I查看详细分区结构,8145V结果如下:& b: q4 ]3 @3 N: I) x
8 m# w! Z$ e+ t- V* H
/ L& d' j$ O% i
dev:    size   erasesize  name  n' I/ ]# h1 ^4 g% ]
mtd0: 00100000 00020000 "startcode"
" o) g0 j  a) Y- A$ \# }mtd1: 0ff00000 00020000 "ubifs"3 F1 ^7 E0 G4 Q
mtd2: 00000000 00000000 "reserved"
/ A$ ^8 p) u% m9 s9 amtd3: 0009b000 0001f000 "ubootA"7 H; F( I% h" X3 }4 |( R
mtd4: 0009b000 0001f000 "ubootB"3 \* ?4 L! [! o3 {' E- F2 H3 ]: N
mtd5: 0003e000 0001f000 "flash_configA"5 \) n8 ]2 y& ~( ?
mtd6: 0003e000 0001f000 "flash_configB"- f- \1 \( Q" N! F4 c* _: ?' Z
mtd7: 0003e000 0001f000 "slave_paramA"3 m" A, c8 v2 X" ]- o% Z, D
mtd8: 0003e000 0001f000 "slave_paramB"% y! W' r3 E( R( d6 j2 {$ M
mtd9: 00307000 0001f000 "kernelA", r; ?* V  t; E' I( r$ X) P( {
mtd10: 00307000 0001f000 "kernelB", t+ l' H, T# G# }3 \) [: L
mtd11: 02815000 0001f000 "rootfsA"/ y- ?; o* X) F* s: p" r$ @  {  @
mtd12: 02815000 0001f000 "rootfsB"$ V9 Y: N. G: r( T7 o, V
mtd13: 0003e000 0001f000 "wifi_paramA"% y$ y5 J% _" F5 F/ |3 G& X* n
mtd14: 0003e000 0001f000 "wifi_paramB"  W8 {2 ?4 Q+ ^/ V# c2 [- J
mtd15: 0003e000 0001f000 "system_param"% x0 q0 _% {2 D( M* Y" U# q% l) B- g- C
mtd16: 0141a000 0001f000 "file_system"0 ^9 V( W7 g& Q7 W3 M
mtd17: 0081d000 0001f000 "frameworkA"
+ \! W& s8 {& pmtd18: 0081d000 0001f000 "frameworkB"$ V: ]* S; Y3 M
mtd19: 07003000 0001f000 "apps"2 Z4 a" V. y3 w6 E& o9 p8 K3 }
0 C0 F/ R1 y! u' }+ h/ e
5 h  d# V( S; [. `
然后根据这个详细结果来修改备份和还原分区命令
' e, M$ r+ Q$ C% V) @1 |- r9 G2 V( n0 i1 r
, b& M) Q9 c! }
' |- b( h* P7 R. Z5 m8 B& Z
& e, u: U5 o' E3 r
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间). g0 L* A7 w- ?  H- ^% k2 ^
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
( O7 r- z3 y, O4 T; `. D* }% D7 X直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值( U7 ~, B5 p8 [6 N% Y: J: j

0 }2 T* K0 B  G& X下面用rootfs作为示例) T) G: G& {& I6 B5 [

( |, {+ ~, y0 \, n5 P
' q! T& t& m# R! G* v4 D  N" Q$ F" \将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图& N  [5 b% i; \( z6 d, d

3 f. d/ Z5 z* ?6 \0 b8 d( }3 d9 x) l' q: R+ p& n' s
点  确定  开始查找,会看到一堆杂乱的乱码如下图:
4 v6 \  n9 L: X6 q. D) w0 Q( ]  K% d/ B% V: @: X
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
- j8 [' X8 F2 ~% I
( `. M8 }: X& B% c删除后如下图
: w7 ~* }* l1 T& T6 {1 k1 k5 b% e  K4 Q9 b
' X5 i/ w0 G& r7 _( _
然后保存,就是一个完整无多余的分区bin文件
6 R' x- q. a+ P2 q: N* ~( }1 P' P- K然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值* M; ^6 @* p) z3 b6 @
" y2 k% m/ ?9 f4 ~7 \: z5 o: q
3,还原到光猫分区中(此操作风险很大,请自行承担)
, u+ B0 y* `( R  O- E0 H/ z4 {将修改处理好的bin文件复制到U盘上,插入光猫USB口, I2 X9 F2 W% n; S) p
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
$ f& ^3 M! H; w& z- r. t) }: udd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3/ j6 x2 X% R7 W
# }* D) x. r) M6 p. L8 L. W
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
9 m! |) j2 \3 ]& J! S, v4 x6 M5 F; W, C# @4 Z0 n7 X/ O3 O
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11- K/ m4 _# s# ?3 r& i

. b! A, m( P3 b  e9 G" G
' ~: t. [5 T  M# z! G- M$ K1 @说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动. \2 G8 w# D% Z' \2 |
: G4 {" d8 O/ b" ?) N
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
* X  R. f/ C6 K$ f+ R( V, b
! S: _3 n8 e- Y- e/ O此操作在某种承度上可以代替刷机,也可以看作是手动刷机
6 o! ~/ c6 B  c; U6 T
; d0 i2 Z& |' x二,合成线刷固件(使用组播工具或WEB页面刷机)
  w* S, \% X! N& U4 t2 V! ^. v: ~/ u9 w& N& s+ }
1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
, Z9 E8 H( h2 a' o' @& `2 U这里使用一个论坛上别人所发的补全shell的固件作为示例- C8 J4 {; ?( L
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin# J) L* @* X7 L% [* i. v" c$ K/ ~  \
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
, ^" v4 U* X. ]  x2 @. {. x9 B& {9 K. w# d
- A) k) ?% j0 o0 j* @7 h
b,点添加项目,选择修改好的9-kernel.bin. @% ]" B: ]' N! i1 q6 m
项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh
- X# z; }% ]" Y+ z+ r& c6 c如下图: h1 H9 K6 R& [7 W/ i
; B1 y, o: W! C5 j  M0 I7 G' y1 n) `
7 w0 a$ j( o- [5 Q, Q$ [& d
c,点添加项目,选择修改好的11-rootfs.bin
$ B; A2 b. b$ G4 q& j项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图
! ]; E' i" `; }2 \- Q& h' ?
1 Y3 G; \7 b( E7 h/ ^! P8 U; J' a
, S, c, A* J1 X, b& Z$ T( t+ p
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
) U0 d9 I& J  `6 M! r* a' G来个补好后的固件图) ~5 h  }; h+ ^+ U" T
" v" k5 Y/ Z: R) [" p- C

1 r' }& ]8 S( |7 G3 m! R7 y, d4 M- A8 R" _" [( |  O
6 O" [5 K" b( g* P
& {4 }4 y" V0 g. f- x

; F. E& I3 \- z! n% X3 W' Y未完待续! ~5 b! e! E9 |' b

0 o9 D0 M0 D/ u( u# s3 }0 ^1 ?7 `. T8 D

' e0 z  Y! g0 j
1 e1 x$ p  g0 L+ n! u, t# c2 ]9 s. M5 W& x3 {) C% c% ?
# w4 n! x3 n9 O# L1 _9 r: ]

# M5 P0 m6 B) o, D* L3 }7 w* ~, k  X; K
' @  m7 m. ^% G7 K8 }

" y/ X& H1 W" C' o7 |" Q6 L
$ e& p* F& x7 o8 I8 ~- e% J, L1 M. N! ?4 {2 M" q

本帖子中包含更多资源

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

×
发表于 2018-10-7 01:37:16 | 显示全部楼层
感谢,学到很多实用东西。
 楼主| 发表于 2018-9-25 18:25:14 | 显示全部楼层
anysoft 发表于 2018-9-25 17:08# m9 ]' M3 B( f4 z. i
谢谢指点,我添加项目后发现高级数据编辑无法编辑了。
! u2 x$ M  w: I# B& |( R3 K* o7 J' pHS8145V我尝试过使用115和118的备份,我发现115的 ...

1 P/ ~) w1 {$ V' S; m118的rootfs比较特殊,他是由二个squashfs组成,所以中间有FF,中间的FF不可删除,
2 v" Z1 y. E7 x; ^115的解包squashfs很简单在linux下; H6 I/ n+ X4 Z& ?2 L! c
unsquashfs -dest aaaa rootfs.bin
7 g  b) b0 E$ w2 u4 n9 R就可以解包
' y3 u9 K. n1 {$ k
& g# a$ t/ r6 c7 P/ @1 R0 _2 V封包命令
, s4 y2 l8 i" x) u  H  R7 ^mksquashfs aaaa new-rootfs.bin -nopad -noappend -root-owned -comp lzma -processors 4
+ l. t# j5 t* ?. F% I1 }: t. c. u8 q/ ~1 E  }$ g$ x

9 |) E5 y7 t& l2 y% W118的就比较特殊,他是由二部分squashfs组成,需要用winhex分开,然后分别解包,再组合,很简单,但也可以用Firmware Mod Kit自动解包和封包,但这个工具需要稍作修改,
发表于 2018-9-24 13:12:39 | 显示全部楼层
你原版hs8145v的刷机包模板能提供一下吗?有模板再修改
发表于 2018-9-22 19:01:00 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-22 19:57:13 | 显示全部楼层
, y3 s! e7 F+ u+ |' F$ s8 P
支持楼主,学习一下,备份命令可以看懂一点,后面完全看不懂~~~~~~~~~~~~~~
发表于 2018-9-22 20:34:34 | 显示全部楼层
这个可以有,可以试试以前备份出来的了
发表于 2018-9-23 00:57:39 | 显示全部楼层
支持楼主,学习一下
发表于 2018-9-23 08:34:46 | 显示全部楼层
本帖最后由 wyl25866 于 2018-9-23 08:36 编辑 . W2 C4 N* H5 e7 [3 d4 w

4 Y  ?5 D$ @- z- }) o- z$ K$ K这样备份的可以打包成可以在组播工具上的刷机包吗?      既然按分区读取、写入,可不可以用hitool  ???
发表于 2018-9-23 10:38:57 | 显示全部楼层
来了就坐吧
发表于 2018-9-24 06:42:31 | 显示全部楼层
楼主高手啊,打包工具第一次见
发表于 2018-9-24 07:14:42 | 显示全部楼层
没想到我一句话能制造蝴蝶效应,引出了这么多高手。。。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 10:39 , Processed in 0.031938 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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