找回密码
 注册

QQ登录

只需一步,快速开始

查看: 94150|回复: 158

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

    [复制链接]
发表于 2018-9-22 16:48:26 | 显示全部楼层 |阅读模式
本帖最后由 ceocn 于 2018-9-23 11:53 编辑
$ t1 m' n2 w, j5 K" H
$ \4 b# {) Y7 \( [) i此操作有风险,只供研究所用,由此造成任何损坏请自己担责
8 I- ?2 ^" \; L- k  I
+ }/ k7 a+ r1 R一,华为光猫备份和还原分区:(手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)% f; T" I7 i+ Y, I% m! u9 v4 h0 I. ?

/ F" z2 \# S$ Q4 Z& z, A8 s+ j1,备份各分区:7 n! l* H: _, o: X
插入U盘(剩余空间大于1G)1 \( ?' x1 y" T# Y
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)* f8 b. T* Q; H8 E9 D, ?! k

+ y, r5 ~- a) V( N3 a备份命令如下:* L3 E% j; y; Y$ P& o, P
% r5 P2 |+ m7 a8 I
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
$ l. U/ U- w. N3 [# r+ _: P+ e: v" I9 _* l% z& R* d
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin4 U5 t- T8 z# @0 B8 n5 ?. F
- j) ^" A/ W3 X. C
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
% O. U1 q$ D9 Q  D+ o; F3 f3 @0 _' }" e) H5 c0 ?
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin8 g. T3 ^$ v5 U6 O0 L  h. E/ Y

+ d% T+ O4 p4 g2 [1 hdd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
1 k- {) ]2 g! R0 V9 f& \4 F5 t3 S0 V+ k( m; g9 D$ j
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin- F) s8 Q0 t! D% a& F

# T" q' n( @2 {, w& }dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
1 ^; P2 m- D8 k0 o# W& ?9 n# m+ [" K
4 d. _+ G/ y2 G9 ~# f$ X' ]dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin# H* D1 L$ V, x/ Q0 j5 N# j5 ^3 R

# h/ t8 K2 M; K5 b  Ndd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
, |) Q  y! Z5 z4 q; Z: E
% O/ X4 }% U7 p0 Z& `2 }dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin! Y9 w# ~- r/ m6 ~( F6 c

' c, j% D4 A4 e: v; W+ Q: I" ~dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
) N" L! n! @: E3 t) {
! v0 a( t- u8 D$ L* q7 i+ C. odd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin" n$ D1 w; V0 e& F1 f

# _; H4 a1 U) T$ @% f9 U6 D3 Z& y7 Ldd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
0 _) p# W9 u4 z; I2 c$ c) _2 w; z1 W  i& b1 g
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin. O" g; k. z3 N5 o/ i  U
1 E. U# b$ C& Q3 S: s+ O
U盘根目录下这些 bin文件就是各分区的完整备份( i* ~, H9 q. r

3 L' j, a0 v- Q$ ZA和B分区是一样的,所以只需备份其中一个即可
/ ^. @. z& F/ R( g各分区的意思如下:
3 J/ w# C, S6 u' R4 r8 J& n+ C9 Imtd0: ="startcode"  ]0 n5 [! ~0 u5 \5 N) ?0 Q7 O
mtd1: ="ubifs"
) i- z: p% c& f# v0 Cmtd2: = "reserved"
# ^& o* @2 d4 V7 E8 C3 Vmtd3: = "ubootA"& n4 O3 f- Q' F+ A' S5 S
mtd4: = "ubootB"
  j4 h, j: |1 R( b. F* b% xmtd5: = "flash_configA"* ^' A9 Z3 O  q) G! A4 _" O, Z6 g3 i
mtd6: = "flash_configB"
; M0 f, p/ R" hmtd7: = "slave_paramA"3 z. b1 V8 j' @4 b) O
mtd8: = "slave_paramB"
( l* v" |; D5 ?9 }7 M% b- `mtd9: = "kernelA"# h' w1 q! ]# ?$ M! \" o4 p$ S' `9 H
mtd10: = "kernelB"
+ C0 L: b: w% ^) v( Lmtd11: = "rootfsA"0 |( J- V) q5 ?: O; Q
mtd12: = "rootfsB"
% v2 E/ d  y: n& W( Dmtd13: = "wifi_paramA"
) Z+ J7 G& y! S4 Rmtd14: = "wifi_paramB"
5 a% u6 r- b/ Y7 y3 S. z- ~mtd15: = "system_param"
" t  M3 F  e" J3 D6 \mtd16: = "file_system"
: f5 e  E- l. k# k% i( p( D0 Umtd17: = "frameworkA"
3 u$ p- P% M9 W/ ^" I9 C  Q( D" tmtd18: = "frameworkB"0 k! C2 r- @- P* B
mtd19: = "apps"  D  w8 u7 U$ u9 ^# I/ C3 M
ubi0_13 = "jffs2"
4 j) ]  {( H' J: z
3 U5 w1 g$ a) P/ y  P/ B
  Y, ?: Q6 V+ o9 \其中最重要的是uboot    kernel     rootfs  这三个分区,后面也只用这三个文件作为示例
! ]9 z6 X8 i- C
' g/ |3 o7 }; [+ K: H% A6 o( V9 v6 \其它光猫可以使用命令cat /proc/mtd
' X0 J- x& m6 d查看详细分区结构,8145V结果如下:8 x* h; M* w2 c6 }
. O( j3 T& m" K# k/ }# H# ~- B

9 B2 m3 E1 U+ j2 Z% odev:    size   erasesize  name
$ x' ~+ b% [/ D+ Fmtd0: 00100000 00020000 "startcode"8 l# Q: w9 s( ~% G  C4 g4 r  }
mtd1: 0ff00000 00020000 "ubifs"! G9 i6 N" ~/ T9 b5 B
mtd2: 00000000 00000000 "reserved"
; G2 l" h  x8 W5 Umtd3: 0009b000 0001f000 "ubootA"
4 l  y8 @( R. t) m8 {# p) Zmtd4: 0009b000 0001f000 "ubootB"
7 j" `' e2 v) H6 Amtd5: 0003e000 0001f000 "flash_configA"
5 }$ c  T; o. q# [mtd6: 0003e000 0001f000 "flash_configB"
+ d: ]: R% y. q9 s- B  Z5 k7 _mtd7: 0003e000 0001f000 "slave_paramA"0 A* `( ^: |$ n" u$ z  K
mtd8: 0003e000 0001f000 "slave_paramB"5 k# C5 N7 [3 f( \0 I5 f
mtd9: 00307000 0001f000 "kernelA"5 R1 D5 k+ D# s
mtd10: 00307000 0001f000 "kernelB"
1 A5 i+ @) }6 D" q0 f7 `mtd11: 02815000 0001f000 "rootfsA"
" w; _! U& C- I; F7 V6 i% ~/ }mtd12: 02815000 0001f000 "rootfsB"
2 v* ^! A. y- w/ v3 Mmtd13: 0003e000 0001f000 "wifi_paramA"
; x4 @$ Y  X/ w: C7 dmtd14: 0003e000 0001f000 "wifi_paramB"
9 v# l* {" z2 G7 v4 cmtd15: 0003e000 0001f000 "system_param"# M2 Y) D9 M" Y5 p; |" Z8 l
mtd16: 0141a000 0001f000 "file_system"  N, C% p4 B9 b
mtd17: 0081d000 0001f000 "frameworkA"
8 f8 {9 S7 c& B, G) fmtd18: 0081d000 0001f000 "frameworkB"' s0 v1 |* k, o/ {3 q: H, l
mtd19: 07003000 0001f000 "apps", M" z1 \) ?* R* _% A

