基于 ImmortalWrt 深度定制 · 专为 5G CPE、Wi-Fi 路由器与软路由量身打造的自动化云编译生态
全面适配 Hiveton H5000M 5G CPE(MT7987A + MT5700M)、AirPi AP3000M(MT7981B)与通用 X86_64 架构设备
🌐 在线固件下载工坊 / 落地页官网:https://lianxia233.github.io/OpenWRT-CI/
- ⚡ 多源码与架构深度融合:H5000M / AP3000M 基于稳定验证的
VIKINGYFY/immortalwrt(owrt) 源码构建,X86_64 直接对接immortalwrt/immortalwrt官方master主线分支,兼顾硬件专有驱动与前沿特性。 - 📶 双模组生态可选:支持 鼎桥 MT5700M 5G 模组(方案 A
MT5700M完整版 / 方案 BMT5700Rust 单包版)与 广和通 Fibocom FM350-GL 模组,互斥隔离、防止底层驱动冲突。 - 🧭 NetWiz 向导式配网:集成 NetWiz 现代配置向导家族,零门槛三步完成 5G / 有线网络接入,配备故障自愈守护与看门狗。
- 🛠️ AP3000M 射频自动恢复:集成出厂校准 EEPROM 自动灌装套件,首次开机自动提取网卡 MAC 并修正 5GHz 频宽,彻底解决 factory 分区缺失 Wi-Fi 不工作的通病。
- ❄️ 硬件级风扇温控与网络双链路切换:CPU + 模组双温区轮询,支持 PWM 阶梯温控调速;多网络模式毫秒级故障倒换。
- 🚀 全面预置加速与轻 NAS 能力:内核层集成
kmod-cryptodev与kmod-tls硬件加速,原生支持 NVMe 固态硬盘挂载、BTRFS 与 Samba4 高速共享,内置 Tailscale 与 EasyTier 异地组网。
本项目提供清晰的产品分流结构,各机型除基础母配置外,提供 FM350 变体 与 NetWiz 向导家族:
| 变体系列 | 适用机型 | 核心特色组件 | 模组方案 (MT Mode) | 典型应用场景 |
|---|---|---|---|---|
| 基础母配置 | ||||
H5000M-WIFI-YES |
H5000M | 5G 模组控制(可选)+ 风扇温控 + 多网切换 | 按需选择* | 标准 5G CPE 用户、高性能蜂窝路由 |
AP3000M |
AP3000M | 5G 模组控制(可选)+ 风扇控制 + 多网切换 | 按需选择* | 双频 Wi-Fi 6 无线路由、移动热点 |
X86 |
X86_64 | Docker 容器生态 + 多网切换 | 按需选择* | 工控机 / 软路由 / 虚拟机 / All-in-One |
| FM350 变体 | ||||
*-FM350 |
H5000M / AP3000M / X86 | 母配置 + luci-app-fm350(FM350-GL 模组管理) |
无 (留空) | 加装广和通 FM350-GL 模组的设备 |
| NetWiz 向导家族 | ||||
*-NETWIZ-MT5700 |
H5000M / AP3000M / X86 | 母配置 + luci-app-netwiz + MT5700 方案 |
MT5700 |
初学新手、向导式配网 + 5G(Rust 方案 B) |
*-NETWIZ-MT5700M |
H5000M / AP3000M / X86 | 母配置 + luci-app-netwiz + MT5700M 方案 |
MT5700M |
初学新手、向导式配网 + 5G(经典方案 A) |
*-NETWIZ-FM350 |
H5000M / AP3000M / X86 | 母配置 + luci-app-netwiz + FM350 方案 |
无 (留空) | 初学新手、向导式配网 + FM350 模组 |
| 自用配置 | ||||
H5000M-WIFI-YES-NETMONITOR |
H5000M | 母配置 + 网络监控 netmonitor + 每日签到 taygedo |
MT5700(固定) |
作者个人测试使用,独立归组 |
* 注:基础母配置本身不捆绑特定模组插件,编译时通过 MT Mode 下拉选项(
MT5700M/MT5700/NONE)按需动态叠加。
| 集成插件组件 | 基础母配置 | FM350 变体 | NetWiz-MT5700 | NetWiz-MT5700M | NetWiz-FM350 | 自用配置 |
|---|---|---|---|---|---|---|
多网智能切换 h5000m-netmode |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
5G 模组管理 mt5700(方案 B · Rust) |
🟡 可选 | — | ✅ | — | — | ✅ |
5G 模组管理 mt5700m(方案 A · 经典) |
🟡 可选 | — | — | ✅ | — | — |
FM350 模组管理 fm350 |
— | ✅ | — | — | ✅ | — |
NetWiz 配网向导 netwiz |
— | — | ✅ | ✅ | ✅ | — |
网络监控 netmonitor |
— | — | — | — | — | ✅ |
每日签到 taygedo |
🟡 可选 | 🟡 可选 | 🟡 可选 | 🟡 可选 | 🟡 可选 | ✅ |
在线升级 online-upgrade |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
硬件风扇温控 h5000m/airpi-fancontrol |
H5000M / AP3000M | 包含 | 包含 | 包含 | 包含 | 包含 |
✅固件默认内置🟡由编译参数动态决定—不包含
关于
taygedo:该包自 2026-11 起改为配置驱动——任何Config/*.txt只要写一行CONFIG_PACKAGE_luci-app-taygedo=y,Scripts/Packages-Taygedo.sh就会在defconfig之前把包与 Rust 源码放进package/luci-app-taygedo/, 无需改动工作流,也不再与H5000M-WIFI-YES-NETMONITOR变体绑定。二进制从源码交叉编译:
defconfig之后由Scripts/Build-Taygedo.sh用宿主机 rustup + OpenWrtstaging_dir里的<arch>-openwrt-linux-musl-gcc编出--no-default-features --features openwrt形态的静态 musl 可执行文件, 落到package/luci-app-taygedo/local/taygedo-rs,包 Makefile 见到即跳过 网络下载。与「预编译 AirPi Rust 后端」共用同一套工具链思路;编译失败时 自动回退cross(Docker),仍失败可设TAYGEDO_PREBUILT=1退回 Release 预编译资产。
LianXia233/luci-app-online-upgrade 是一条「检查 → 下载 → 调 sysupgrade」的在线升级链路:LuCI 前端 + rpcd ucode 后端 + Rust 静态二进制 /usr/bin/online-upgrade(分片并发下载、断点续传、Release 资产正则匹配)。
接入方式
- 上游仓库是「包即仓库根」形态(
Makefile/root//rust/都在根目录),不是 feeds 布局,因此不挂src-gitfeed;由Scripts/Packages-OnlineUpgrade.sh在defconfig之前 clone 进package/luci-app-online-upgrade/。 - 上游
Build/Prepare与Build/Compile均为空,安装段直接取./root/usr/bin/online-upgrade,即二进制必须外部预置。本仓库在WRT-CORE.yml「预编译 Rust 后端」第 ④ 段用官方 Rust SDK + OpenWrt musl 交叉链接器编译,产物落到包内该路径(RUST_NO_INJECT=1,不改上游 Makefile)。 Scripts/Settings.sh对全部Config/*.txt统一打开CONFIG_PACKAGE_luci-app-online-upgrade=y,新增机型无需再逐份改配置。运行期依赖rpcd-mod-ucode、ucode-mod-fs、ucode-mod-uci由包DEPENDS自动拉取。
各机型预设配置
预设由 Scripts/OnlineUpgradePreset.sh 在构建期按 WRT_DEVICE / WRT_FLAVOR / WRT_ARCH / WRT_TAG_GROUP 生成,落在 files/etc/config/online-upgrade($(TOPDIR)/files 会被并入 rootfs),覆盖包自带同名 conffile,首次开机即指向本机型自己的产物:
| 机型 | firmware_pattern(正则) |
匹配的实际资产 |
|---|---|---|
| H5000M | ^H5000M-[A-Za-z0-9-]+-aarch64-[0-9]{2}\.[0-9]{2}\.[0-9]{2}-sysupgrade\.bin$ |
H5000M-NetWiz-MT5700-aarch64-26.11.09-sysupgrade.bin、H5000M-FM350-aarch64-26.11.09-sysupgrade.bin、自用版 H5000M-SelfUse-aarch64-26.11.09-sysupgrade.bin |
| AP3000M | ^AP3000M-[A-Za-z0-9-]+-aarch64-[0-9]{2}\.[0-9]{2}\.[0-9]{2}-sysupgrade\.bin$ |
AP3000M-NetWiz-MT5700-aarch64-26.11.09-sysupgrade.bin 等 |
| X86 | ^X86-[A-Za-z0-9-]+-x86-64-[0-9]{2}\.[0-9]{2}\.[0-9]{2}-efi\.img\.gz$ |
X86-NetWiz-MT5700-x86-64-26.11.09-efi.img.gz 等(UEFI 引导) |
-
架构段是自动升级的前提:资产名必须带
aarch64(H5000M / AP3000M,mediatek filogic)或x86-64(X86),上游compat::asset_arch()靠它判定架构。少了它,即使机型命中也会被判成「资产未声明架构」(arch_check=undeclared)→can_upgrade=false,只能在「固件列表」里人工确认。架构段放在日期之前,因此旧的宽松正则[A-Za-z0-9-]+-[0-9]{2}\.[0-9]{2}\.[0-9]{2}-仍能命中:升级前已刷老固件的设备不必先手动重刷,就能拿到新命名产物。 -
表里的
[A-Za-z0-9-]+在实际预设中是精确值:构建期把它换成该次构建的WRT_FLAVOR(如NetWiz-MT5700)。同一归组里同时存在H5000M-NetWiz-FM350与H5000M-NetWiz-MT5700,只有精确到模组段才不会取错变体。 -
tag统一为latest@^<归组>-,归组取BASE/MT5700/MT5700M/FM350/NetWiz/自用,与 Release 的 Tag 前缀一致(如latest@^MT5700-只在MT5700-26.11.09这类 Tag 里找最新)。同一归组下三个机型共用 Release,靠firmware_pattern的设备前缀区分,不会互相取错。 -
日期段是识别关键:上游
version::pick()从资产名取「最后一个点分数字」当版本号,is_date_tag()只把YY.MM.DD/YYYY.MM.DD认作日期型版本。固件名带编译日期后,自用 SNAPSHOT 固件的本地构建日期才能与目标版本正确比较新/旧;不带日期(或写成20261109)只能退化成按 Release 发布时间判断。正则里的[0-9]{2}\.[0-9]{2}\.[0-9]{2}明确锚定日期段,也不会误匹配轮换前遗留的旧格式资产。 -
模组插件段全 ASCII:自用变体文件名用
SelfUse(Release标题与Tag仍是中文「自用」)。此前用中文导致 GitHub 资产名被字节化成H5000M-.-sysupgrade.bin,既不可读也无法稳定匹配,现已修复。 -
X86 引导方式需人工确认:预设按 UEFI 取
efi.img.gz。BIOS/Legacy 引导的机器必须把firmware_pattern里的efi改成combined—— 两者分区表不同,混用会导致升级后无法引导。 -
尚未发布过的归组(例如当前没有
BASE-*Release)不会报错,只是检查更新时返回「无新版本」,等对应构建出包后自动生效。 -
v2 二进制路径三方对齐(构建期断言):上游
root/etc/uci-defaults/90-online-upgrade-auto曾判定 v1 的/usr/bin/online-upgrade.sh,已于上游98a966a修复为[ -x /usr/bin/online-upgrade ]。Scripts/Packages-OnlineUpgrade.sh现在按内容判定、幂等:只在检测到 v1 路径时才改写,上游已修复则一行不动;随后断言文件内没有online-upgrade.sh、守卫判定的就是/usr/bin/online-upgrade—— 与Makefile安装项、WRT-CORE 预编译落点三者一致,任一处漂移即构建失败。
预设的配置项(键名取自上游代码,非推测)
| 配置项 | 预设值 | 含义 |
|---|---|---|
repo |
LianXia233/OpenWRT-CI |
升级源仓库(GitHub owner/repo) |
tag |
latest@^<归组>- |
latest 取最新 Release;latest@<正则> 限定 Tag 范围 |
firmware_pattern |
见上表 | 对 Release 资产名做正则匹配,决定下载哪个文件 |
min_size_mb |
15 |
下载完整性下限(MB),低于即判为截断 |
proxy |
https://gh.acg2.mom/ |
下载加速前缀,直连 GitHub 不稳时使用 |
expected_sha256 |
留空 | 留空则自动读取 Release 里的 sha256sums 总表或 <固件名>.sha256(按固件名匹配哈希);填值则强制校验该哈希 |
dl_workers |
6 |
分片并发数 |
dl_chunk_mb |
4 |
单分片大小(MB) |
dl_stall_sec |
30 |
无进展判定超时(秒),超时后重试该分片 |
dl_retries |
3 |
分片重试次数 |
上游默认配置里还有
enabled、keep_config两项,本版本 Rust 与rpcd代码均未读取,因此预设不写入,避免出现「配了却不起作用」的假象。升级成功后配置由包内/lib/upgrade/keep.d/online-upgrade保留。
| 目标配置 | 处理器平台 / SoC | 适配机型 | 底层源码分支 | Wi-Fi 支持 | 输出镜像格式 |
|---|---|---|---|---|---|
H5000M-WIFI-YES |
MediaTek Filogic (MT7987A + MT7996E) | Hiveton H5000M 5G CPE | VIKINGYFY/immortalwrt (owrt) |
✅ Wi-Fi 7 (BE) | Sysupgrade / Factory |
AP3000M |
MediaTek Filogic (MT7981B + MT7976C) | AirPi AP3000M 无线路由 | VIKINGYFY/immortalwrt (owrt) |
✅ Wi-Fi 6 (AX) | Sysupgrade / Factory |
X86 |
标准 x86_64 处理器 | PC / 软路由 / 工控机 / 虚拟机 | immortalwrt/immortalwrt (master) |
— | ISO / EFI / GRUB / VMDK |
Important
AP3000M 射频校准全自动注入:
设备出厂时 eMMC 的 factory 分区为空,开源 mt76 驱动因缺乏射频校准数据无法激活无线。本固件内置高功率版 EEPROM(28~29 dBm),首次开机自启脚本自动绑定真实物理 MAC 并写入射频分区,无需人工拆机刷入。
固件首次刷入后的基础网络通信参数如下。所有默认值统一由 Config/Defaults.txt 声明管理:
| 参数项 | 出厂默认值 | 说明 |
|---|---|---|
| 后台管理地址 | 192.168.10.1 |
Web 管理页面 IPv4 访问入口 |
| 后台登录账号/密码 | root / 空(无密码) |
首次进入后建议立即设置强密码 |
| 系统主机名 | OWRT |
局域网标识符 |
| 默认 Wi-Fi SSID | OWRT |
2.4G 与 5G 双频合一名称 |
| 默认 Wi-Fi 密码 | 12345678 |
WPA/WPA2 混合加密 |
| 无线频宽(WiFi 6 · AP3000M) | 2.4G 40MHz · 5G 160MHz |
802.11ax(HE),跑满百兆/千兆无线吞吐 |
| 无线频宽(WiFi 7 · H5000M) | 2.4G 40MHz · 5G 160MHz |
802.11be(EHT),双频设备 5G 上限 160MHz |
| 系统国家码 / 时区 | CN / Asia/Shanghai |
确保合规射频功率与精准 NTP 时钟校准 |
| 方案分类 | 插件名 | 架构特征 | 依赖组件 | 驱动形态 |
|---|---|---|---|---|
方案 A MT5700M |
luci-app-mt5700m |
经典成熟:状态大屏、AT 交互、短信转发 | sms-tool_q + ubus-at-daemon |
QModem feed 驱动栈 |
方案 B MT5700 |
luci-app-mt5700 |
现代化单包:内置 Rust/Tokio 异步后端,12 个独立控制台 | 静态二进制内置,零外部依赖 | 官方 packages feed |
Warning
方案互斥保障:两套方案底层存在驱动层 .ko 冲突。本仓库流水线在编译前注入了互斥校验门禁,若在配置中误将两套同时选中,CI 将在早期直接拦截,确保输出固件的绝对纯净。
- RNDIS 免驱拨号:原生走高速 RNDIS 数据通路,与 QMI 驱动栈无任何冲突;
- Rust 独立守护:内置
fm350d静态 musl 二进制,独占 AT 端口执行频段锁死、状态查询与短信收发。
- 一步一景向导:提供图形化配置网络流程,降低家庭/企业初次入网难度;
- 三层容灾自愈:内置
netwiz-monitor巡检、netwiz-recovery自愈与netwiz-watchdog状态看门狗。
无需本地准备繁琐的交叉编译工具链,依托 GitHub Actions 全自动化编排:
| 工作流文件 | 触发机制 | 职责与产物说明 |
|---|---|---|
WRT-BUILD.yml |
手动 workflow_dispatch |
自定义按需编译:自选目标机型、源码上游与 MT 模组方案;支持 TEST=true 语法预演验证 |
*-MT-AUTO.yml |
每日定时 / 手动 | H5000M / AP3000M / X86 基础配置自动化定时编译与 Release 发布 |
FM350-AUTO.yml |
每日定时 / 手动 | 全系机型 FM350 变体固件统一编译发版 |
NetWiz-AUTO.yml |
每日定时 / 手动 | NetWiz 家族全组合变体自动化编译发版 |
H5000M-NETMONITOR-AUTO.yml |
每日定时 / 手动 | 作者个人自用配置自动定时编译 |
Auto-Clean.yml |
每日定时 | 轮换保留最新构建 Release,自动清理历史废旧 Tag 与过期运行日志 |
Cache-Clean.yml |
每周定时 / 手动 | 回收 Actions 编译缓存,防止依赖冲突 |
产物 Tag 统一遵循 <产品分类>-<YY.MM.DD> 格式,同一天内的同类固件汇聚至统一 Release:
| 归组 Tag 示例 | 包含的固件产物 |
|---|---|
NetWiz-26.11.01 |
NetWiz 家族全部组合变体(NetWiz-MT5700 / NetWiz-MT5700M / NetWiz-FM350) |
MT5700-26.11.01 |
基础母配置 + MT5700 模式固件 |
MT5700M-26.11.01 |
基础母配置 + MT5700M 模式固件 |
FM350-26.11.01 |
基础母配置 + FM350 模组固件 |
自用-26.11.01 |
H5000M 个人专属配置固件 |
Releases 只收录可直接刷写的完整固件镜像 + 配套的 SHA256 校验文件:不再附带 Config-*.txt、.manifest、kernel.bin、rootfs 分片等辅助文件;kernel / rootfs 在打包阶段就被排除,X86 保留 efi / combined / iso / vmdk 等完整镜像。
每个 Release 附带两类校验资产,均由打包阶段按重命名后的固件名重新生成(OpenWrt 原生的 sha256sums 记录的是编译原始文件名,重命名后会失效,故不直接沿用):
| 校验资产 | 用途 |
|---|---|
sha256sums |
标准聚合表,下载后 sha256sum -c sha256sums 可人工核对全部固件;也是 luci-app-online-upgrade 的 checksum_asset 来源 |
<固件名>.sha256 |
每个固件一份单哈希文件,插件按 {固件名}.sha256 精确匹配;同组多机型 job 追加进同一 Release 时文件名唯一,不会被 --clobber 互相覆盖 |
同组同日多机型 job 共享同一个 Tag,标准
sha256sums总表采用「下载已有表 → 按文件名去重合并 → 再上传」的方式尽量保留其它机型的条目;插件的自动校验以不会冲突的<固件名>.sha256为主路径,总表即使被覆盖也不影响在线升级。firmware_pattern不匹配校验资产,插件不会把校验文件误当成固件下载。
固件文件名统一为 <机型>-<模组插件>-<编译日期>-<固件类型>.<扩展名>:
| 段 | 取值 | 说明 |
|---|---|---|
| 机型 | H5000M / AP3000M / X86 |
由 WRT_CONFIG 首段推导 |
| 模组插件 | NetWiz-MT5700 / NetWiz-MT5700M / NetWiz-FM350 / MT5700 / MT5700M / FM350 / SelfUse / BASE |
全 ASCII;无变体时以 BASE 占位,保证所有变体结构一致 |
| 编译日期 | YY.MM.DD(TZ=UTC-8,如 26.11.09) |
与 Tag 的日期段同源(WRT_DATE_SHORT);既是版本标识,也避免跨天同名互相覆盖 |
| 固件类型 | sysupgrade / factory / initramfs / recovery / efi / combined / efi-iso / iso / efi-vmdk / vmdk |
保留刷机方式判断所必需的信息 |
示例:H5000M-MT5700-aarch64-26.11.09-sysupgrade.bin、AP3000M-NetWiz-FM350-aarch64-26.11.09-factory.bin、X86-NetWiz-MT5700-x86-64-26.11.09-efi.img.gz、H5000M-SelfUse-aarch64-26.11.09-sysupgrade.bin。
luci-app-online-upgrade 的 firmware_pattern 与 docs/index.html 的产物解析均按此规范实现,详见 Scripts/OnlineUpgradePreset.sh 与 docs/index.html。
OpenWRT-CI/
├── .github/workflows/ # GitHub Actions CI/CD 流水线编排
│ ├── WRT-CORE.yml # 底层通用编译引擎
│ ├── WRT-BUILD.yml # 手动触发定制编译入口
│ ├── *-MT-AUTO.yml # MT 方案定时构建发版
│ ├── FM350-AUTO.yml # FM350 变体定时构建
│ ├── NetWiz-AUTO.yml # NetWiz 家族定时构建
│ ├── Auto-Clean.yml # 历史制品轮换与清理
│ └── Cache-Clean.yml # Actions 缓存回收
├── Config/ # 模块化 Kconfig 配置文件片段
│ ├── Defaults.txt # 出厂网络/无线默认值集中定义
│ ├── GENERAL.txt # 通用内核优化参数与基础插件
│ ├── MT5700.txt / MT5700M.txt # 模组管理方案 A/B 独立包定义
│ ├── H5000M-WIFI-YES.txt / AP3000M.txt / X86.txt # 硬件机型基础母配置
│ ├── *-FM350.txt # 各机型 FM350 变体配置
│ └── *-NETWIZ-*.txt # NetWiz 组合变体配置
├── AP3000M-EEPROM/ # AP3000M 射频恢复与校准脚本套件
├── Scripts/ # 编译生命周期钩子脚本
│ ├── Packages.sh # 第三方源码 Feed 拉取与版本锁定
│ ├── ApplyMTMode.sh # MT 模组方案注入与配置组装
│ ├── VerifyMTMode.sh # 编译前驱动冲突语义安全拦截
│ ├── Handles.sh # 静态补丁应用与组件冲突修复
│ └── Settings.sh # 出厂默认 IP / Wi-Fi 编译期注入
├── docs/ # GitHub Pages 静态落地页源码
└── README.md # 固件说明文档
- 🐧 底包源码:immortalwrt/immortalwrt(X86 官方主线)· VIKINGYFY/immortalwrt(Filogic 硬件板级适配)
- 👤 编译框架:VIKINGYFY/OpenWRT-CI(优秀的开源自动化编译框架)
- 👤 模组与生态插件:FAN789 · luci-app-mt5700 · luci-app-mt5700m · luci-app-fm350 · luci-app-netwiz · luci-app-h5000m-fancontrol · luci-app-h5000m-netmode
📜 开源许可:本项目基于 GNU General Public License v3.0 (GPL-3.0) 协议发布。