在,哪里有千兆外网,急


前段时间猫棒非常火,跟风也入(piao)了一个猫棒但是一直没空料理他它,型号是华为MA5671A。

众所周知这棒子在市面上总共有三个型号的,即华为MA5671A,诺基亚G010SA,阿尔卡特G010SP,其中华为的最为难刷,里面的固件一干二净什么功能都没有,只能通过编程器/TTL+Uboot的方法刷。本次刷机借鉴了群友的经验加上互联网上的一些参考资料得以成功,现把其中一些步骤和坑细化的说明一下,参考链接放在结尾

  • 怎么刷

当我们拿到猫棒的时候我们有两种选择,第一种是BGA干下来他QFN封装的Flash,然后编程器读出来;第二种就是TTL+进Uboot刷固件,本次折腾中我选择了第二种方法,且搭配了光电转换器。

拆开光电转接器,拆开模块的笼子,看到SFP座,面向有插口的一面从左往右,第一脚为1,最后一脚为10,接下来,根据参考资料可知,2脚为TX(接你USB-TTL的RX),7脚为RX(接你USB-TTL的TX),1脚对面脚是GND,GND很多,随便接一个也行。怎么测试是否焊接好了呢,把你焊接的线和USB-TTL插好,找个镊子点在两个触点上打开你的串口程序随便输点什么东西,如果你能正常输入,那说明RX-TX是通的。串口的通讯波特率是115200。

线都焊接好以后,三根焊接的线插好USB-TTL,插好网线,给转换器上电,下载这个包打开包里的enable_x64.exe,插上猫棒,等到程序跑完的时候你的串口就开启来了回显,这会就可以在你的串口管理程序上进行操作了。
如果你是在linux下呢,就要用点操作了,你需要在做好所有前置操作后,打开你的串口工具连接好串口,按着Ctrl+C插上猫棒,等个几秒你会发现窗口里什么都没有输出,这是因为华为默认开了silent_boot,此时集中精力,先敲几个回车,再输入下面这堆玩意(可以尝试复制粘贴)。

setenv bootdelay 3
setenv asc 0
setenv asc0 0
setenv preboot "gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423;gpio clear 422;gpio clear 325;gpio clear 402;gpio clear 424"
saveenv
reset

如果你用的是可调电源给板子上电,如果成功是会有电流的跳变,进入看见串口回显后,按Ctrl+C进入Uboot,大概是这样的显示

此时你就可以正常刷固件了,这里推荐使用TFTP刷(因为快),在Uboot里输入

setenv ipaddr 192.168.2.10	#这里是你的猫棒的ip地址,这个地址决定了你刷进去的固件后台地址是多少
setenv serverip 192.168.2.12	#这里是你TFTP的ip地址,即你PC的地址
setenv image_name huawei	#image_name后面跟的是你固件的名字,实际固件名字是[image_name]-squashfs.image,看好你的固件名字
save

保存好后,把光电转换器和你的pc用网线连起来,如果你有个USB网卡那是最好不过的,把网卡的地址改成和你上面配置的和PC一样的地址,打开TFTP服务器,设定好你的固件所在的路径,在串口工具上输入

run update_openwrt

此时应该开始了升级流程,包括跑条什么的动作,如果你的进度条一直显示的类似 “T T T T”的字符那说明你的网络或者tftp有问题,检查一下你的配置吧。跑完进度条后就结束了升级,输入reset或者直接拔电重启,过一会就能访问到openwrt首页了。

  • 备份恢复

MA5671A的mtd布局是这样的

0x000000000000-0x000000040000 : "uboot"
0x000000040000-0x0000000c0000 : "uboot_env"
0x0000000c0000-0x000000800000 : "linux"
0x0000001e7f89-0x000000800000 : "rootfs"
0x0000004b0000-0x000000800000 : "rootfs_data"
0x000000800000-0x000001000000 : "image1"

备份有两种办法:

  1. 在uboot里输入env print, 把输出的文件copy出来一份就可以了,如果值中包含换行符记得删掉
  2. 有些固件中自带备份功能(例如:阿瑟)

恢复这里引用一下9baka.moe的博主的方法

editenv mtd1_offs
0x40000
saveenv
editenv update_mtd1
tftp ${ram_addr} ${tftppath}${image_name}.bin;sf probe 0;sf erase ${mtd1_offs} +${filesize};sf write ${ram_addr} ${mtd1_offs} ${filesize}
saveenv
setenv ipaddr 192.168.1.10
setenv serverip 192.168.1.2
setenv image_name mtd1
save

run update_mtd1
直接断电
  • 一些坑

在刷机的过程中碰到了一些坑,这里简述一下

  1. 刷机的时候USB-TTL一定要接GND,用光纤收发器可以不接VCC因为收发器会自己给猫棒供电,但是GND一定要接,部分教程里只说了接RXTX,这是个小坑。
  2. 刷固件优先选择“牛奶”或者“阿瑟”固件,或先刷“牛奶”再更新“阿瑟”这两种固件比较文明,开启了SSH,不会和部分固件一样锁了SSH什么都干不了
  3. 当你刷了一个7M的固件,然后又刷了一个3M/4M的固件后,你发现你的TTL是进不去终端的,这是因为上一个7M固件的设置并未被清除,Terminal还是被锁定的状态(串口敲回车一直返回/sbin/askfirst的错误),此时有两种办法,第一是在uboot把分区清空,但是这样一个不小心就容易玩脱,我使用的是第二种方法,具体操作如下:
    1. 准备一个http服务器,随便什么都行,我这里在windows下用caddy,开启目录访问模式,开启后访问一下你的地址看看有没有
    .\caddy_windows_amd64.exe file-server --browse --root [你的根目录]
    
    1. 访问你固件的luci,在系统下应该会有个自定义命令的功能
      3.访问自定义命令,编辑添加一个命令
    cat /etc/inittab
    
    1. 复制其中的命令回显(未加粗的部分),在你的web根目录下新建一个inittab文件,把回显复制进去,文件内容可能长这样(可能不完全一样)
    ::sysinit:/etc/init.d/rcS S boot
    ::shutdown:/etc/init.d/rcS K stop
    ttyLTQ0::askfirst:/bin/login
    
    1. 修改其中的 ttyLTQ0::askfirst:/bin/loginttyLTQ0::askfirst:/bin/ash --login 并保存
    2. 在自定义命令中执行
    wget -O /etc/inittab http://x.x.x.x/inittab
    
    1. 重启,然后发现串口终端就正常了,但是实际上这会还是有点问题,比如luci的页面有问题,我们继续处理
    2. 把你现在用的或者要新刷的固件放进web根目录,在串口终端中输入
    cd /tmp
    wget http://x.x.x.x/xxx.image
    sysupgrade -n xxx.image
    
    1. 等刷新完固件后重启一切就完全正常了

  • 感谢

使用华为 MA5671A 代替我的 HN8145V 光猫
Come avere i 2.5 Gbps su un unico dispositivo senza il Fastgate
华为MA5671A、NOKIA猫棒刷机教程
Caddy Web Server
固件更新 | 咸鱼工作室-XGPON.CN