|
本帖最后由 {风 于 2019-4-14 10:12 编辑
此操作有风险,只供研究所用,由此造成任何损坏请自己担责
一,华为光猫备份和还原分区手上只有8145v所以以这个光猫为例子,其它华为光猫也差不多,)
1,备份各分区:
插入U盘(剩余空间大于1G)
一行一行的输入后回车,等备份完成后再输入下一行(有的分区较大备份时间较长)
备份命令如下:
dd if=/dev/mtd0 of=/mnt/usb/USB_disc1/0.bin
dd if=/dev/mtd1 of=/mnt/usb/USB_disc1/1.bin
dd if=/dev/mtd2 of=/mnt/usb/USB_disc1/2.bin
dd if=/dev/mtd3 of=/mnt/usb/USB_disc1/3-uboot.bin
dd if=/dev/mtd5 of=/mnt/usb/USB_disc1/5.bin
dd if=/dev/mtd7 of=/mnt/usb/USB_disc1/7.bin
dd if=/dev/mtd9 of=/mnt/usb/USB_disc1/9-kernel.bin
dd if=/dev/mtd11 of=/mnt/usb/USB_disc1/11-rootfs.bin
dd if=/dev/mtd13 of=/mnt/usb/USB_disc1/13.bin
dd if=/dev/mtd15 of=/mnt/usb/USB_disc1/15.bin
dd if=/dev/mtd16 of=/mnt/usb/USB_disc1/16.bin
dd if=/dev/mtd17 of=/mnt/usb/USB_disc1/17.bin
dd if=/dev/mtd19 of=/mnt/usb/USB_disc1/19.bin
dd if=/dev/ubi0_13 of=/mnt/usb/USB_disc1/0_13.bin
U盘根目录下这些 bin文件就是各分区的完整备份
A和B分区是一样的,所以只需备份其中一个即可
各分区的意思如下:
mtd0: ="startcode"
mtd1: ="ubifs"
mtd2: = "reserved"
mtd3: = "ubootA"
mtd4: = "ubootB"
mtd5: = "flash_configA"
mtd6: = "flash_configB"
mtd7: = "slave_paramA"
mtd8: = "slave_paramB"
mtd9: = "kernelA"
mtd10: = "kernelB"
mtd11: = "rootfsA"
mtd12: = "rootfsB"
mtd13: = "wifi_paramA"
mtd14: = "wifi_paramB"
mtd15: = "system_param"
mtd16: = "file_system"
mtd17: = "frameworkA"
mtd18: = "frameworkB"
mtd19: = "apps"
ubi0_13 = "jffs2"
其中最重要的是uboot kernel rootfs 这三个分区,后面也只用这三个文件作为示例
其它光猫可以使用命令cat /proc/mtd
查看详细分区结构,8145V结果如下:
dev: size erasesize name
mtd0: 00100000 00020000 "startcode"
mtd1: 0ff00000 00020000 "ubifs"
mtd2: 00000000 00000000 "reserved"
mtd3: 0009b000 0001f000 "ubootA"
mtd4: 0009b000 0001f000 "ubootB"
mtd5: 0003e000 0001f000 "flash_configA"
mtd6: 0003e000 0001f000 "flash_configB"
mtd7: 0003e000 0001f000 "slave_paramA"
mtd8: 0003e000 0001f000 "slave_paramB"
mtd9: 00307000 0001f000 "kernelA"
mtd10: 00307000 0001f000 "kernelB"
mtd11: 02815000 0001f000 "rootfsA"
mtd12: 02815000 0001f000 "rootfsB"
mtd13: 0003e000 0001f000 "wifi_paramA"
mtd14: 0003e000 0001f000 "wifi_paramB"
mtd15: 0003e000 0001f000 "system_param"
mtd16: 0141a000 0001f000 "file_system"
mtd17: 0081d000 0001f000 "frameworkA"
mtd18: 0081d000 0001f000 "frameworkB"
mtd19: 07003000 0001f000 "apps"
然后根据这个详细结果来修改备份和还原分区命令
2,适当修改一些备份文件(也可以不修改,但为了更安全最好是修改一下.因为恢复或刷机bin文件不能大于光猫这个分区的物理flash空间)
将这备份好的bin分区文件在电脑上用winhex或Hex Workshop等等十六进制编辑工具打开
直接将winhex下拉条拉到最下面如下图,可以看到很多FFFFFFFFFFFFFFFFFF之类的东东,这些东东是flash中的空白位,是不需要再刷入的垃圾数值
下面用rootfs作为示例
将光标在最后面的FF处点一下,然后点查找,查找数值处输入00,类型为 十六进制值 ,勾选 向上 查找 如下图
点 确定 开始查找,会看到一堆杂乱的乱码如下图:
找到的00的位置的后面全部是FFFFFFFFFFFF,将这些数据选中并且删除掉(不包括00),请将下图看清楚再删除
删除后如下图
然后保存,就是一个完整无多余的分区bin文件
然后用同样的方法修改其它分区bin文件.说简单点就是:删除掉尾部的空位FFFFFFFFFF数值
3,还原到光猫分区中(此操作风险很大,请自行承担)
将修改处理好的bin文件复制到U盘上,插入光猫USB口
然后输入如下命令进行还原这三个分区(每输入一行回车后,多等会,等成功后再输入下一行,千万不要把三行命令一次全部输入进去)
dd if=/mnt/usb/USB_disc1/3-uboot.bin of=/dev/mtdblock3
dd if=/mnt/usb/USB_disc1/9-kernel.bin of=/dev/mtdblock9
dd if=/mnt/usb/USB_disc1/11-rootfs.bin of=/dev/mtdblock11
说明:一般新光猫未刷错机造成无法启动,系统未滚回备用系统,就是A系统3 9 11分区在运行,否则就是B系统4 10 12分区在启动
还原进光猫分区后,稍等十几秒,再重启光猫,就OK了,
此操作在某种承度上可以代替刷机,也可以看作是手动刷机
二,合成线刷固件(使用组播工具或WEB页面刷机)
1,使用HWFW_GUI工具合成完整固件打开HWFW_GUI然后将本教程提供的固件模板打开,适合8145v r017 r018版本的固件,其它版本和光猫使用其它固件模板,模板可以找适合自己光猫的补shell的固件,或其它版本固件,都可以.
这里使用一个论坛上别人所发的补全shell的固件作为示例
a,然后点添加项目,然后选择前文所修改好的3-uboot.bin
项目路径写flash:uboot 项目类型选择UBOOT 如下图 其它默认 点保存
b,点添加项目,选择修改好的9-kernel.bin
项目路径写flash:kernel 项目类型选择KERNEL 项目版本写你备份的这个固件的版本,查看方式可以用winhex打开9-kernel.bin 最前面的一段就是,比如:whwhV300R018C10SPC100B054 不要前面的whwh
如下图
c,点添加项目,选择修改好的11-rootfs.bin
项目路径写flash:rootfs 项目类型选择ROOTFS 项目版本写V300R018C10SPC100B054 (同样也是用winhex打开11-rootfs.bin看前面的字段去掉whwh的那段就是) 如下图
最后保存好,至次真正的固件制作成功,可以使用组播等等工具刷机
来个补好后的固件图
注意顺序,signature一定要放在uboot,kernel,rootfs后面,如上图
使用工具
HWFW_GUI 1.0.6版
HWFW_GUI 1.0.8版
制作固件模板
华为8145v模板
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|