这台蒲公英 X1 Pro 在我包里待了挺久。MT7981B、512MB 内存、一个 2.5G 口一个千兆口,硬件放在两百块这个价位没什么可挑的。

原厂固件其实能用:插上中兴 U30Air 随身 WiFi,USB 共享网络是通的。但原厂系统太封闭,装不了 OpenClash 这类代理插件,能折腾的东西也少。我在恩山论坛找了几个现成镜像,本地怎么都跑不起来,也没深究是分区还是 U-Boot 的问题,索性自己编一个。

蒲公英 X1 Pro 固件改造链路

原厂固件里到底有什么

先把原厂 UBI 镜像拆开。内核是 5.4.260,文件系统里有一个叫 usbmode 的可执行文件,还有一堆放在 /lib/modules 下的 vendor 驱动。usbmode 是闭源 ELF,链接的是 glibc;OpenWrt 这边是 musl,光是这一条就跑不起来。

再看驱动。原厂的 usb-serial、option、qmi_wwan、cdc_ether 这些,其实是 MediaTek 从主线内核里带过来的,版本号 5.4.260 和第三方固件的 6.6.x 对不上,vermagic 这一关就过不去。所以“把原厂模块提取出来塞进新固件”这个思路,第一天就被我放弃了——ABI 不兼容,硬塞只会内核 panic。

真正缺的东西不是驱动,是两样:usb-modeswitch(把网卡的 CD-ROM 模式切到网卡模式)和拨号/接口配置。这两样在 OpenWrt 里都是现成的包,只是默认没装。

第一次编译:在 mt798x 分支上连踩两坑

一开始用的是社区里常见的 padavanonly/immortalwrt-mt798x-6.6 分支。配置、克隆、编译,前面都顺,卡在 target/linux 编译:

error: 'HIT_BIND_FORCE_TO_CPU' undeclared
error: 'MTK_FE_START_RESET' undeclared

翻源码才发现,这个分支给 mtk_eth_soc.c 打的厂商补丁是无条件引用 HNAT 宏的,而我的配置里没开 kmod-mediatek_hnat。把 kmod-mediatek_hnat 和 wireless-tools 加上,内核过了。

第二个坑更硬。这个分支的 WiFi 用的是闭源 mt_wifi,编译依赖 warp。warp 报了一串 WED 宏缺失,补上 CONFIG_MTK_WARP_V2、CONFIG_WARP_VERSION=2、CONFIG_WED_HW_RRO_SUPPORT 之后,warp 过了,mt_wifi 自己又倒在 PRE_CAL_SIZE_ONE_CARD、DOT11N_... 这些宏上——源码里压根没定义,看起来是版本和内核头文件对不上。这种闭源驱动的坑,继续修下去就是无底洞。

于是换路:放弃这个分支,改用官方 ImmortalWrt 24.10。官方树里是开源的 mt76,WiFi 驱动不用赌。

给官方树补设备支持

官方 24.10 没有 oray,x1-pro 这个设备,得自己写。核心是一份 DTS,几个关键点:

  • ubi 分区从 0x800000 开始,长度 0x7000000,也就是 112MB;
  • MAC 地址从 bdinfo 分区的 0xde00 读;
  • WiFi 校准数据在 Factory 分区的 0x0;
  • USB VBUS 是 GPIO9,低电平有效。

除了 DTS,还要在 target/linux/mediatek/image/filogic.mk 里加设备定义,在 02_network 里把 oray,x1-pro 归到 lan=eth1 / wan=eth0,在 platform.sh 里补 nand_do_upgrade 的分支,最后在 preinit 里把 eth1 拉起来。这些改动我都写成了脚本,换一棵树也能重放。

编译放在 VMware 里的 Ubuntu 24.04,8 核 12G。第一次全量编译大概 1 小时 20 分,大部分时间花在工具链上;后面增量就快了。

刷机:U-Boot 的布局下拉框是个陷阱

机器上刷的是 Yuzhii 的多布局 U-Boot,Web 恢复页在 192.168.1.1。上传固件之前要先选 MTD 布局,下拉里有四个:

布局 分区 能不能用
default bl2 1024k / env 512k / Factory 2048k / fip 2048k / bdinfo 512k / kpanic 2048k / ubi 114688k 和固件的 DTS 完全对得上
oray-ubi0 / oray-ubi1 双 UBI,各 57344k 固件只认单个 112MB ubi,不行
tr3000-mod-112m-x1pro 没有 bdinfo,多一个 reserved MAC 会丢,不行

