Files
LFLede/RM520N-5G/文档/RM520N-MBIM拨号成功路线.md
T
2026-08-21 18:28:33 +08:00

8.8 KiB
Raw Blame History

RM520N-GL 5G 模块在 iStoreOS(虚拟化直通)下 MBIM 拨号成功路线

日期:2026-08-19 环境:宿主飞牛(Fnos) 将移远 RM520N-GL 5G 模块通过 PCIe(vfio-pci) 直通给 iStoreOS 虚拟机 目标:让 iStoreOS 能够拨号上网,5G 模块作为宽带备用(wan2) 状态: 5G 拨号成功、稳定上网、已固化开机自启


一、最终成果一句话

在 iStoreOS 里,用 移远官方 Quectel-CM V1.6.8musl 静态编译) 通过 MBIM 模式 拨号,模块成功拿到运营商内网 IP 并上网(ping 223.5.5.5 通)。

关键结论:RM520N-GL 在 PCIe 直通 + pcie_mhi 驱动下,QMI 模式是死路(模块不响应 QMI),必须用 MBIM 模式。


二、环境与拓扑

5G 模块 移远 RM520N-GL,固件 RM520NGLAAR03A04M4GIMEI 868371050275649
模块宿主位置 飞牛 06:00.0 17cb:0308
直通方式 vfio-pci 直通给 istoreos 虚拟机
虚拟机内位置 00:0a.0 Qualcomm SDX62
iStoreOS IP 192.168.110.135
iStoreOS 登录 root / SSH 已开启
数据通道 PCIe/RMNET + qmap vlanMBIM 模式走 rmnet_mhi0.1
AT 通道 /dev/mhi_DUN

关键驱动

  • pcie_mhi 驱动 V1.3.8(移远私有 MHI 驱动)
  • 加载参数:mhi_mbim_enabled=1MBIM 模式
  • MBIM 模式设备节点:/dev/mhi_MBIMQMI 模式是 /dev/mhi_QMI0

三、为什么是这样(决策记录)

