CMCC RAX3000M 刷 OpenWRT

需求

写于 2020-03-23 21:57:52 的《家用 WiFi 方案》已经是 4 年前的方案了,现在流行 Mesh 方案。正好手头上有两台 2023-11-24 产的 CMCC RAX3000M NAND 版,那就把它们刷成官方版 OpenWRT 再来和红米 AX6S 一起 Mesh 吧!

参考

  1. OpenWRT Techdata: CMCC RAX3000M

  2. mediatek: add CMCC RAX3000M support

  3. Setting up a TFTP server for TFTP

  4. RAX3000M刷OpenWRT官方版本23.05.2

  5. 关于CMCC RAX3000M 刷机防变砖教程

  6. RAX3000M 刷固件时没刷BL2,还需要重新刷入吗?

  7. H3C Magic NX30 Pro 官方 OpenWrt 安装教程

  8. 关于mt7621原厂固件启用nmbm的提醒

  9. mediatek/filogic预编译镜像中带nmbm字样的应该如何安装?

警告

  1. 目前(2024-04-08),OpenWRT 官方还不支持 NMBM,所以刷机有一定风险!万一 NAND 有坏块,有可能无法启动。
1
2
3
4
5
6
7
root@RAX3000M:/tmp# dmesg | grep nmbm
[ 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":
  1. 这是 1124 版、NAND 版,非 eMMC 版,其它版本不保证可行。

软件工具

  1. 大部分系统都自带的 ssh 命令,可选 scp 命令或 winscp。大部分镜像文件都可以直接在路由器里用 wget 下载,如果您已经在电脑上下载好,也可以用 scp 命令或 winscp 上传到路由器。

  2. Linux 系统,或 Windows 上的 WSL。

  3. tftpd 或其它同类 TFTP 服务端。

具体步骤

1. 开启路由器 ssh 服务端

原理:导出配置,修改配置使能 dropbear,导入配置。

原版固件里导出的配置是一个加密的 tar 包,要编辑它,需要先解包,在 Linux 或 WSL 操作:

1
openssl aes-256-cbc -d -pbkdf2 -k $CmDc#RaX30O0M@\!$ -in cfg_export_config_file.conf -out - | tar -zxvf -

解开后,做两件事:编辑 etc/config/dropbear 允许 dropbear 和编辑 etc/shadow 修改 root 密码。

dropbear 里删除以下行,或把 0 改为 1:

1
option enable '0'

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#RaX30O0M@\!$ -out cfg_export_config_file_ssh.conf

拿 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:~# 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: 03d00000 00020000 "ubi"
mtd6: 02500000 00020000 "plugins"
mtd7: 00800000 00020000 "fwk"
mtd8: 00800000 00020000 "fwk2"

# 备份 mtd0 - mtd8
dd if=/dev/mtd0 of=/tmp/0.img
dd if=/dev/mtd1 of=/tmp/1.img
dd if=/dev/mtd2 of=/tmp/2.img
dd if=/dev/mtd3 of=/tmp/3.img
dd if=/dev/mtd4 of=/tmp/4.img
dd if=/dev/mtd5 of=/tmp/5.img
dd if=/dev/mtd6 of=/tmp/6.img
dd if=/dev/mtd7 of=/tmp/7.img
dd if=/dev/mtd8 of=/tmp/8.img

# 以上每条 dd 命令运行后,需要立刻在电脑上用 scp 把文件复制到电脑,
# 并删除路由器里的文件,防止 /tmp 被写爆

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

# wget https://downloads.openwrt.org/releases/23.05.3/targets/mediatek/filogic/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-bl31-uboot.fip
# sha256sum openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-bl31-uboot.fip
# f60d7aa3dcd854a5a39c2b3e05cdc9985460d4b358d02e96d51c50f476650270

# 3. Erase and write new 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.
# 文件名需要去掉版本号,即改为:
# openwrt-mediatek-filogic-cmcc_rax3000m-initramfs-recovery.itb

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:~# cd /tmp

# 查看 mtd 分区信息
root@UMUTech:/tmp# cat /proc/mtd
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# opkg update

# 安装 kmod-mtd-rw 内核模块
root@UMUTech:/tmp# opkg install kmod-mtd-rw

# 将分区配置为可读写
root@UMUTech:/tmp# insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1

# 下载 preloader
root@UMUTech:/tmp# wget https://downloads.openwrt.org/releases/23.05.3/targets/mediatek/filogic/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-preloader.bin

# 刷写 BL2 分区
root@UMUTech:/tmp# mtd write /tmp/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-preloader.bin bl2
Unlocking bl2 ...

Writing from /tmp/openwrt-23.05.3-mediatek-filogic-cmcc_rax3000m-nand-preloader.bin to bl2 ...