|
本帖最后由 lgs2007m 于 2024-10-17 11:11 编辑
MediaTek Filogic 系列路由器串口救砖教程
感谢蝈蝈大佬开发的 mtk_uartboot 工具,暗云大佬提供的教程,这样就可以随便刷砖了
适用系列:MediaTek MT7622、MT7981、MT7986、MT7988 SoC
360T7听说出现了闪存不同的版本,闪存不是F50L1G41LB了,降级原厂固件可能不支持新闪存,请自行甄别!!!
建议TTL使用mtk_uartboot直接从内存启动临时uboot,打开192.168.1.1/uboot.html刷最新uboot。
不要降级原厂固件了,除非你确定降级原厂固件支持你机子的闪存。
建议直接下载github大佬编译的hanwckf源码仓库的uboothttps://github.com/VIKINGYFY/UBOOT-CI/releases
感谢各位大佬的付出~
进入failsafe模式开启telnet参考hanwckf博客:360 T7 路由器 开启telnet及uboot控制台方法
https://cmi.hanwckf.top/p/360t7-telnet-uboot-console/
刷回官方固件参考:360T7官方固件分区备份及刷回官方固件教程
https://www.right.com.cn/forum/thread-8272630-1-1.html
0.准备工作,下载不死uboot和大分区固件
hanwckf大佬修改版uboot的优点有:
固件分区可达108MB,原厂uboot只能使用36M
自带一个简单的webui恢复页面
推荐使用360t7-fip-fixed-parts.bin,fixed-parts代表uboot分区表在编译期间固定,不会随着uboot环境变量变化。
hanwckf大佬不死uboot地址:
https://github.com/hanwckf/bl-mt798x/releases/tag/20221201
360T7 uboot 108M大分区固件推荐237大佬的插件版:
https://www.right.com.cn/forum/thread-8263340-1-1.html
串口工具软件:Xshell https://pan.lanzoui.com/b0f19ry9g
或者putty https://www.423down.com/11333.html
TFTP工具:Tftpd64 https://bitbucket.org/phjounin/tftpd64/downloads/tftpd64.464.zip
netcat工具:nmap https://nmap.org/dist/nmap-7.93-setup.exe
HFS工具:HFS https://udomain.dl.sourceforge.net/project/hfs/HFS/2.3m/hfs.exe
HASH工具:https://www.423down.com/9391.html
1.手动探针TTL连接
免拆接TTL学网上各位大佬的,使用3根铁丝扎带或者网线的铜线,做一个Z字型弯钩,然后在路由器上打光,透过散热孔看到TTL焊盘,先Z字平行散热孔放进去,再旋转对准焊盘放进去,如此反复插入三根探针,需要有点耐心。
我剥线头有点多,剥个头就行不用剥这么多,以免相互碰触短路。
建议使用USB转TTL的电平是3.3V的,因为mt798x路由器的TTL是3.3V的。当然有人5V也可以用,不过是否有安全隐患未知。
2.进入failsafe模式设置root密码和开启网络
启动时不断按f加回车键,直到进入failsafe模式,会看到输出root@(none):/#
开启uboot控制台菜单
- fw_setenv bootmenu_delay 3
复制代码
挂载rootfs并开启telnet
- mount_root
- sed -i 's/.*local debug=.*/\tlocal debug=1/' /etc/init.d/telnet
复制代码
修改root密码,输入命令后要输入一个新的密码,输入两次,简单设置为password就行
在路由器failsafe模式下开启网络
- ifconfig eth0 0.0.0.0
- brctl addbr br-lan
- ifconfig br-lan 192.168.1.1 netmask 255.255.255.0 up
- brctl addif br-lan eth0
复制代码
3.failsafe模式下查看分区并备份分区
- root@(none):/# cat /proc/mtd
- dev: size erasesize name
- mtd0: 08000000 00020000 "spi0.0"
- mtd1: 00100000 00020000 "bl2"
- mtd2: 00080000 00020000 "u-boot-env"
- mtd3: 00200000 00020000 "Factory"
- mtd4: 00200000 00020000 "fip"
- mtd5: 02400000 00020000 "ubi"
- mtd6: 02400000 00020000 "firmware-1"
- mtd7: 02400000 00020000 "plugin"
- mtd8: 00100000 00020000 "config"
- mtd9: 00080000 00020000 "factory"
- mtd10: 00700000 00020000 "log"
复制代码
将电脑的IP地址设置为192.168.1.8,插入路由器LAN口。
Windows安装nmap,CMD输入D:打开D盘,然后运行下面第一行ncat命令,打开第一个文件的监听。
再在路由器failsafe模式下运行对应cat命令备份并传输文件。当CMD会出现新的等待命令行,说明当前文件已传输完。
备份完一个,再到下一个,以此类推。备份完的文件在D盘目录下。
其中mtd0_spi00.bin是全部分区的备份,其他是单个分区的备份。
- ncat -l -p 3333 > mtd0_spi00.bin
- cat /dev/mtd0 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd1_bl2.bin
- cat /dev/mtd1 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd2_u-boot-env.bin
- cat /dev/mtd2 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd3_Factory.bin
- cat /dev/mtd3 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd4_fip.bin
- cat /dev/mtd4 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd5_ubi.bin
- cat /dev/mtd5 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd6_firmware-1.bin
- cat /dev/mtd6 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd7_plugin.bin
- cat /dev/mtd7 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd8_config.bin
- cat /dev/mtd8 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd9_factory.bin
- cat /dev/mtd9 | nc 192.168.1.8 3333
- ncat -l -p 3333 > mtd10_log.bin
- cat /dev/mtd10 | nc 192.168.1.8 3333
复制代码
4.刷不死uboot
运行hfs.exe,将mt7981_360t7-fip-fixed-parts.bin文件拖拽到hfs左边Virtual File System等待路由器下载。下载链接在HFS上也可以看到。
运行下面命令下载文件并刷写到fip分区,一行一行执行,查看是否有错误。注意这里uboot分区是小写的fip
- wget -P /tmp http://192.168.1.8/mt7981_360t7-fip-fixed-parts.bin
- md5sum /tmp/mt7981_360t7-fip-fixed-parts.bin
- mtd erase fip
- mtd write /tmp/mt7981_360t7-fip-fixed-parts.bin fip
- mtd verify /tmp/mt7981_360t7-fip-fixed-parts.bin fip
复制代码
先检查运行md5sum后md5值和我下面的输出是否一样,然后最后mtd verify校验写入输出success就刷写好不死uboot了。
我的输出是这样的:
- root@(none):/# wget -P /tmp http://192.168.1.8/mt7981_360t7-fip-fixed-parts.bin
- --1970-01-01 00:36:54-- http://192.168.1.8/mt7981_360t7-fip-fixed-parts.bin
- Connecting to 192.168.1.8:80... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 695033 (679K) [application/octet-stream]
- Saving to: '/tmp/mt7981_360t7-fip-fixed-parts.bin'
- mt7981_360t7-fip-fi 100%[===================>] 678.74K --.-KB/s in 0.06s
- 1970-01-01 00:36:54 (11.6 MB/s) - '/tmp/mt7981_360t7-fip-fixed-parts.bin' saved [695033/695033]
- root@(none):/# md5sum /tmp/mt7981_360t7-fip-fixed-parts.bin
- 256977db5ca6a17b0f9e73b0ddfd3efd /tmp/mt7981_360t7-fip-fixed-parts.bin
- root@(none):/# mtd erase fip
- Unlocking fip ...
- Erasing fip ...
- root@(none):/# mtd write /tmp/mt7981_360t7-fip-fixed-parts.bin fip
- Unlocking fip ...
- Writing from /tmp/mt7981_360t7-fip-fixed-parts.bin to fip ...
- root@(none):/# mtd verify /tmp/mt7981_360t7-fip-fixed-parts.bin fip
- Verifying fip against /tmp/mt7981_360t7-fip-fixed-parts.bin ...
- db7769257ba1a65cb0739e0ffd3efddd - fip
- db7769257ba1a65cb0739e0ffd3efddd - /tmp/mt7981_360t7-fip-fixed-parts.bin
- Success
- root@(none):/#
复制代码
确认刷入完毕后,拔掉路由器电源,将电脑的IP地址设置为固定的192.168.1.x,因为之前已经设置为192.168.1.8了,这里可以不用设置了。
然后按住路由器的RESET按钮后通电开机,等待8s后松开RESET,用浏览器进入192.168.1.1
在uboot恢复页面选择要刷入大分区的固件。刷完固件后记得恢复网卡IP为自动获取。
注意:第一次刷会因为没有关联ubi提示失败,刷新192.168.1.1然后再上传固件刷一次即可。
进入uboot大分区固件后查看分区信息,可以看到ubi有108MB。
- root@ImmortalWrt:~# cat /proc/mtd
- dev: size erasesize name
- mtd0: 08000000 00020000 "spi0.0"
- mtd1: 00100000 00020000 "BL2"
- mtd2: 00080000 00020000 "u-boot-env"
- mtd3: 00200000 00020000 "Factory"
- mtd4: 00200000 00020000 "FIP"
- mtd5: 06c00000 00020000 "ubi"
- mtd6: 00100000 00020000 "stock-config"
- mtd7: 00080000 00020000 "stock-factory"
- mtd8: 00400000 00020000 "stock-log"
- root@ImmortalWrt:~# ubinfo -a
- UBI version: 1
- Count of UBI devices: 1
- UBI control device major/minor: 10:62
- Present UBI devices: ubi0
- ubi0
- Volumes count: 3
- Logical eraseblock size: 126976 bytes, 124.0 KiB
- Total amount of logical eraseblocks: 864 (109707264 bytes, 104.6 MiB)
- Amount of available logical eraseblocks: 0 (0 bytes)
- Maximum count of volumes 128
- Count of bad physical eraseblocks: 0
- Count of reserved physical eraseblocks: 20
- Current maximum erase counter value: 3
- Minimum input/output unit size: 2048 bytes
- Character device major/minor: 249:0
- Present volumes: 0, 1, 2
- Volume ID: 0 (on ubi0)
- Type: dynamic
- Alignment: 1
- Size: 28 LEBs (3555328 bytes, 3.3 MiB)
- State: OK
- Name: kernel
- Character device major/minor: 249:1
- -----------------------------------
- Volume ID: 1 (on ubi0)
- Type: dynamic
- Alignment: 1
- Size: 233 LEBs (29585408 bytes, 28.2 MiB)
- State: OK
- Name: rootfs
- Character device major/minor: 249:2
- -----------------------------------
- Volume ID: 2 (on ubi0)
- Type: dynamic
- Alignment: 1
- Size: 579 LEBs (73519104 bytes, 70.1 MiB)
- State: OK
- Name: rootfs_data
- Character device major/minor: 249:3
复制代码
5.刷回官方固件
xiasenlinmu大佬刷回官方固件的方法是刷hanwckf大佬兼容官方固件的不死uboot。
我喜欢刷回官方就全部刷回去,所以还是在TTL下操作。
我只测试过我原机的备份刷回去,没问题,其他人的备份是否能刷不清楚。
原理简单粗暴,就是uboot控制台里直接把fip、ubi、firmware-1和plugin分区刷回去。
路由器上电开机后按住下方向键不放,直到选到U-Boot console,然后多次回车,直到出现MT7981>
- *** U-Boot Boot Menu ***
- 1. Startup system (Default)
- 2. Upgrade firmware
- 3. Upgrade ATF BL2
- 4. Upgrade ATF FIP
- 5. Upgrade single image
- 6. Load image
- 0. U-Boot console
- Press UP/DOWN to move, ENTER to select, ESC/CTRL+C to quit
- Hit any key to stop autoboot: 0
- MT7981>
复制代码
输入printenv查看env环境变量中的serverip
- MT7981> printenv
- baudrate=115200
- bootdelay=2
- bootfile=openwrt-mediatek-mt7981-mt7981-spim-nand-rfb-squashfs-sysupgrade.bin
- bootmenu_0=Startup system (Default)=mtkboardboot
- bootmenu_1=Upgrade firmware=mtkupgrade fw
- bootmenu_2=Upgrade ATF BL2=mtkupgrade bl2
- bootmenu_3=Upgrade ATF FIP=mtkupgrade fip
- bootmenu_4=Upgrade single image=mtkupgrade simg
- bootmenu_5=Load image=mtkload
- bootmenu_delay=3
- ethact=ethernet@15100000
- ethaddr=62:0b:40:5e:1e:99
- fdtcontroladdr=5ffc4d70
- fileaddr=46000000
- filesize=d7f337
- ipaddr=192.168.1.1
- loadaddr=0x46000000
- mtdids=nmbm0=nmbm0
- mtdparts=nmbm0:1024k(bl2),512k(u-boot-env),2048k(factory),2048k(fip),36M(ubi),36M(firmware-1),36M(plugin),1M(config),512k(factory),4M(log)
- netmask=255.255.255.0
- serverip=192.168.1.2
- stderr=serial@11002000
- stdin=serial@11002000
- stdout=serial@11002000
- Environment size: 794/131068 bytes
复制代码
可以看到TFTP服务器IP serverip=192.168.1.2,将连接路由器LAN口的有线网卡IP设置为192.168.1.2/24,要关闭设置以太网属性窗口设置才会生效!
将要恢复的4个备份文件拷贝到Tftpd64目录下,然后关闭电脑防火墙,再运行Tftpd64软件,Server interfaces选择192.168.1.2的网卡。
mtd4_fip.bin
mtd5_ubi.bin
mtd6_firmware-1.bin
mtd7_plugin.bin
uboot控制台ping 192.168.1.2返回alive说明网络通畅
- MT7981> ping 192.168.1.2
- Using ethernet@15100000 device
- T T T T T host 192.168.1.2 is alive
复制代码
输入mtd list查看当前分区,因为这个是读取env环境变量里面的分区信息所以还是原厂分区。
在uboot时不会去读取原厂分区,而是用自己的大分区表启动。
- MT7981> mtd list
- List of MTD devices:
- * spi-nand0
- - device: spi_nand@0
- - parent: spi@1100a000
- - driver: spi_nand
- - path: /spi@1100a000/spi_nand@0
- - type: NAND flash
- - block size: 0x20000 bytes
- - min I/O: 0x800 bytes
- - OOB size: 64 bytes
- - OOB available: 24 bytes
- - 0x000000000000-0x000008000000 : "spi-nand0"
- * nmbm0
- - type: Unknown
- - block size: 0x20000 bytes
- - min I/O: 0x800 bytes
- - OOB size: 64 bytes
- - OOB available: 24 bytes
- - 0x000000000000-0x000007a00000 : "nmbm0"
- - 0x000000000000-0x000000100000 : "bl2"
- - 0x000000100000-0x000000180000 : "u-boot-env"
- - 0x000000180000-0x000000380000 : "factory"
- - 0x000000380000-0x000000580000 : "fip"
- - 0x000000580000-0x000002980000 : "ubi"
- - 0x000002980000-0x000004d80000 : "firmware-1"
- - 0x000004d80000-0x000007180000 : "plugin"
- - 0x000007180000-0x000007280000 : "config"
- - 0x000007280000-0x000007300000 : "factory"
- - 0x000007300000-0x000007700000 : "log"
复制代码
输入下面命令刷回官方uboot,一行一行执行,看清是否有报错:
- tftpboot mtd4_fip.bin
- mtd erase fip
- mtd write fip 0x46000000 0x0 0x200000
- mtd read fip 0x50000000
- crc32 0x50000000 0x200000
复制代码
使用crc32校验写入后的分区hash是否和本地备份文件的crc32一样,一样就可以了
刷fip比较重要,所以建议校验下,后面几个固件插件分区可以不用校验了。
即使固件刷写有问题也可以TTL进uboot控制台重新刷,只要uboot没有被搞坏。
我的输出是这样的:
- MT7981> tftpboot mtd4_fip.bin
- Using ethernet@15100000 device
- TFTP from server 192.168.1.2; our IP address is 192.168.1.1
- Filename 'mtd4_fip.bin'.
- Load address: 0x46000000
- Loading: T T T T T #T ################################################################
- #################################################################
- #############
- 399.4 KiB/s
- done
- Bytes transferred = 2097152 (200000 hex)
- MT7981> mtd erase fip
- Erasing 0x00000000 ... 0x001fffff (16 eraseblock(s))
- MT7981> mtd write fip 0x46000000 0x0 0x200000
- Writing 2097152 byte(s) at offset 0x00000000
- MT7981> mtd read fip 0x50000000
- Reading 2097152 byte(s) at offset 0x00000000
- MT7981> crc32 0x50000000 0x200000
- crc32 for 50000000 ... 501fffff ==> ceba3933
复制代码
文件: mtd4_fip.bin
大小: 2097152 字节
MD5: 72D6AFCE3BDF12B05211BC2456F47F69
SHA1: 16736B5E77208E1B32CBE77A6A9ACFE215CBA57B
CRC32: CEBA3933
下面刷写固件分区和插件分区,命令一行一行执行,注意查看是否有报错:
- tftpboot mtd5_ubi.bin
- mtd erase ubi
- mtd write ubi 0x46000000 0x0 0x2400000
- tftpboot mtd6_firmware-1.bin
- mtd erase firmware-1
- mtd write firmware-1 0x46000000 0x0 0x2400000
- tftpboot mtd7_plugin.bin
- mtd erase plugin
- mtd write plugin 0x46000000 0x0 0x2400000
复制代码
记住,一定要先擦除再写入!!
刷完之后断电重启,把网卡IP设置回自动获取。
后面改了512M内存和加散热片,加14*14*6mm的散热片,用3M散热专用双面胶贴上去,再用硅橡胶固定。
室温25度左右,原机运行1小时CPU温度56度,加散热片温度下降有限,大概降低3度左右。
也尝试了加屏蔽罩,但是定制不管是双件套还是单件的都很贵,不值得。
自己裁剪单件的,需要焊接上去,焊接拆卸又麻烦,最后放弃了。
【改内存后的测试方法】
方法1:dd命令写入tmp
SSH登录,运行dd if=/dev/zero of=/tmp/test bs=1M count=10000000,会在tmp文件夹生成一个(内存大小/2)大小的test文件,占满tmp,不死机说明内存识别没问题。
测试后手动删除tmp文件夹下这个文件即可
方法2:stress插件压力测试
软件包安装htop和stress,运行htop查看剩余内存,然后stress命令压力测试剩余内存。
我用的是3线程,每线程128M,测试1200秒:stress --vm 3 --vm-bytes 128M --timeout 1200s
同时还可以SSH后台运行,关闭SSH登录仍然可以运行,运行结果保存在/etc/config/mtest.log
- nohup stress --vm 3 --vm-bytes 128M --timeout 1200s > /etc/config/mtest.log 2>&1 &
复制代码
方法3:uboot控制台mtest测试
这个需要uboot带mtest,hanwckf大佬的没开启,需要自己编译开启。也可以用我的
文件: mt7981_360t7-fip-fixed-parts_mtest.bin
大小: 696657 字节
修改时间: 2023年3月16日, 20:26:48
MD5: 86BC5614446592195385352BC2098AFB
SHA1: 60D6B2BA2C3D9D6022584ACFD86F087C2A6867DC
CRC32: 2BDD0843
进入uboot控制台后bdinfo查看控制台系统预留内存信息,然后mtest测试预留内存之外的内存空间。
mtest的用法:mtest [start [end [pattern [iterations]]]]
我测试的是内存从0x43050000到0x5f700000,读写入数据是0xaa55aa55,100次:mtest 0x43050000 0x5f700000 0xaa55aa55 100
- MT7981> bdinfo
- boot_params = 0x0000000040000100
- DRAM bank = 0x0000000000000000
- -> start = 0x0000000040000000
- -> size = 0x0000000020000000
- flashstart = 0x0000000000000000
- flashsize = 0x0000000000000000
- flashoffset = 0x0000000000000000
- baudrate = 115200 bps
- relocaddr = 0x000000005ff3e000
- reloc off = 0x000000001e13e000
- Build = 64-bit
- current eth = ethernet@15100000
- ethaddr = fa:59:12:0a:16:3d
- IP addr = 192.168.1.1
- fdt_blob = 0x000000005ffc4250
- new_fdt = 0x0000000000000000
- fdt_size = 0x0000000000000000
- lmb_dump_all:
- memory.cnt = 0x1
- memory[0] [0x40000000-0x5fffffff], 0x20000000 bytes flags: 0
- reserved.cnt = 0x3
- reserved[0] [0x42ff0000-0x42ffffff], 0x00010000 bytes flags: 0
- reserved[1] [0x43000000-0x4302ffff], 0x00030000 bytes flags: 4
- reserved[2] [0x5f7fb940-0x5fffffff], 0x008046c0 bytes flags: 0
- devicetree = embed
- arch_number = 0x0000000000000000
- TLB addr = 0x000000005fff0000
- irq_sp = 0x000000005f7ffd90
- sp start = 0x000000005f7ffd90
- Early malloc usage: 6c8 / 4000
- MT7981> mtest 0x43050000 0x5f700000 0xaa55aa55 100
- Testing 43050000 ... 5f700000:
- Pattern FFFFFFFF55AA55AB Writing... Reading...Tested 256 iteration(s) with 0 errors.
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|