2023年折腾笔记RAX3000M_eMMC刷UBOOT指南

推荐方案:直接使用 单分区 GPT + 单分区 uboot,详见文末说明。
硬件规格
| 项目 | 参数 |
|---|---|
| 处理器 | MT7981B |
| 内存 | DDR4 512M |
| 无线芯片 | MT7976CN |
| 交换芯片 | MT7531 |
| 闪存(普通版) | 128M SPI-NAND |
| 闪存(算力版) | 64G eMMC |
关于 DDR 改内存:目前开源 ATF 支持 DDR3 最高 512M,DDR4 最高 1G。
版本区分方法
普通版(NAND)
- 盒子及机身背部标签无
EC字样 - 生产日期:
20230515、20230606基本均为普通版 - 机身底部 PCB 右上角印丝结尾为
P3
算力版(eMMC)
- 盒子及机身背部标签有
EC字样 - 生产日期:
20230626、20230703基本均为算力版 - 机身底部 PCB 右上角印丝结尾为
P1
步骤 0:开启 SSH
- 导出路由器配置文件,修改其中的
rc.local以添加开启 SSH 的命令,同时修改shadow文件清除 root 密码。 - 也可直接使用社区提供的配置文件
RAX3000M_eMMC_config_file-Telnet+SSH+Luci.conf,导入后等待重启应用即可开启 SSH。 使用 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 文件中 mmc0 的 max-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 02. 刷回原厂分区表
dd if=/tmp/mmcblk0_GPT.bin of=/dev/mmcblk0 bs=512 count=34
sync
fdisk /dev/mmcblk0
# 输入 w 写入3. 还原 plugins/fwk/fwk2 分区
上传 mmcblk0p9_plugins.bin、mmcblk0p10_fwk.bin、mmcblk0p11_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/mmcblk0p114. 格式化 data 分区(如有必要)
umount /dev/mmcblk0p12
mkfs.ext4 -L extend /dev/mmcblk0p12格式化后在 Web 界面手动挂载 /dev/mmcblk0p12 到 /mnt/mmcblk0p12,勾选「启用」保存应用,再创建目录:
mkdir /mnt/mmcblk0p12/ecmanager5. 刷回原厂 uboot 和固件
上传 mmcblk0p3_fip.bin、mmcblk0p4_kernel.bin、mmcblk0p5_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 + rootfs | kernel/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_slotdual_boot.current_slot=0:当前运行在 kernel/rootfsdual_boot.current_slot=1:当前运行在 kernel2/rootfs2
重要提示:目前天灵大佬的单分区 uboot(2022版)尚不支持 DHCP。
个人建议:直接使用单分区 GPT + 单分区 uboot,rootfs 分区按需设置大一些。