XR30 路由器折腾笔记

0. 概况

中国移动 XR30, RAX3000M 换壳,原始配置为 128MB + 512MB RAM,带 1 个 USB 3.0。
⭐从闲鱼收的这台由原机主扩容为了 512MB + 1GB RAM

硬件信息:

项目 型号 说明
CPU MT7981BA Arm A53 (1.3 GHz, 2 core)
RAM Micron DDR4 D9WWP 1GB 官网
SPI NAND Winbond 25N04KVZEIR 512MB 官网
无线 MT7976CN WiFi 6
有线 MT7531AE 1*千兆 WAN + 3*千兆 LAN
电源 12V 1A
UART 3.3V 115200n8

系统信息:

主机名 WinWrt
型号 CMCC RAX3000M
固件版本 ImmortalWrt 21.02-SNAPSHOT r0-24546fd /
LuCI openwrt-21.02 branch git-23.098.38725-847bd6b
内核版本 5.4.255
Uboot版本 U-Boot 2023.07 (Feb 15 2024 - 21:06:11 +0800)

1. 先备份

1.1 dd 备份

df -h查询显示 tmp 分区大小系统当前只有 400MB,需要调大到内存的实际可用大小,用于存放 512MB 的固件备份

1
mount -o remount,size=900M /tmp

查看 MTD 分区结构

1
2
3
4
5
6
7
8
root@WinWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 20000000 00020000 "spi0.0"
mtd1: 00100000 00020000 "BL2" # 1MB Boot Loader Stage 2,ATF
mtd2: 00080000 00020000 "u-boot-env" # 512KB Uboot 环境变量
mtd3: 00200000 00020000 "Factory" # 2MB 出厂信息(背面贴纸)
mtd4: 00200000 00020000 "FIP" # 2MB Uboot
mtd5: 1da80000 00020000 "ubi" # 474.5 MB

查看 ubi 分区信息

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
root@WinWrt:~# 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: 3796 (482000896 bytes, 459.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: 75
Current maximum erase counter value: 2
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: 29 LEBs (3682304 bytes, 3.5 MiB)
State: OK
Name: kernel
Character device major/minor: 249:1
-----------------------------------
Volume ID: 1 (on ubi0)
Type: dynamic
Alignment: 1
Size: 640 LEBs (81264640 bytes, 77.5 MiB)
State: OK
Name: rootfs
Character device major/minor: 249:2
-----------------------------------
Volume ID: 2 (on ubi0)
Type: dynamic
Alignment: 1
Size: 3048 LEBs (387022848 bytes, 369.0 MiB)
State: OK
Name: rootfs_data
Character device major/minor: 249:3

备份每个分区

1
2
3
4
5
6
#dd if=/dev/mtd0 of=/tmp/mtd0_spi0.0.bin bs=131072 # 全盘
dd if=/dev/mtd1 of=/tmp/mtd1_BL2.bin bs=131072
dd if=/dev/mtd2 of=/tmp/mtd2_u-boot-env.bin bs=131072
dd if=/dev/mtd3 of=/tmp/mtd3_Factory.bin bs=131072
dd if=/dev/mtd4 of=/tmp/mtd4_FIP.bin bs=131072
dd if=/dev/mtd5 of=/tmp/mtd5_ubi.bin bs=131072

MD5 校验,防止传输出错

1
md5sum /tmp/mtd1_BL2.bin

1.2 面板备份

再从面板备份一份,据称此处备份不包含 ECC 数据,恢复时能避免因 ECC 校验出错而失败。
系统 > 备份与升级 > 保存 mtdblock 内容 > spi0.0

2. 与 RAX3000M 的区别

XR30 与 RAX3000M 的硬件配置相近,但不能直接通刷同一固件。

  1. NAND 方面,与 RAX3000M的华邦不同,XR30 使用的是兆易创新 GD5F1GM7UE,该颗粒在开启 ECC 时对 spare 区读写范围的差异导致了不适配。
    GigaDevice_GD5F1GM7RE_阵列结构
  2. RAX3000M 有 RGB 共三颗LED,XR30 则为 RW 两颗LED。这个问题可以修改dts设备树文件解决。检索关键词RAX3000z led
    参考dtsi文件,参考路径openwrt/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/
1
2
3
4
5
6
7
8
9
10
11
12
13
leds {
compatible = "gpio-leds";

red_led: red {
label = "xr30:red";
gpios = <&pio 35 GPIO_ACTIVE_LOW>;
};

white_led: white {
label = "xr30:white";
gpios = <&pio 34 GPIO_ACTIVE_LOW>;
};
};