" c* }5 B+ h+ V" j& p

! P: \# r) ~6 N- L- B/ Z7 k然后根据这个详细结果来修改备份和还原分区命令! l% c' ?- k* n/ `2 ]* I! R0 ~
& q. O' d  ?4 J! H

! i/ k9 K. _& j: r- o7 D
3 e& r' h) q- u0 k
: I6 U4 |7 d0 X6 q' z7 c' U0 U# x2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
7 [% E6 L# \5 e9 |3 h; g" Q& I将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开% L3 q7 l- z2 h
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
- C; a9 l/ G" W; T; ~; k! H: \
- z% V. i! I( R, A, ?- q下面用rootfs作为示例# T: W. c7 t0 [! U
/ m, ~) f2 U' L
2 s$ c3 y$ H3 ~; l& k
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为  十六进制值   ,勾选  向上  查找  如下图
3 V, Y& \1 V! N3 \3 L6 d! w& E+ `5 J$ y8 J# n6 Q5 l
4 v' f% s# Q" }; C
点  确定  开始查找,会看到一堆杂乱的乱码如下图:4 d- G9 o3 p0 g1 i1 H# u$ B" i
% P# r3 {" n! r" y# \+ R1 r0 Z
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除0 b: {& O2 R. }. l

3 U0 {) X0 m; s: F7 }* d# Y删除后如下图+ I- x# i1 D+ n9 C3 O

4 ^  [) _7 h2 X2 f6 w% k  B$ M5 ]  I5 e* _6 a
然后保存,就是一个完整无多余的分区bin文件
4 n- ?4 E# F1 |7 m然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值& X3 J1 B1 V# e1 U% w- X9 U
( G' y; s  Q4 {% W+ {/ U& O8 ]  {8 t
3,还原到光猫分区中(此操作风险很大,请自行承担)
7 {5 d5 r2 M) `: p! H+ X将修改处理好的bin文件复制到U盘上,插入光猫USB口9 S3 R. M" f0 R2 ?
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
5 H5 v* W4 c# ^; D0 Rdd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
) t; _4 D4 E! P+ ?5 m5 A( r9 n3 B0 T/ E1 i2 D4 A: {
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9# v) H# A- X; ~3 j+ E; x+ s

1 _9 W$ p  g2 D4 w9 udd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
" m4 V4 {7 x8 ^0 l6 }( D. i& E( k$ a' M5 q0 y* R" g) ?

" B* L$ o! b7 N) j7 q* o- E: T) k说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3    9    11分区在运行,否则就是B系统4     10    12分区在启动8 Q; U4 f; G" i) N) j/ s