走过的弯路

  1. ModemManager 识别不了:移远 pcie_mhi 驱动把控制通道暴露为私有 /dev/mhi_QMI0,不是标准 cdc-wdmmmcli 扫不到。
  2. luci-app-modem 界面管不到:修好 at_port=/dev/mhi_DUN + manufacturer=quectel 后,界面能读到信息但不拨号。
  3. QMI 拨号失败(V1.6.7:系统自带 quectel-CM 1.6.7 只支持 ECM 分支,报 unsupport software_interface 1
  4. 升级 V1.6.8 仍失败(QMIV1.6.8 支持 QMI 分支,但 模块对 QMI 请求从不响应——手动发 QMI SYNC 能写入但读不到任何响应;换 qmap_mode、软重启都不行。判定是 RM520N-GL + pcie_mhi v1.3.8 的 QMI 硬伤
  5. 切 MBIM 成功:驱动 mhi_mbim_enabled=1/dev/mhi_MBIM 出现 → quectel-CM 直接拨号成功。完全复现移远官方日志 pcie_mhi_mbim.txt 的流程。

核心经验

  • RM520N-GL 在 PCIe/MHI 下能用 MBIMQMI 通道是死的(至少 pcie_mhi v1.3.8 + 此固件下如此)。
  • MBIM 模式不需要 proxyquectel-CM -s <apn> 直接拨号即可。
  • iStoreOS 是 musl libc,必须用 musl-gcc 静态编译 quectel-CMglibc 静态编译的 qmi-proxy 在 musl 上闪退/卡死)。

四、完整复现步骤

步骤 1:确认模块拓扑与直通

# 宿主(飞牛)
lspci | grep 17cb          # 找到 06:00.0 17cb:0308
# 直通给 istoreos VM 后,guest 内
lspci | grep -i qualcomm   # 00:0a.0 Qualcomm SDX62
ls /sys/bus/mhi_q/devices/ # 应看到 0308_00.00.0a_DIAG/DUN/EFS/QMI0 等
ls /dev/mhi_DUN /dev/mhi_QMI0   # AT 通道在

步骤 2:切到 MBIM 模式(关键!)

# 备份当前配置
cp /etc/modules.d/90-pcie_mhi /etc/modules.d/90-pcie_mhi.bak
# 卸载驱动
rmmod pcie_mhi
# 以 MBIM 模式重新加载
insmod /lib/modules/$(uname -r)/pcie_mhi.ko mhi_mbim_enabled=1
# 验证:/dev/mhi_MBIM 出现,/dev/mhi_QMI0 消失
ls /dev/mhi_MBIM
# 固化(重启自动 MBIM
echo "pcie_mhi mhi_mbim_enabled=1" > /etc/modules.d/90-pcie_mhi

步骤 3:部署 musl 版 quectel-CM V1.6.8

# 二进制在 文件/binaries/quectel-CMmusl 静态编译 V1.6.8
# 备份旧版 V1.6.7
cp /usr/bin/quectel-CM /usr/bin/quectel-CM.bak-20260819-167
# 替换
cp quectel-CM /usr/bin/quectel-CM
chmod 755 /usr/bin/quectel-CM
/usr/bin/quectel-CM 2>&1 | head -1   # 应显示 QConnectManager_Linux_V1.6.8

步骤 4MBIM 拨号(核心命令)

# 直接拨号,不需要 proxy
/usr/bin/quectel-CM -s wonet -f /tmp/quectel_cm.log
# 注意:MBIM 模式不要加 -i rmnet_mhi0(会异常);APN 用 wonet(联通卡)

成功标志:日志出现 ActivationState Deactivated -> Activatedrmnet_mhi0.1 拿到 inet IPping -I rmnet_mhi0.1 223.5.5.5 通。

步骤 5:开机自启

# 使用 文件/configs/init.d_modem5g
cp 文件/configs/init.d_modem5g /etc/init.d/modem5g
chmod 755 /etc/init.d/modem5g
/etc/init.d/modem5g enable     # 建立 S95modem5g
# 手动测试
/etc/init.d/modem5g start
/etc/init.d/modem5g stop

步骤 6:开机绑定修复(已确认非必需,默认跳过)

# 说明 (2026-08-20 更新):
# 原生流程即可自启拨号: 90-pcie_mhi(驱动) -> S95modem5g(拨号) -> S96wan5g-route(策略路由)
# rc.local **不需要**手动 bind mhi_q。
# 教训: 手动强绑`echo 0000:00:0a.0 > /sys/bus/pci/drivers/mhi_q/bind`可能抢设备致 SYS_ERR。
# 若模块失联(无/dev/mhi_DUN),先断电重启飞牛,仍无效才可手动 bind 临时唤醒。

五、已验证的关键事实

拨号成功日志(节选,完整见 文件/logs/)

[08-19_13:00:xx] Quectel_QConnectManager_Linux_V1.6.8
[08-19_13:00:xx] Modem works in MBIM mode
[08-19_13:00:xx] cdc_wdm_fd = 8                    # 成功打开 /dev/mhi_MBIM
[08-19_13:00:xx] mbim_device_caps_query()
[08-19_13:00:xx] DeviceId:     868371050275649
[08-19_13:00:xx] FirmwareInfo: RM520NGLAAR03A04M4G
[08-19_13:00:xx] mbim_subscriber_status_query()
[08-19_13:00:xx] SimIccId:     89860125801671811893
[08-19_13:00:xx] RegisterState Unknown -> Home     # 已注册
[08-19_13:00:xx] PacketServiceState Unknown -> Attached
[08-19_13:00:xx] mbim_set_connect(onoff=1, sessionID=0)
[08-19_13:00:xx] ActivationState Deactivated -> Activated   # ← 拨号成功!
[08-19_13:00:xx] mbim_ip_config(sessionID=0)
[08-19_13:00:xx] IPv4 = 10.98.xxx.xxx/30            # 拿到内网 IP

接口验证:

ip addr show rmnet_mhi0.1   # inet 10.98.xxx.xxx/30 ... state UP
ping -c 3 -W 2 -I rmnet_mhi0.1 223.5.5.5   # 2/2 received

界面管理(MBIM 下 luci 正常)

sh /usr/share/modem/modem_info.sh /dev/mhi_DUN quectel quectel 1
# 返回 manufacturer=Quectel, temperature, SIM ready, IMEI/IMSI 正常

luci 界面(网络→Modem)可作状态监控;但 luci 自动拨号(AT激活)不适用于 PCIe MBIM(数据通道由 quectel-CM 控制)。


六、目录文件清单

RM520N-5G-成功路线/
├── 文档/
│   └── RM520N-MBIM拨号成功路线.md        # 本文档
├── 文件/
│   ├── binaries/                         # musl 静态编译的 V1.6.8 二进制
│   │   ├── quectel-CM                    # ★ 拨号主程序(部署到 /usr/bin)
│   │   ├── quectel-qmi-proxy             # (备用,QMI 模式才需要)
│   │   ├── quectel-mbim-proxy
│   │   └── quectel-atc-proxy
│   ├── source/                           # V1.6.8 完整源码(21 .c + 头文件 + PDF文档)
│   │   └── Quectel_QConnectManager_Linux_User_Guide_V1.0.pdf
│   ├── configs/                          # istoreos 配置文件(可直接复用)
│   │   ├── modem_config.txt              # /etc/config/modem
│   │   ├── 90-pcie_mhi.txt               # /etc/modules.d/90-pcie_mhi (mhi_mbim_enabled=1)
│   │   ├── rc.local                      # /etc/rc.local (默认无需绑定, 见故障排查文档)
│   │   └── init.d_modem5g                # /etc/init.d/modem5g (开机自启拨号)
│   └── logs/
│       ├── quectel_cm_success_log.txt    # 本次成功拨号日志(真实)
│       └── 官方参考_pcie_mhi_mbim.txt    # 移远官方 MBIM 成功日志(参考)

七、编译说明(如需重编)

iStoreOS 是 musl libc,必须 musl 静态编译:

# 在 WSL(Ubuntu) 或其他 x86_64 glibc 环境
sudo apt install musl-tools
# musl-gcc 需要 linux 头文件,复制到 musl include
sudo cp -r /usr/include/linux /usr/include/x86_64-linux-musl/
sudo cp -r /usr/include/x86_64-linux-gnu/asm /usr/include/x86_64-linux-musl/
sudo cp -r /usr/include/asm-generic /usr/include/x86_64-linux-musl/

# 编译 quectel-CMV1.6.8QMI 分支)
cd 文件/source
musl-gcc -O1 -static -pthread -o quectel-CM \
  QmiWwanCM.c GobiNetCM.c main.c QCQMUX.c QMIThread.c util.c \
  qmap_bridge_mode.c mbim-cm.c device.c atc.c atchannel.c at_tok.c udhcpc.c

八、遗留 / 建议

  1. wan2 备份(最终目标)5G 已能上网,还差把 rmnet_mhi0.1 配成 wan2 备份(wan1 宽带优先)。推荐 mwan3 或 OpenWrt 策略路由。
  2. luci 界面:目前可作状态监控。如需界面控制拨号(启停 modem5g),可在 luci-app-modem 加轻量入口。
  3. QMI 死路提醒:不要再尝试 QMI 拨号,此模块此驱动下不通,MBIM 是正解。
  4. APN:本次用 wonet(联通)。换卡需改 /etc/init.d/modem5g 里的 -s 参数。