救砖资料

Uboot 没挂

  1. Uboot WebUI 救砖
    长按 reset 插电,直至 LED 闪过,电脑插线手动设置 ip 为 192.168.1.x,浏览器访问 Uboot
    更新系统固件:http://192.168.1.1
    更新 Uboot 固件:http://192.168.1.1/uboot.html
    更新 BL2 固件:http://192.168.1.1/bl2.html
  2. Tftpd 救砖
    CMCC RAX3000M 使用 Tftpd 刷写 OpenWrt 固件的救砖方法

Uboot 挂了

  1. 编程器救砖
  2. mtk_uartboot 救砖
    mtk_uartboot 食用教程
    【恩山】XR30 刷固件H大支持了及 mtk_uartboot - 0.1.1 TTL 救砖说明
    需要准备: DDR4的BL2,Uboot (fip.bin)

扩容资料

【恩山】红米 AX6000 硬改 2GB 内存+硬改 512MB 闪存教程
AI总结

这篇教程详尽地介绍了如何对红米 AX6000 路由器进行硬件改造,包括扩展内存至 2GB、闪存升级至 512MB,以及探索 USB 接口的改造可能性。以下是主要内容的汇总:

🔧 内存升级至 2GB

  • 原厂配置:512MB DDR4(三星 K4A4G165WE-BCWE)
  • 推荐颗粒:三星 K4AAG165WA-BCWE(2GB DDR4-3200)
  • 焊接流程
    • 使用热风枪拆除原内存颗粒
    • 清理焊盘并焊接新颗粒
    • 检查供电是否短路
  • 测试命令
    1
    dd if=/dev/zero of=/tmp/test bs=1M count=10000000
    若不死机则说明内存识别正常

💾 闪存升级至 512MB

  • 原厂闪存:ESMT F50L1G41LB(128MB SPI-NAND)
  • 推荐闪存:KIOXIA TC58CVG2S0HRAIJ(512MB SPI-NAND)
  • 编程器:CH341A(需改为 3.3V)
  • 软件工具:SNANDer(支持分区写入)
  • 固件修改
    • 修改 U-Boot 和 ATF 配置以支持更大闪存
    • DTS 中将 UBI 分区改为 490MB(0x1ea00000)
  • 刷写流程
    • 合并分区文件为 mtd.bin
    • 使用 SNANDer 擦除并写入闪存
    • TTL 进入 U-Boot WebUI 刷写固件

【恩山】W25N02KVZEIR mt7981 xr30 128m 的想换更大的闪存

开 IPv6

由光猫拨号

LAN

LAN-高级设置
LAN-DHCP设置

WAN6

WAN6-高级设置
WAN6-DHCP设置1
WAN6-DHCP设置2

主题文件位置

/usr/lib/lua/luci/view/themes/argon
参考文档:修改Luci界面

Docker

安装日志记录

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/immortalwrt_base
Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/istore/Packages.gz
*** Failed to download the package list from https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/istore/Packages.gz

Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/immortalwrt_luci
Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas/Packages.gz
*** Failed to download the package list from https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas/Packages.gz

Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas_luci/Packages.gz
*** Failed to download the package list from https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas_luci/Packages.gz

Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/immortalwrt_packages
Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall2/Packages.gz
*** Failed to download the package list from https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall2/Packages.gz

Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall_packages/Packages.gz
*** Failed to download the package list from https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall_packages/Packages.gz

Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/immortalwrt_routing
Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/immortalwrt_telephony
Downloading https://istore.istoreos.com/repo/all/meta/Packages.gz
Updated list of available packages in /tmp/is-root//tmp/opkg-lists/is_meta
Collected errors:
* opkg_download: Failed to download https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/istore/Packages.gz, wget returned 8.
* opkg_download: Failed to download https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas/Packages.gz, wget returned 8.
* opkg_download: Failed to download https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/nas_luci/Packages.gz, wget returned 8.
* opkg_download: Failed to download https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall2/Packages.gz, wget returned 8.
* opkg_download: Failed to download https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/passwall_packages/Packages.gz, wget returned 8.
Installing app-meta-homeassistant (1.1.4-20250321) to root...
Downloading https://istore.istoreos.com/repo/all/meta/app-meta-homeassistant_1.1.4-20250321_all.ipk
Installing docker (20.10.25-1) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/21.02-SNAPSHOT/packages/aarch64_cortex-a53/packages/docker_20.10.25-1_aarch64_cortex-a53.ipk
Installing luci-app-homeassistant (1.1.4-20250321) to root...
Downloading https://istore.istoreos.com/repo/all/nas_luci/luci-app-homeassistant_1.1.4-20250321_all.ipk
Installing luci-i18n-homeassistant-zh-cn (git-23.072.37344-dadcf42) to root...
Downloading https://istore.istoreos.com/repo/all/nas_luci/luci-i18n-homeassistant-zh-cn_git-23.072.37344-dadcf42_all.ipk
Installing docker-deps (0.00) to root...
Downloading https://istore.istoreos.com/repo/all/meta/docker-deps_0.00_all.ipk
Configuring docker.
Configuring docker-deps.
Configuring luci-app-homeassistant.
Configuring luci-i18n-homeassistant-zh-cn.
Configuring app-meta-homeassistant.

