RAX3000M搞机目录
注意:这是EMMC版本,NAND版本有一些步骤可以参考,但涉及到存储擦写操作请谨慎!! EMMC 和 NAND的开启ssh步骤完全相同,都是导出配置->解密->修改配置->加密->导入配置
刷机整体步骤:开启ssh -> 刷uboot -> 进入uboot刷固件 -> 结束
1 如何判断自己是EMMC还是NAND
- 网上主流的说法是看路由器后面的标签来区分,找到路由器后面标签偏上的"制造商“,找到上面的字母CH:
- NAND: 只有CH
- EMMC:CH后面还跟着EC
- 但是这种方法不是绝对的,判断的唯一标准是开启ssh后,输入
df -h
命令查看你存储空间的大小,如果有一个50多G的分区,则说明是EMMC,否则是NAND
注意,此方法仅针对于出厂固件,有些已经刷过机的固件,可能改过分区表,导致有些空闲空间无法显示。请自行安装 fdisk 判断
2 开启SSH
原理是通过修改配置的方式来开启ssh,由于后面生产的固件,配置文件可能会被加密,因此我们需要解密后才能修改配置文件,然后按照同样的加密方式生成新的配置文件。
注意:不要随便导入别人的配置文件,有的人版本和你不一样,导入了可能出错!最好就是自己导出配置文件,自己修改,自己打包再导入
- 参考1: https://blog.csdn.net/weixin_45357522/article/details/135342315
- 参考2: https://blog.iplayloli.com/rax3000m-router-flashing-explanation-nanny-tutorial-easy-to-get-started.html
2.1 开启ssh流程图
2.2 导出配置
配置管理->导出配置文件
2.3 解密
正常解密后你会获得一个etc目录,里面有路由器的配置文件
|
|
如果你是6月份生产的,解密可能会报错,因为早期的版本是没有对配置文件进行加密的。
|
|
对于这种未加密的配置,可以直接使用tar -xvzf
解压就可以得到配置文件
|
|
2.4 修改配置
- 修改/etc/shadow,去掉root用户的密码,这样ssh进入系统时,不用root密码了。具体做法是: 将两个冒号间的密码删除然后保存
- 修改/etc/config/dropbear开启ssh服务
2.5 加密
注意:如果你的配置文件是通过openssl解密得到的(例如1214版本),则需要重新加密后才能导入。
需要openssl加密的版本(1214生产):
|
|
不需要加密的版本(6月份生产)
|
|
2.6 导入配置
配置管理->导入配置文件,选择我们刚修改好的cfg_export_config_file_new.conf
,重启后就能使用root用户通过ssh访问了,无需密码。
2.7 进入ssh备份
|
|
然后你可以通过winscp连接上路由器,进入/mnt/mmcblk0p12下载这些备份文件到电脑以防变砖的时候恢复。
3 刷入uboot
uboot是用来刷入固件的,如果你uboot都刷错了那路由器就成砖了,因此以下步骤需要谨慎!网上有很多人用mtd命令刷uboot,但是我手上这台机器则报错
|
|
3.1 方法1:hanwckf的uboot
缺点:无法刷入稍微大一点的固件,原因是没有更新分区表。由于没有找到于hanwckf的uboot相关的刷分区表命令,不敢乱刷分区表,而是仅仅更新了uboot。
- 下载链接: https://github.com/hanwckf/bl-mt798x/releases/tag/20240123
- 检查md5,确保文件一致
|
|
- 刷入uboot命令
请注意,下面命令是刷入的emmc版本的uboot,nand版本请不要乱刷!此步刷错必成砖!
|
|
请注意,输入以上命令后,请仔细对比结果是否一致,如果不一致,先不要重启,不要重启!保留错误信息,立即寻求帮助!QQ群:514064260
- 进入uboot
- 断开电源,按住reset不要松开,插上电源,等待红灯亮起后,再松开复位键
- 路由器的LAN口连接电脑
- 电脑修改IP地址为192.168.1.2, 默认网关192.168.1.1
- 浏览器打开192.168.1.1
3.2 方法2:immortalwrt的uboot(推荐)
不是说immortalwrt的uboot只能刷immortalwrt的刷机包,这个uboot可以刷大部分的
.bin
格式的刷机包,例如lede的固件也是可以刷的,其他的刷机包自行测试。
- 参考: openwrt RAX3000M官方教程 https://github.com/openwrt/openwrt/pull/13513
- 参考: immortalwrt刷入教程
- uboot地址: Developer drive of ImmortalWrt - /uboot/mediatek
- 备用地址: https://wwi.lanzoup.com/iW3FT1pj2mpa
- (没刷过这个链接的)immortalwrt官网连接: Index of /releases/23.05.0/targets/mediatek/filogic/ (immortalwrt.org)
3.2.1 下载uboot
下载后,把uboot上传到路由器的/tmp/uboot
目录下,ssh进去后,执行cd /tmp/uboot
该目录,对三个文件分别输入输入md5sum xxx.bin
确保文件的md5一致,以免刷入损坏的文件,如果md5不一致,请停止操作,重新下载
|
|
对比你的md5结果是否和以下结果相同
|
|
3.2.2 刷入uboot
请注意,下面命令是刷入的emmc版本的uboot,nand版本请不要乱刷!此步刷错必成砖!
|
|
请注意,输入以上命令后,请仔细对比结果是否和下面图片一致,如果不一致,先不要重启,不要重启!保留错误信息,立即寻求帮助!QQ群:514064260
查看分区情况。
|
|
如果没有parted命令,则先安装
|
|
分区前,可以看到rootfs大小是64M,而且有2个rootfs,这个空间决定了你刷机包上限的大小
分区后,就只有一个rootfs了,大小变成了629M
进入uboot方式和方法1一样。
parted命令报错不要紧,只要刷uboot的命令和结果正确了,就可以按步骤进入uboot刷固件,到时候再安装parted命令查看分区结果。
3.2.3 解释 dd if=mt7981-cmcc_rax3000m-emmc-gpt.bin of=/dev/mmcblk0 bs=512 seek=0 count=34 conv=fsync
该命令执行了使用dd
这一Unix和类Unix操作系统中的常用命令,进行磁盘写入操作。下面将一一解释命令中的每个组件:
dd
:这是一个用于转换和复制文件的程序,通常被用于处理磁盘镜像文件或创建备份。if=mt7981-cmcc_rax3000m-emmc-gpt.bin
:if
代表输入文件(input file),这里指定了要被复制到目的设备上的源文件mt7981-cmcc_rax3000m-emmc-gpt.bin
。of=/dev/mmcblk0
:of
代表输出文件(output file),指定了目的地设备。/dev/mmcblk0
通常表示Linux环境下的第一个MMC设备(比如一个内嵌的eMMC存储)。bs=512
:bs
代表块大小(blocksize),指定了读取和写入时每个块的大小,这里设置为512字节。每次读取和写入操作处理的数据量是512字节。seek=0
:这一参数指定了在开始写入前应该跳过目的文件(of
指定的设备)开始的多少个bs
大小的块。seek=0
表示不跳过,直接从开头开始写入。count=34
:这一参数指定了要复制的块数量。结合上面的bs
参数,这意味着此命令将写入34 * 512 = 17408字节的数据。conv=fsync
:conv
代表转换,fsync
意味着写入每个块后,dd
命令会使用fsync()
系统调用,确保将缓存中的数据立刻刷写到磁盘中。
总结起来,这个dd
命令的作用是将名为mt7981-cmcc_rax3000m-emmc-gpt.bin
的文件的前17408字节拷贝到设备/dev/mmcblk0
,这通常是为了写入一个特定的磁盘镜像或是引导记录等重要数据到一个存储设备上。
3.2.4 解释 echo 0 > /sys/block/mmcblk0boot0/force_ro
这条命令在Linux系统中用来修改内核系统参数或者某些设备的设置。具体来说,此命令的各部分含义如下:
echo
:是一个常用的shell命令,用于在屏幕上显示一段文字,或者将文字写入到文件中。0
:这是echo
命令输出的内容。在这个上下文中,数字0
通常被用来表示禁用或关闭一个选项。>
:这是重定向操作符。它会将左侧命令的输出(在这个例子中是echo
命令的输出)重定向到右侧指定的文件或设备。/sys/block/mmcblk0boot0/force_ro
:这是一个路径,指向sysfs(一种虚拟文件系统)中的一个文件。在Linux中,sysfs用于导出内核对象的信息,允许运行中的系统通过用户空间的变化影响内核。mmcblk0boot0
指的是一个特定的eMMC存储设备的引导分区,而force_ro
文件允许用户将该分区设置为只读(ro
)或可读写模式。
所以,当执行echo 0 > /sys/block/mmcblk0boot0/force_ro
命令时,它实际上是在将数字0
写入到force_ro
文件。这个操作会告诉系统不要强制将mmcblk0boot0
这个eMMC引导分区设为只读模式,这允许在需要的时候对其进行修改。这种修改可能是为了更新引导加载程序或者对引导分区进行其他形式的写入操作。
3.2.5 解释 dd if=/dev/zero of=/dev/mmcblk0boot0 bs=512 count=8192 conv=fsync
这条 dd
命令用于将数据写入Linux系统中的存储设备,命令各部分具体解释如下:
dd
是“data duplicator”的缩写,是一个非常强大的Unix命令行工具,用于转换和复制文件或设备内容。if=/dev/zero
中的if
代表输入文件(input file)。/dev/zero
是一个特殊的文件,它会不断提供无限的零(0x00)值。相当于输入源是「无限的0」。of=/dev/mmcblk0boot0
中的of
指输出文件(output file),在这里表示要写入的目标设备。/dev/mmcblk0boot0
可能是系统中某个eMMC存储设备的引导分区。bs=512
中的bs
表示块大小(block size),单位是字节。每次读取和写入操作会处理512字节的数据。count=8192
这部分指明了要复制的块的数量,与bs
结合,意味着命令会写入8192 * 512 = 4194304
字节,即4MB的数据。conv=fsync
指的是在写入每个块后,强制直接将内存中的缓冲数据同步到硬盘上,确保所有数据正确的被写入到设备中。
整个命令的作用是,向/dev/mmcblk0boot0
这个eMMC存储设备的引导分区写入4MB的全零数据,这通常会将该存储区域清除。这种操作常用于清理分区的内容,以便重新格式化或重新使用存储区域。
进入uboot方式和方法1
3.3 方法3: openwrt官网uboot
参考: https://github.com/openwrt/openwrt/pull/13513#issue-1909808957
uboot来源:官网下载或者自己编译固件时会生成。
官网的uboot不带web界面,只能刷入
.itb
格式的固件,和第三方uboot不兼容如果希望修改root分区大小,请在编译镜像时候在Target Images -> Root filesystem 处修改,每次修改大小都要重新刷GPT,否则不生效。
请注意,下面命令是刷入的emmc版本的uboot,nand版本请不要乱刷!此步刷错必成砖!
- 刷入GPT分区(从0~17408)
|
|
- 擦写bl2分区
|
|
- 写入新的uboot
|
|
请注意,输入以上命令后,请仔细对比结果是否和下面图片一致,如果不一致,先不要重启,不要重启!保留错误信息,立即寻求帮助!QQ群:514064260
4 刷入openwrt
自用固件: https://www.right.com.cn/forum/thread-8349807-1-1.html
4.0.1 参考:
- 官网教程: https://openwrt.org/docs/guide-user/installation/generic.flashing.tftp
- 油管教程: https://www.youtube.com/watch?v=7UIX9v2oV58
- 教程: https://www.1234f.com/sj/technique/xxzl/20231108/560.html
- 视频教程: https://www.bilibili.com/video/BV1dj411b7yW/?spm_id_from=333.337.search-card.all.click&vd_source=cdd8cee3d9edbcdd99486a833d261c72
4.1 官方openwrt
注意:官方版本的固件只能由官方的uboot刷入,和第三方固件不兼容。
- 参考: itb 格式怎么刷? https://www.right.com.cn/forum/thread-8316238-1-1.html
4.1.1 重启路由器
刷入openwrt的官方uboot后,只需要断开电源,按住reset再插上电源重启即可,路由器会等待tftp服务器上传固件。
4.1.2 设置电脑IP地址
- 设置静态地址 192.168.1.254(注意,一定是1.254而不是别的ip地址)
- 网关和DNS填入192.168.1.1
此时电脑网线连接路由器的LAN口,打开powershell输入ping 192.168.1.1
应当有回应,否则表明你路由器没有成功连接电脑或者路由器没有进入uboot模式
|
|
4.1.3 打开 tftp服务器
把openwrt-mediatek-filogic-cmcc_rax3000m-initramfs-recovery.itb
格式文件放在和tftp服务器相同的目录。如果不是这个名称,手动修改一下。过一会就会自动上传固件了。
4.1.4 进入路由器后台
点击转到固件升级
选择openwrt-mediatek-filogic-cmcc_rax3000m-squashfs-sysupgrade.itb
上传升级
刷完之后会重启一次,如果发现仍然在 initramfs恢复系统模式,则点击系统
->重启
-> 执行重启
即可
23.05.2 一些使用的问题和解决方案-> index.zh-cn
4.2 lede
进uboot刷即可,但是hanwckf的uboot无法刷入稍微大一点的固件(70M左右),40兆左右的固件则可以刷入,是因为刷h大的uboot步骤没有更新分区表,导致了分配给刷固件的空间有限。因此建议刷immortal的uboot。
4.3 immortalwrt
直接进uboot刷即可.
5 利用剩余的内存
5.1 分区
刷好固件后,发现有50多G的空间不见了,这是因为分区表变了,有一部分空闲空间未分配,你可以通过cfdisk命令创建新分区。
|
|
创建分区
|
|
找到最下面的Fress Space,选择New会自动分配最大内存,然后回车
则创建了一个56.9G大小的新分区,光标移动到Write然后输入yes,回车,然后键盘按下q
退出
5.2 格式化
安装mkfs.ext4
命令包
|
|
格式化我们新创建的分区
|
|
5.3 挂载
如果你的固件安装了automount,后面的挂载步骤都不需要看了。过一会就会自动挂载了,没有挂载则重启后再试试。安装方法是去
系统
->软件包
,点击更新软件列表,然后搜索automount
点击安装。
首先检查是不是被自动挂载了,输入lsblk
,在NAME
列找到刚刚创建并格式化的分区,这里对应的是mmcblk0p7
,对应的MOUNTPOINTS
那一列如果为空,表示尚未挂载。比如下面的命令表示mmcblk0p7还没有挂载。
|
|
如果你没有lsblk命令,也可以用df -h
或者mount
命令检查。
|
|
df命令的输出中没有找到mmcblk0p7
,说明没挂载,mount命令同理。
|
|
尝试手动挂载到指定目录,例如我想挂载到/mnt/mmcblk0p7
,则需要先创建该文件夹。你想挂载到什么目录都可以,前提是需要创建该挂载路径。
|
|
执行手动挂载命令,命令格式: mount 设备 路径
,例如把/dev/mmcblk0p7
挂载到 /mnt/mmcblk0p7
的命令如下
|
|
然后再输入lsblk
检查,可以看到NAME
列中的mmcblk0p7
,其对应的MOUNTPOINTS
列多了一行路径
|
|
df命令检查,可以看到最后一行的Filesystem列多了/dev/mmcblk0p7
,后面的Mounted on表示挂载到的路径
|
|
mount命令检查,可以看到最后一列 /dev/mmcblk0p7 on /mnt/mmcblk0p7
|
|
这种手动挂载的方式会在每次重启后失效。这里挂载的目的是为了测试该分区是否能成功挂载,为了让重启也生效,我们需要借助一些自动挂载的工具。
- 工具1:在系统->软件包,先更新软件列表,然后搜索automount并安装, 一般来说固件如果装了automount会自动挂载,装好后没有自动挂载重启一下试试。
- 工具2:web界面找到挂载点挂载即可,但是这种挂载方式有时候会抽风,不知道为什么
6 插件下载地址
有些插件依赖安装比较麻烦,不一定都能安装上。
7 如何手动 安装docker到移动硬盘
如果你是emmc,或者nand经过了扩容,建议直接安装luci-app-dockerman,而不是手动安装docker二进制文件
- 测试环境:ImmortalWRT 23.05.1
7.1 官网对系统的要求
- 64位系统
- Linux内核版本>=3.10
iptables
version 1.4 or higher(实际上也可以用nftables)git
版本>=1.7ps
命令可用, 通常由procps
包提供- XZ Utils >= 4.9 (啥来的)
- A
properly mounted
cgroupfs
hierarchy; a single, all-encompassingcgroup
mount point is not sufficient. See Github issues #2683, #3485, #4568). (没看懂)
移动硬盘请格式化为ext4格式,不要ntfs,对Linux兼容性不好,不建议使用u盘,速度太慢,影响docker运行效率。
7.2 下载 docker二进制文件
假设移动硬盘挂载到了/mnt/sda1
, 这里创建一个名称为rax3000m_docker
的目录
|
|
下载docker二进制文件(这种下载方式巨慢,不如手动下载后放进u盘)
|
|
假如下载中途断掉了,文件可能会损坏,因此需要确认一下md5是否一致,以保证文件的完整性
|
|
下载后,使用tar
命令解压(如果解压失败,那就自己先解压出docker文件夹后放进去)
|
|
解压结果
|
|
7.3 添加环境变量和存储路径
我们把这堆命令放到环境变量,编辑终端的配置文件
|
|
添加一行
|
|
保存后,执行以下命令使得当前终端可以使用dockerd命令
|
|
创建data-root,镜像文件会下载到这里
|
|
7.4 启动docker守护进程
输入dockerd
启动docker守护进程,发现iptables报错了
|
|
则指定禁用iptables即可
- docker命令行参考 https://docs.docker.com/reference/cli/dockerd/
- 配置参考 https://docs.docker.com/config/daemon/
|
|
启动成功,此时守护进程开启,按下Ctrl+C或者关掉终端,则会关闭守护进程
|
|
如果要后台运行守护进程,则在命令后面加上&
符号
|
|
7.5 测试运行镜像
打开新的终端(注意别把守护进程关了)测试一下镜像
|
|
报错了
|
|
加上参数--net=host
把网络模式改为host模式即可
24版本的docker有bug,必须使用host网络,否则无法访问
|
|
8 扩容overlays(emmc没必要)
扩容后,你的系统将和磁盘共存亡,一旦磁盘挂掉,只能重新刷机,请确保磁盘的稳定性,不建议使用机械硬盘。
8.0.1 插入u盘,格式化成ext4
|
|
如果没有这个命令,就先安装
|
|
如果报错/dev/sda1 is mounted; will not make a filesystem here!
,说明你u盘被自动挂载了,先取消挂载
|
|
然后重新执行
|
|
他如果问你是否继续,输入y后回车即可。此时u盘成功格式化成ext4格式
8.1 挂载U盘
创建挂载点
|
|
挂载
|
|
8.1.1 复制原来的/overlay/*
到u盘
|
|
如果没有/overlay,看看是否在/rom/overlay
|
|
复制成功后,可以在/mnt/sda1
看到upper和work文件夹
8.2 重新挂载u盘到/overlays
取消挂载
|
|
挂载到/overlay
|
|
挂载前:
挂载后
8.3 进入web界面挂载
- 为了让系统自动挂载,可以在web界面设置挂载点,这样重启后仍然保留挂载,如果没有找到
挂载点
,则去软件包那里搜索block-mount
安装(注意先更新软件列表) - 根据uuid选中你的u盘,作为外部overlay使用,然后点击保存&应用即可。
9 如何手动安装istore
9.1 更新仓库
|
|
9.2 下载脚本
开科学上网后再下载,否则可能失败。
|
|
如果实在下载不了,则手动打开 脚本地址,复制页面的内容新建的文本文档里面
|
|
粘贴页面上的内容到istore-reinstall.run
,这里我把脚本复制下来了(注意,该脚本可能会随着页面更新而内容不同,请以网站上的内容为准)
|
|
9.3 执行安装脚本
|
|
成功日志
|
|
此时打开路由器后台web界面可以看到多了个istore选项栏.
注意:istore有些插件依赖docker,对于24版本的docker请勾选上host network,否则会无法访问
10 ipv6中继
11 openclash
如果发现无法启动openclash,可能缺少内核clash,需要安装。
11.1 安装内核方法
11.1.1 方法1: 修改github地址
覆写设置->修改github地址,随便选一个,然后点击启动openclash会自动下载安装
11.1.2 方法2: 手动下载并上传到路由器
RAX3000M选择
clash-linux-armv8.tar.gz,解压后,上传到/etc/openclash/core/
目录下,给予执行权限
|
|
有时候你会发现你自己没上传,但是这个目录里面已经有了clash文件,而web界面仍然启动失败,可能因为这个文件是损坏的,验证方法就是手动执行一下 ./clash -v
正常结果是
|
|
异常情况 Bus error
,这时候你就要删掉这个损坏的clash文件,放入自己下载的文件。
11.2 开启openclash无法登录游戏
- 参考: https://github.com/vernesong/OpenClash/issues/107
- 解决:运行模式使用TUN模式
12 USB网络共享(iOS未成功)
参考
- https://www.cnblogs.com/cogito/p/it_tools16.html
- https://openwrt.org/docs/guide-user/network/wan/smartphone.usb.tethering
12.1 安装内核模块支持
12.2 USB网络共享-RNDIS协议
|
|
12.3 usb驱动
|
|
12.4 手机开启USB网络共享
小米手机:系统设置->更多连接方式->USB网络共享。如果该选项是灰色的,要么是你的线有问题,要么是驱动没安装好,请到官网教程相关信息。
12.5 网页添加网络设备
防火墙分配区域到WAN点击保存并应用
后,过几秒可以看到设备获取到了ip地址,此时就可以上网了。
13 其他问题
13.1 docker程序的端口无法打开
docker 24.0.5版本可能无法正常使用默认的bridge模式,需要切换成host模式,例如alist,官网给出的运行命令是
|
|
会发现打不开 http://192.168.1.1:5244 , 需要手动添加参数 --network=host
来使用宿主机模式的网络。
- 注意端口可能会冲突,5244不能被系统提前占用
- 使用host网络模式不再需要指定-p参数。
|
|
13.2 docker pull提示空间不足
下面方法任意选一种即可,注意先在Docker->概览处停止docker,然后再改配置。改完后再启动docker
13.2.1 方法一:luci界面上修改docker根目录
找到Docker->配置,把Docker根目录改到空间大的目录
13.2.2 方法二:直接修改dockerd配置
编辑 /etc/config/dockerd
,找到data_root
,修改到空间大的目录
|
|
13.3 方法三:修改dockerd启动参数(仅适合手动下载dockerd运行的用户)
前面我们讲到如何手动安装dockerd,在启动的时候加一个参数--data-root
即可
|
|
13.4 istore安装的插件打不开
移除插件,勾选host网络后重新安装
13.5 ntfs无法挂载
- 卸载
ntfs3-mount
,此脚本实际上就是一行代码mount -t ntfs3 -o iocharset=utf8 "$@"
,和ntfs-3g-utils
冲突,我们要用到后者 - 又因为
automount
依赖于ntfs3-mount
,因此也要卸载automount
,卸载automount
后连ext4
也无法自动挂载了。
|
|
安装ntfs-3g-utils
|
|
挂载到/mnt/sda1
|
|
使用 ntfs-3g 挂载报错
|
|
解决:使用ntfsfix
|
|
然后再次挂载
|
|
仍旧不行,则用电脑使用Diskgenius重新格式化成ntfs。(最好用ext4格式,稳定一点)
13.6 找不到无线设置选项?
- bug反馈: https://github.com/immortalwrt/immortalwrt/issues/1201
- emmc设备安装了autosamba会出现此bug,删掉它即可。系统->软件包->过滤框输入 autosamba,找到autosamba并删掉。