需求
写于 2020-03-23 21:57:52 的《家用 WiFi 方案 》已经是 4 年前的方案了,现在流行 Mesh 方案。正好手头上有两台 2023-11-24 产的 CMCC RAX3000M NAND 版,那就把它们刷成官方版 OpenWRT 再来和红米 AX6S 一起 Mesh 吧!
参考
OpenWRT Techdata: CMCC RAX3000M
mediatek: add CMCC RAX3000M support
Setting up a TFTP server for TFTP
RAX3000M刷OpenWRT官方版本23.05.2
关于CMCC RAX3000M 刷机防变砖教程
RAX3000M 刷固件时没刷BL2,还需要重新刷入吗?
H3C Magic NX30 Pro 官方 OpenWrt 安装教程
关于mt7621原厂固件启用nmbm的提醒
mediatek/filogic预编译镜像中带nmbm字样的应该如何安装?
警告
目前(2024-04-08),OpenWRT 官方还不支持 NMBM,所以刷机有一定风险!万一 NAND 有坏块,有可能无法启动。
1 2 3 4 5 6 7 root@RAX3000M:/tmp [ 0.685313] nmbm nmbm_spim_nand: Signature found at block 1023 [0x07fe0000] [ 0.693039] nmbm nmbm_spim_nand: First info table with writecount 0 found in block 960 [ 0.703133] nmbm nmbm_spim_nand: Second info table with writecount 0 found in block 963 [ 0.711141] nmbm nmbm_spim_nand: NMBM has been successfully attached [ 0.717754] 8 fixed-partitions partitions found on MTD device nmbm_spim_nand [ 0.724799] Creating 8 MTD partitions on "nmbm_spim_nand" :
这是 1124 版、NAND 版,非 eMMC 版,其它版本不保证可行。
软件工具
大部分系统都自带的 ssh 命令,可选 scp 命令或 winscp。大部分镜像文件都可以直接在路由器里用 wget 下载,如果您已经在电脑上下载好,也可以用 scp 命令或 winscp 上传到路由器。
Linux 系统,或 Windows 上的 WSL。
tftpd 或其它同类 TFTP 服务端。
具体步骤
1. 开启路由器 ssh 服务端
原理:导出配置,修改配置使能 dropbear,导入配置。
原版固件里导出的配置是一个加密的 tar 包,要编辑它,需要先解包,在 Linux 或 WSL 操作:
1 openssl aes-256-cbc -d -pbkdf2 -k $CmDc
解开后,做两件事:编辑 etc/config/dropbear 允许 dropbear 和编辑 etc/shadow 修改 root 密码。
dropbear 里删除以下行,或把 0 改为 1:
shadow 里的第一行格式为:
1 root:$1$<salt>$<password>:<unconcerned>
即,只关心第一和第二 : 之间的 <salt> 和 <password>,如果您能破解出 <password> 的明文,那可以不用改了;否则就用 <salt> 生成一个新密码,去替换 <password>。
1 openssl passwd -1 -salt <salt> OpenWRT
以上命令产生明文为 OpenWRT 的密码,拿它替换 shadow 里的原始密码。然后把修改后的文件再打包回去:
1 tar -zcvf - etc | openssl aes-256-cbc -pbkdf2 -k $CmDc
拿 cfg_export_config_file_ssh.conf 去恢复配置,重启后,即可用 root 身份 ssh 到路由器。
2. 备份原始分区
这步可以跳过,对一些人来说,备份意义不大,不可能刷非官方 OpenWRT 的。请自行斟酌。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 root@RAX3000M:~ 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: 03d00000 00020000 "ubi" mtd6: 02500000 00020000 "plugins" mtd7: 00800000 00020000 "fwk" mtd8: 00800000 00020000 "fwk2" dd if =/dev/mtd0 of=/tmp/0.imgdd if =/dev/mtd1 of=/tmp/1.imgdd if =/dev/mtd2 of=/tmp/2.imgdd if =/dev/mtd3 of=/tmp/3.imgdd if =/dev/mtd4 of=/tmp/4.imgdd if =/dev/mtd5 of=/tmp/5.imgdd if =/dev/mtd6 of=/tmp/6.imgdd if =/dev/mtd7 of=/tmp/7.imgdd if =/dev/mtd8 of=/tmp/8.img
3. 刷 uboot
1 2 3 4 5 6 7 8 9 wget https://mirrors.ustc.edu.cn/openwrt/releases/23.05.3/targets/mediatek/filogic/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-bl31-uboot.fip mtd erase FIP mtd write openwrt-mediatek-filogic-cmcc_rax3000m-nand-bl31-uboot.fip FIP
4. 刷 OpenWRT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 4. Set static IP on your PC: IP 192.168.1.254, GW 192.168.1.1 5. Serve OpenWrt initramfs image using TFTP server. 6. Cut off the power and re-engage, wait for TFTP recovery to complete. 7. After OpenWrt has booted, erase UBI volumes: ubidetach -p /dev/mtd0 ubiformat -y /dev/mtd0 ubiattach -p /dev/mtd0 8. Create new ubootenv volumes: ubimkvol /dev/ubi0 -n 0 -N ubootenv -s 128KiB ubimkvol /dev/ubi0 -n 1 -N ubootenv2 -s 128KiB 9. Additionally, if you want to have NAND recovery boot feature: (Don't worry! You will always have TFTP recovery boot feature.) ubimkvol /dev/ubi0 -n 2 -N recovery -s 20MiB ubiupdatevol /dev/ubi0_2 openwrt-mediatek-filogic-cmcc_rax3000m-initramfs-recovery.itb 10. Perform sysupgrade.
5. 刷 bl2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 root@UMUTech:~ root@UMUTech:/tmp dev: size erasesize name mtd0: 07200000 00020000 "ubi" mtd1: 00200000 00020000 "fip" mtd2: 00200000 00020000 "factory" mtd3: 00080000 00020000 "u-boot-env" mtd4: 00100000 00020000 "bl2" root@UMUTech:/tmp root@UMUTech:/tmp root@UMUTech:/tmp root@UMUTech:/tmp root@UMUTech:/tmp Unlocking bl2 ... Writing from /tmp/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-preloader.bin to bl2 ...