The Docker CE Engine.

kmod-dm /block device
kmod-br-netfilter /netfilter extensions
kmod-nf-ipvs /netfilter extensions
kmod-veth /netsupport
kmod-ikconfig /other modules

卸载软件记录

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
29
30
31
32
33
34
35
36
| 软件包名称                  | 版本                       | 大小(.ipk) | 描述 |
|------------------------|--------------------------|----------|----|
| ddnsto | 3.0.4-aarch64-7 | - | - |
| luci-app-ddnsto | 3.0.4 | - | - |
| luci-i18n-ddnsto-zh-cn | git-24.027.34231-09cd900 | - | - |

Volume ID: 0 (on ubi0)
Type: dynamic
Alignment: 1
Size: 29 LEBs (3682304 bytes, 3.5 MiB)
State: OK
Name: kernel
Character device major/minor: 249:1
-----------------------------------
Volume ID: 1 (on ubi0)
Type: dynamic
Alignment: 1
Size: 640 LEBs (81264640 bytes, 77.5 MiB)
State: OK
Name: rootfs
Character device major/minor: 249:2
-----------------------------------
Volume ID: 2 (on ubi0)
Type: dynamic
Alignment: 1
Size: 3048 LEBs (387022848 bytes, 369.0 MiB)
State: OK
Name: rootfs_data
Character device major/minor: 249:3
root@WinWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 77.5M 77.5M 0 100% /rom
tmpfs 495.1M 11.2M 483.9M 2% /tmp
/dev/ubi0_2 339.1M 17.8M 316.6M 5% /rom/overlay
overlayfs:/overlay 339.1M 17.8M 316.6M 5% /
tmpfs 512.0K 0 512.0K 0% /dev

编译相关

获取当前硬件信息

1
2
cat openwrt_version
uname -r

配置编译环境

1
2
3
4
5
6
sudo bash -c 'bash <(curl -sL https://build-scripts.immortalwrt.eu.org/init_build_environment.sh)'
# 修改feed源
# 可选添加mtk feed源
# echo "src-git mtk_openwrt_feed https://git01.mediatek.com/openwrt/feeds/mtk-openwrt-feeds" >> feeds.conf.default
./scripts/feeds update -a
./scripts/feeds install -a

报错 ld-musl-.so‘: No such file or directory
执行

1
2
make download V=s
make toolchain/install -j8 V=s

关于 vermagic 校验问题

参考文档1
参考文档2

使用opkg list获取形如 kernel_5.4.255-1-9fdb0faa42adf00453df4cc7821d0052_aarch64_cortex-a53 的 32 位 MD5 校验码,在根目录创建文件vermagic并填入

修改include/kernel-defaults.mk

1
2
# 注释掉 grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | mkhash md5 > $(LINUX_DIR)/.vermagic
cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic

修改package/kernel/linux/Makefile

1
2
# STAMP_BUILT:=$(STAMP_BUILT)_$(shell $(SCRIPT_DIR)/kconfig.pl $(LINUX_DIR)/.config | mkhash md5)
STAMP_BUILT:=$(STAMP_BUILT)_$(shell cat $(LINUX_DIR)/.vermagic)

编译内核及 kmod 模块

1
2
make menuconfig
make package/kernel/linux/compile V=s

XR30 路由器折腾笔记
https://heeteve-blog.pages.dev/2025/09/XR30折腾笔记/
作者
Heeteve
发布于
2025年9月18日
许可协议