2023年折腾笔记RAX3000M_eMMC刷UBOOT指南

SnowShot_2026-04-10_21-43-27 (2).png

推荐方案:直接使用 单分区 GPT + 单分区 uboot,详见文末说明。

硬件规格

项目参数
处理器MT7981B
内存DDR4 512M
无线芯片MT7976CN
交换芯片MT7531
闪存(普通版)128M SPI-NAND
闪存(算力版)64G eMMC

关于 DDR 改内存:目前开源 ATF 支持 DDR3 最高 512M,DDR4 最高 1G。


版本区分方法

普通版(NAND)

  • 盒子及机身背部标签 EC 字样
  • 生产日期:2023051520230606 基本均为普通版
  • 机身底部 PCB 右上角印丝结尾为 P3

算力版(eMMC)

  • 盒子及机身背部标签 EC 字样
  • 生产日期:2023062620230703 基本均为算力版
  • 机身底部 PCB 右上角印丝结尾为 P1

步骤 0:开启 SSH

  1. 导出路由器配置文件,修改其中的 rc.local 以添加开启 SSH 的命令,同时修改 shadow 文件清除 root 密码。
  2. 也可直接使用社区提供的配置文件 RAX3000M_eMMC_config_file-Telnet+SSH+Luci.conf,导入后等待重启应用即可开启 SSH。
  3. 使用 Xshell 或 PuTTY 登录 SSH:

    • 地址192.168.10.1
    • 端口22
    • 用户名root
    • 密码:无

查看原厂分区信息

SSH 登录后输入 fdisk -l 可确认为 64G eMMC(120832000 sectors),原厂为双分区布局:

Number  Start (sector)    End (sector)  Size Name
     1            8192            9215  512K u-boot-env
     2            9216           13311 2048K factory
     3           13312           17407 2048K fip
     4           17408           82943 32.0M kernel
     5           82944          214015 64.0M rootfs
     6          214016          279551 32.0M kernel2
     7          279552          410623 64.0M rootfs2
     8          410624          934911  256M rootfs_data
     9          934912         1065983 64.0M plugins
    10         1065984         1098751 16.0M fwk
    11         1098752         1131519 16.0M fwk2
    12         1131520       120800000 57.0G data
说明:BL2 在 /dev/mmcblk0boot0,uboot 在 /dev/mmcblk0p3。原厂 rootfs/rootfs2 均只有 64MB,固件大小不能超过 64MB。

步骤 1:备份分区

建议备份到 /mnt/mmcblk0p12(57G data 分区),再用 WinSCP 下载到本地。

WinSCP 设置:协议 SCP,IP 192.168.10.1,端口 22。下载大文件时,进入「高级站点设置 → 连接」,取消勾选「优化连接缓冲大小」。

一次性执行以下所有命令进行备份:

dd if=/dev/mmcblk0boot0 of=/mnt/mmcblk0p12/boot0_bl2.bin
dd if=/dev/mmcblk0 bs=512 count=34 of=/mnt/mmcblk0p12/mmcblk0_GPT.bin
dd if=/dev/mmcblk0 bs=512 skip=34 count=8158 of=/mnt/mmcblk0p12/mmcblk0_unpartitioned.bin
dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p12/mmcblk0p1_u-boot-env.bin
dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p12/mmcblk0p2_factory.bin
dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p12/mmcblk0p3_fip.bin
dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p12/mmcblk0p4_kernel.bin
dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p12/mmcblk0p5_rootfs.bin
dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p12/mmcblk0p6_kernel2.bin
dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p12/mmcblk0p7_rootfs2.bin
dd if=/dev/mmcblk0p8 of=/mnt/mmcblk0p12/mmcblk0p8_rootfs_data.bin
dd if=/dev/mmcblk0p9 of=/mnt/mmcblk0p12/mmcblk0p9_plugins.bin
dd if=/dev/mmcblk0p10 of=/mnt/mmcblk0p12/mmcblk0p10_fwk.bin
dd if=/dev/mmcblk0p11 of=/mnt/mmcblk0p12/mmcblk0p11_fwk2.bin

步骤 2:刷入单分区不死 uboot

由于 RAX3000M 未锁 BL2,只需刷写 uboot 即可。

上传 mmcblk0p3_fip_single_boot.bin/tmp,验证 MD5:

md5sum /tmp/mmcblk0p3_fip_single_boot.bin
# 正确输出(20231005版):a39581ab80a1b11a4cf7140b05e7191b

确认 fip 分区位置:

blkid | grep fip
# 应输出:/dev/mmcblk0p3: PARTLABEL="fip" ...

确认无误后刷写:

dd if=/tmp/mmcblk0p3_fip_single_boot.bin of=/dev/mmcblk0p3
sync

验证写入结果:

md5sum /dev/mmcblk0p3
# 应与上方 MD5 一致:a39581ab80a1b11a4cf7140b05e7191b
此时先不要重启,继续执行步骤 3。

步骤 3:刷入单分区扩容分区表(GPT)

刷入新分区表后,原 mmcblk0p6–p11 将合并到 rootfs,rootfs 扩容至 512MB

首先确认 eMMC 总扇区数为 120832000

fdisk -l /dev/mmcblk0

上传 mmcblk0_GPT_single_boot.bin/tmp,验证 MD5:

md5sum /tmp/mmcblk0_GPT_single_boot.bin
# 正确输出:90eb06e7b09d263441b0c744165ccbd8

刷写分区表:

dd if=/tmp/mmcblk0_GPT_single_boot.bin of=/dev/mmcblk0 bs=512 count=34
sync

验证写入结果:

dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_backup.bin
md5sum /tmp/mmcblk0_GPT_backup.bin
# 应输出:90eb06e7b09d263441b0c744165ccbd8

确认分区数变为 6 个,rootfs 为 512MB:

fdisk -l /dev/mmcblk0

至此刷机完成,断电进入 uboot 刷入固件即可。

若磁盘管理插件显示分区不正常,在第三方 OpenWrt 启动后执行 fdisk /dev/mmcblk0 再输入 w 写入备份分区表。


uboot 使用说明

项目参数
uboot 地址192.168.1.1
电脑 IP 设置192.168.1.2/24
连接方式网线接路由器 LAN 口
进入方式路由上电时按住 Reset,等待灯变蓝色后松开
刷写成功绿灯亮 3 秒后自动重启

常见问题:若 uboot 显示 page not found 或界面部分为英文,请清除浏览器缓存后重试。

注意:luci 21.02 固件概览界面加载较慢(可能因动态 DNS example 在运行),路由联网或删除动态 DNS example 后速度会恢复正常。

eMMC 频率说明(26MHz vs 52MHz)

RAX3000M 算力版 eMMC 体质较差,原厂及大多数第三方固件默认使用 26MHz,稳定性更佳。

频率读写速度稳定性
26MHz~20 MB/s稳定,推荐
52MHz~45 MB/s可能出现 I/O error,视体质而定

若尝试 52MHz 后出现 I/O error,说明 eMMC 体质不佳,更换 eMMC 成本较高,建议继续使用 26MHz 固件。

检测命令

# 查看是否有 I/O error
dmesg | grep error

# 查看当前 eMMC 频率
cat /sys/kernel/debug/mmc0/ios

编译时修改 eMMC 频率:修改以下 DTS 文件中 mmc0max-frequency 字段(仅支持 26MHz 或 52MHz):

target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-cmcc-rax3000m-emmc.dts

刷回原厂步骤

建议使用支持环境变量修改和 fdisk 的固件(如作者提供的双分区固件)执行此操作。

1. 设置启动槽

fw_setenv dual_boot.current_slot 0

2. 刷回原厂分区表

dd if=/tmp/mmcblk0_GPT.bin of=/dev/mmcblk0 bs=512 count=34
sync
fdisk /dev/mmcblk0
# 输入 w 写入

3. 还原 plugins/fwk/fwk2 分区

上传 mmcblk0p9_plugins.binmmcblk0p10_fwk.binmmcblk0p11_fwk2.bin/tmp

dd if=/tmp/mmcblk0p9_plugins.bin of=/dev/mmcblk0p9
dd if=/tmp/mmcblk0p10_fwk.bin of=/dev/mmcblk0p10
dd if=/tmp/mmcblk0p11_fwk2.bin of=/dev/mmcblk0p11

4. 格式化 data 分区(如有必要)

umount /dev/mmcblk0p12
mkfs.ext4 -L extend /dev/mmcblk0p12

格式化后在 Web 界面手动挂载 /dev/mmcblk0p12/mnt/mmcblk0p12,勾选「启用」保存应用,再创建目录:

mkdir /mnt/mmcblk0p12/ecmanager

5. 刷回原厂 uboot 和固件

上传 mmcblk0p3_fip.binmmcblk0p4_kernel.binmmcblk0p5_rootfs.bin/tmp

dd if=/tmp/mmcblk0p3_fip.bin of=/dev/mmcblk0p3
sync
fw_setenv dual_boot.current_slot 0
dd if=/dev/zero of=/dev/mmcblk0p4
dd if=/dev/zero of=/dev/mmcblk0p5
dd if=/tmp/mmcblk0p4_kernel.bin of=/dev/mmcblk0p4
dd if=/tmp/mmcblk0p5_rootfs.bin of=/dev/mmcblk0p5
dd if=/dev/zero of=/dev/mmcblk0p8
注意:出现 dd: error writing '/dev/mmcblk0p4': No space left on device 报错为正常现象,忽略即可。等待 mmcblk0p8 清空完成后断电重启。

附:挂载 mmcblk0p6 给 Docker 使用

在 Web 界面挂载点设置中,将 /dev/mmcblk0p6 挂载到 /opt,勾选「启用」,保存并应用后重启系统。

在线安装 Docker 需要约 220MB 空间。

附:单分区 vs 双分区详解

分区方案对比

对比项单分区双分区(Dual Boot)
系统分区kernel + rootfskernel/rootfs + kernel2/rootfs2
rootfs_data可选有,共用
uboot 行为固定从 kernel/rootfs 启动读取环境变量判断当前分区
固件更新目标始终写入 kernel/rootfs写入当前未在使用的分区
overlay 挂载挂载在 rootfs 剩余空间挂载到 rootfs_data 分区

混用注意事项

  • 不要混用单、双分区的 GPT 分区表和 uboot。
  • 单分区 GPT + 单分区 uboot 可以直接使用双分区固件,升级正常。
  • 双分区 GPT + 双分区 uboot 使用单分区固件时,需确保当前系统运行在 kernel2/rootfs2,再刷入单分区固件,使其写入 kernel/rootfs

查看当前启动槽:

fw_printenv | grep dual_boot.current_slot
# 或(不支持环境变量时):
strings /dev/mmcblk0p1 | grep dual_boot.current_slot
  • dual_boot.current_slot=0:当前运行在 kernel/rootfs
  • dual_boot.current_slot=1:当前运行在 kernel2/rootfs2

重要提示:目前天灵大佬的单分区 uboot(2022版)尚不支持 DHCP。

个人建议:直接使用单分区 GPT + 单分区 uboot,rootfs 分区按需设置大一些。

添加新评论