选 default,上传 33.62MB 的 sysupgrade 包,页面上 MD5 显示 c4a28ea420c60735259507d24dc0f382,和本地一致,点 Update。写入加格式化大概三分钟,这期间不能断电。

U-Boot 恢复页:选择 default 布局并核对 MD5

第一次开机

重启后网线插 2.5G 口,电脑 DHCP 拿到 192.168.1.x,浏览器进 192.168.1.1,root 无密码。第一件事是设密码,第二件事是看概览:

系统概览:Oray X1 Pro / 内核 6.6.159 / ImmortalWrt 24.10

内核 6.6.159,WiFi 是 mt76 的 mt798x-wmac,双频都起来了。原厂固件里那套“WiFi 默认关闭”的习惯也带过来了,要进无线页面手动开。

插上中兴 U30Air

把 U30Air 插到 USB 口,dmesg 里能看到它先以 RNDIS 出现,几秒后断开重枚举成 CDC Ethernet:

rndis_host 1-1:1.0 eth2: register 'rndis_host' ... ZTE RNDIS device
usb 1-1: USB disconnect, device number 2
cdc_ether 1-1:1.0 eth2: register 'cdc_ether' ... ZTE CDC Ethernet Device

也就是说它是一张“免驱”网卡,不需要 qmi/comgt,直接建 DHCP 接口:

uci set network.wan3g=interface
uci set network.wan3g.proto='dhcp'
uci set network.wan3g.device='eth2'
uci commit network
uci add_list firewall.@zone[1].network='wan3g'
uci commit firewall
/etc/init.d/network restart
/etc/init.d/firewall restart

这里有个小插曲:我一开始只加了接口,忘了把它加进防火墙的 wan 区域。结果路由器自己能 ping 通外网,手机连上 WiFi 却打不开网页——LAN 到 wan3g 的转发和 NAT 都没生效。补上 firewall.@zone[1].network 之后一切正常。

接口列表:wan3g 走 eth2,DHCP 拿到 192.168.0.10

U30Air 自己也是个随身 WiFi,给下游发 192.168.0.x 的地址,网关 192.168.0.1。实测延迟 30ms 左右,刷视频、开网页都够用。

WiFi 和 OpenClash

WiFi 是 MT7981 的双频,2.4G 和 5G 各自一个 AP,加密默认 WPA2-PSK。改 SSID 和密码在“网络 → 无线”里,两个频段要分别改。

无线概况:2.4G 与 5G 两个 AP

OpenClash 是最后装的。这个插件本身不带内核,得自己选:

  • 原版 Clash:停更很久,不支持 VLESS/Hysteria2;
  • Clash Premium(TUN):收费,也不更新了;
  • Meta(mihomo):免费、协议最全、更新最勤。

我选 Meta。从 GitHub 拉了 mihomo-linux-arm64-v1.19.33,放到 /etc/openclash/core/clash_meta,再把 Country.mmdb 和 geosite.dat 补进 /etc/openclash/,core_type 设成 Meta。订阅加进去之后,Fake-IP 增强模式跑起来,面板显示 Meta 运行中。

OpenClash 运行状态:Meta 内核,Fake-IP 增强模式

现在的状态

  • 固件体积 33.62MB,比社区里那些 40MB+ 的版本小,因为没塞一堆用不上的插件;
  • overlay 64.6MB,装完 OpenClash 内核后还剩 30MB 左右;
  • CPU 温度 60°C 上下,夏天可能要加个小风扇;
  • 只配了单 WAN,mwan3 没装;哪天同时插网线和 U30Air 再折腾;
  • 4G 模块的 PPP 拨号模式没测——手上只有这台 CDC-Ethernet 的 U30Air。

文件

固件下载:蓝奏云 · x1pro-firmware-20261027.zip(含镜像、README 和校验值)

刷机前务必确认 U-Boot 布局选的是 default,以及 MD5 对得上:

文件:immortalwrt-mediatek-filogic-oray_x1-pro-squashfs-sysupgrade.bin
大小:35257134 字节(33.62 MiB)
MD5:c4a28ea420c60735259507d24dc0f382
SHA256:b7734d3d6b8df061ff9c1b5345034c3c9038b1f0bbe24f62e6430f51b94618d8

从拆固件到能上网,前后花了大概五个小时,其中一半时间耗在闭源 WiFi 驱动的坑里。如果一开始就选官方树,可能两小时就收工了。不过把设备树、分区表、U-Boot 布局这些东西搞清楚之后,以后再换别的 MT7981 机器,套路是一样的。

最后修改:2026 年 10 月 27 日
如果觉得我的文章对你有用,请随意赞赏