1 rax3000m刷机过程
在海鲜市场收的,100块,还行,但是要自己刷机。选的直接是最流行的OP路由之一,移动的rax3000m,没有别的原因,就是因为用的人多,成熟,教程多,不会轻易翻船。。。
要刷机的时候才知道,算力版和普通的区别是EMMC和NAND的区别。 不过我一直记得NAND也是不错。算力版是64G的EMMC,普通版是128MB的NAND。我买的是NAND的,日常用还是没啥区别。还是有点小后悔。。。因为差的价格也不多。据说EMMC版的可以去跑PCDN赚点小钱钱。当然,这个对我来说无所谓了,只是EMMC的可以部署边缘计算,这点还是不错。。。
(之前开发过一个任务,把NAND换成NOR,真是欲仙欲死,改了驱动之后还要改文件系统。最后是能驱动了,但是文件系统死活配置不上去。。。)
网上指导刷机的教程也很多,要区分版本。开始差点刷成EMMC的了。后面看这篇:小武手把手教你刷移动 rax3000m 教程超级简单_哔哩哔哩_bilibili
确实很详细,而且针对移动的rax3000m专门做的。
大概步骤如下:
1 开SSH-加密后
基本就是从web的配置界面下手。
是一个cfg文件,第一先:开SSH-加密后.conf。
(这里可以备份之前的移动固件,也可以不备份,随便自己)
2 刷UBoot
也是从一个cfg刷进去的。
300多K,也是加密了看不到具体内容。感觉之前移动的系统是有bug啊。
关于UBoot,可以看这篇:U-Boot简单学习(1)_u-boot porting for beginners-CSDN博客
3 就是刷OP系统。
刷完新的uboot之后,要按住侧面的按键上电,就会进入刷系统的界面。
选择最后一个bin直接刷进去就行了。 我这里用的是immortalwrt-20240201-mediatek-mt7981-cmcc_rax3000m-squashfs-factory.bin
最后就能进界面了(默认是没有密码的)
WIFI6+FEM功放确实效果不错,家里面的wifi速度快了不少。
2 OP系统
以前开发过博通的homegateway,当时是直接用的博通的SDK。openwrt之前也简单捣鼓过,所以比较一下呢。
2.1 构建
之前博通的SDK自己有一套完整的SDK,OP用的是buildroot,可以使用opkg安装包。具有feeds管理。
buildroot之前写过一点,没写完,后面有时间可能再完善。Buildroot体验(TODO)-CSDN博客
opkg就是把功能做成类似app了。如果在原厂sdk上开发,是没有这个机制的,都是直接改代码。
2.2 内核和驱动
博通SDK一般是很老的内核,3/4的内核,驱动也直接在内核。关键的wlan和交换芯片的驱动直接都是闭源的。在OP上驱动做成模块可以动态安装。当然,我是不知道社区哪里来的那么大神写驱动。。也不知道哪些驱动哪里来的。。
不过,有几点这两个是一样的,都是相对标准linux来说:
- BusyBox代替 GNU 工具集
所有基本的 shell、文件操作、文本处理等工具都由 BusyBox 提供,一个二进制里集成了数十个常用命令,节省存储空间。
BusyBox_busybox menuconfig proc-CSDN博客
- Musl/uClibc 替代 glibc
默认使用体积小、依赖少的 C 标准库,减少内存和闪存占用。
- 针对网络的优化
去掉了桌面、图形、声音、多媒体等路由器无关功能,将内核裁剪到只包含网络协议栈、文件系统驱动和路由器常用功能(如 brcm47xx、ath9k、nl80211、nf_conntrack/netfilter、wireguard 等)。
- 内核的优化
应用了一些额外的补丁,如更小的内存分配器、QoS 改进模块、B.A.T.M.A.N. 或 OLSR 等路由协议补丁。
2.3 文件系统
博通SDK一般用的JFFS2/YAFFS2镜像,OP则是用的只读 SquashFS + 可写 OverlayFS 叠加。
SquashFS一般是只读的,这样就避免的对flash的擦写提高了寿命。此外可擦写的部分可能还是JFFS2的。
我的设备分区如下:
root@OpenWrtli:~# 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: 07200000 00020000 "ubi"
分区 | 大小 (十六进制) | 实际大小 | 用途说明 |
---|---|---|---|
mtd0 | 08000000 | 128MB | 整个 SPI Flash 的总容量(spi0.0 表示 SPI 接口的第一个 Flash 芯片) |
mtd1 | 00100000 | 1MB | BL2:Bootloader 第二阶段(通常为厂商预置的引导程序,如 MediaTek 的定制 U-Boot) |
mtd2 | 00080000 | 512KB | u-boot-env:U-Boot 环境变量存储区(可配置启动参数) |
mtd3 | 00200000 | 2MB | Factory:出厂配置(包含无线校准数据、MAC 地址、设备序列号等关键信息,刷机时需保留) |
mtd4 | 00200000 | 2MB | FIP(Firmware Image Package):ARM Trusted Firmware(ATF)的镜像包,包含安全启动相关组件 |
mtd5 | 07200000 | 114MB | ubi:主系统分区(采用 UBI 文件系统,包含 OpenWrt 的 SquashFS 和 OverlayFS) |
主分区ubi的情况
root@OpenWrtli:~# 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: 912 (115802112 bytes, 110.4 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: 19
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: 551 LEBs (69963776 bytes, 66.7 MiB)
State: OK
Name: rootfs
Character device major/minor: 249:2
-----------------------------------
Volume ID: 2 (on ubi0)
Type: dynamic
Alignment: 1
Size: 309 LEBs (39235584 bytes, 37.4 MiB)
State: OK
Name: rootfs_data
Character device major/minor: 249:3
由此可见UBI 分区包含 3 个逻辑卷:
(1)Volume 0: kernel
参数 | 值 | 说明 |
---|---|---|
类型 | dynamic(动态卷) | 可动态调整大小 |
大小 | 29 LEBs ≈ 3.5MiB | 存储 Linux 内核镜像(压缩的 fit 或 zImage ) |
设备节点 | /dev/ubi0_0 | 可通过 dd if=/dev/ubi0_0 of=/tmp/kernel.bak 备份 |
(2)Volume 1: rootfs
参数 | 值 | 说明 |
---|---|---|
类型 | dynamic | |
大小 | 551 LEBs ≈ 66.7MiB | 存储 SquashFS 只读系统(挂载为 /rom ),包含 OpenWrt 基础文件 |
设备节点 | /dev/ubi0_1 | 只读,不可直接修改 |
(3)Volume 2: rootfs_data
参数 | 值 | 说明 |
---|---|---|
类型 | dynamic | |
大小 | 309 LEBs ≈ 37.4MiB | 存储 OverlayFS 可写层(挂载为 /overlay ),用户配置和安装的软件在此 |
设备节点 | /dev/ubi0_2 | 实际路径:/overlay/upper (修改的文件)和 /overlay/work (临时文件) |
root@OpenWrtli:~# mount | grep overlay
/dev/ubi0_2 on /overlay type ubifs (rw,noatime,assert=read-only,ubi=0,vol=2)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
在这里可以看出overlay的分区是用的ubi文件系统。
SDK升级一般是webui。OP相对要灵活一些,可以uboot升级,也可以直接用dd命令,当然,也可以用webui。
2.4 运行框架
原厂SDK一般还是依赖原始的linux机制,比如/etc/init.d/rcS。这方面OP做了很多革新。
专用轻量级 procd(进程 1),并集成 Watchdog、热插拔等。统一的 ubus RPC/事件总线,模块解耦、热点配置即时生效。统一的 UCI(Unified Configuration Interface) 配置框架。
有些思想感觉有点类似安卓,安卓在这几个方面也是做了深度定制,比如binder,全局配置。当然,谷歌的实力更强,改的更多。这方面可以看一下之前的文章。Android学习1 -- 从嵌入式Linux到嵌入式Android-CSDN博客
procd + ubus + UCI基本上就是OP的核心创新了。。。
2.5 网络
原厂SDK一般使用原始linux的。OP上因为管理使用了UCI,所以改动很多。netifd(网络守护进程)配合 UCI 动态管理接口,firewall3(基于 nftables)与 UCI 配置一体化等等。。。
两者差不多的是都增加了很多网络和路由工具。比如:dnsmasq(DNS/DHCP)、odhcpd(IPv6 DHCP)、firewall3(基于 nftables)、netifd(网络接口守护进程)等。
2.6 WebUI
之前做博通SDK的时候,就是一个web服务器,所有代码都是那个服务器里面。C和html,JavaScript混写。。。OP上直接用的是LuCI(Lua + uHTTPd),而且社区有很多插件。
3 MT7981B
以前我做路由器的时候,好像还没怎么听说过MTK。今天查了一下,原来是收购了以前的Ralink。不过以前Ralink也不怎么样。当时出风头的还是博通和Conexant。
好吧,没想到现在这么牛逼带闪电了。。。
简单学习一下这个IC。。。
datasheet:https://one.openwrt.org/hardware/MT7981B_Wi-Fi6_Platform_Datasheet_Open_V1.0.pdf
相对传统的SOC,加强的部分如下:
1. MAC(媒体接入控制)
MAC 在图中标记为 "MAC 1024QAM OFDMA BW40/BW160C 2SS/2SS"。这表明该芯片支持 1024QAM(高阶调制)、OFDMA(正交频分多址)和 宽带支持(40MHz 和 160MHz)。这些技术可以显著提升数据传输速率,尤其是在高负载或多用户情况下。
2. Wi-Fi 6(802.11ax)
Wi-Fi 6 (802.11ax) 是图中标明的 2x2 2G 和 3x3 5G 接口。它们支持 高效的频谱利用、多用户并发(MU-MIMO)、OFDMA 和 高数据传输速率。这些都是为了支持更高效的无线网络连接,尤其在高密度用户场景中,能显著降低延迟并增加带宽。
3. WO Engine(无线优化引擎)
WO Engine 表示存在专用的硬件引擎来优化无线网络的性能。这可能涉及对无线信号的增强处理、流量管理、干扰消除等,以提升无线性能。
4. PPE/HNAT/HQoS
PPE(Packet Processing Engine)、HNAT(Hardware NAT)、HQoS(Hardware QoS) 都是硬件级加速技术,用于处理网络包和流量管理。
PPE 提供高效的包处理能力,提升整体网络吞吐量。
HNAT 硬件加速网络地址转换(NAT),提高数据包的转发速度。
HQoS 提供硬件支持的服务质量管理(QoS),确保在不同应用和数据流之间平衡带宽,保证重要流量的优先级,如视频、语音等实时应用。
5. Gigabit Ethernet PHY
Gigabit Ethernet PHY x1 表示该芯片集成了一个千兆以太网物理层接口,用于高速有线网络连接。
6. 2.5G/GMII接口
2.5G/GMII 接口支持高速的 2.5Gbps 网络接口,这是一个针对现代高速宽带应用的优化,适用于需要高速数据传输的环境。
下面是一个系统框图,不过是7986的(MediaTek - WikiDevi.Wi-Cat.RU)
在系统中,对软件来说。
WIFI的部分,MTK好像WIFI5及以下的驱动都是开源的,自己也可以用来学习。但是在WIFI6,这部分就是闭源了,直接给的bin文件。
千兆或者2.5G以太网,这部分也要单独的驱动。
硬件加速引擎(PPE/HNAT/HQoS)。这部分驱动好像是闭源的。这些都是直接集成在内核,对一般的用户直接不可见了。
安全的部分。就是第一个图的Security部分,这部分也是需要单独驱动。
好了,以后有时间再多多看看吧。。。