; S; a5 I! M3 e" h还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
( u2 ]- {: A4 }4 ?
4 ?4 E1 [; z9 {7 R1 b$ F此操作在某种承度上可以代替刷机,也可以看作是手动刷机+ E0 d, h, I; F, P7 i
/ V% e( v+ W. E  k
二,合成线刷固件(使用组播工具或WEB页面刷机)* T) `- I4 d9 o) p1 i0 |& m

4 \( L* u- N& A1,使用HWFW_GUI工具合成完整固件
打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v  r017   r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.0 n. U$ _4 k& b2 b- |& Y
这里使用一个论坛上别人所发的补全shell的固件作为示例9 v7 [# a( t- K/ e( H
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin) x3 z1 o# ?% f5 l/ c# a8 Q) w. i6 ~# I
项目路径写flash:uboot   项目类型选择UBOOT  如下图   其它默认 点保存
2 g4 i+ _' t- J9 W9 S" {  ~& g8 C5 F* m: t; q( a# r
0 S& @4 [2 }4 x- M! S! [- v9 v
b,点添加项目,选择修改好的9-kernel.bin
" h3 r+ V+ T6 D; _* J/ h; G项目路径写flash:kernel    项目类型选择KERNEL    项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054  不要前面的whwh
, w. r  C5 a3 s1 w! E; |% R如下图& p9 R' Z" z( `5 \! a: o

# ?' W! G0 T8 ^  X" j& q# o* |( Y
c,点添加项目,选择修改好的11-rootfs.bin8 Y  v" p6 X( |4 C
项目路径写flash:rootfs    项目类型选择ROOTFS   项目版本写V300R018C10SPC100B054     (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是)  如下图/ F2 L9 k1 h& Q  J; @) y1 f! I

/ w5 s+ A' F( w) @; L  d0 X6 l2 w2 ]2 f- J3 i9 \, L
) ?0 x) l) F. }+ Q8 M- Z5 E3 S
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
! i+ s: L1 i8 h5 h, {/ k来个补好后的固件图
! }7 \, M5 U$ E, J# Y+ ~7 t/ u& s, G: m: n

; Y  G, K5 ^' l  e- _, L  Q
: K" L, X& F6 w/ F. a
0 V3 J) o* ?/ Y% F9 L
7 N5 e4 Q- o/ Y/ |
/ f! v& p. A3 `* b" m" s2 v未完待续
+ ^+ g( F8 |: F. t  z" l9 u! z8 c

$ D% S+ D% R3 f1 E$ l/ {- [- K
. J5 x& r) s  U0 y1 C- F4 ?
3 o; d/ j+ s9 U1 V7 w7 i3 p+ n2 [
$ w4 D) h4 V; Z7 @% @1 _% q4 w! F/ V8 e/ ?
' I8 R8 X* n6 D3 q

: M$ l' j3 p1 e) S' O. s4 s' Q, t% `2 `' V( Z

2 h  ^3 g8 ]- R5 k; u
- n7 c) I. v* `, R& a
7 _! I, K" v) \& 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
发表于 4 天前 | 显示全部楼层
谢谢,看是简单,这些命令头大
发表于 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 | 显示全部楼层
感谢,学到很多实用东西。
发表于 2024-3-4 11:53:03 | 显示全部楼层
18年的帖子,现在按照顺序还能用不?
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

粤公网安备 44152102000001号

GMT+8, 2024-5-20 05:23 , Processed in 0.032246 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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