大疆 1 代 4G 模块改 USB 身份 + VoHive 平台部署全记录
大疆 1 代 4G 模块本质是移远 Quectel EG25-G 公版模组,只是 USB VID/PID 被写成了大疆私有值。VoHive 平台只认标准 EC25 身份,不改就用不了。本文记录完整的改写和部署过程,包括踩过的坑。
背景
手头有一个大疆 1 代 4G 模块(Type-C 口),想用来跑 VoHive 平台——一个面向高通 4G/LTE 模组的综合管理与代理服务平台。
但大疆给这个模块写了一个私有的 USB 身份标识(VID:PID = 2ca3:4006),而 VoHive 只认标准的 Quectel EC25 (2c7c:0125)。插上 Linux 后虽然能识别,但 VoHive 不会搭理它。
解决方案: 通过 AT 命令把 USB 身份永久改写为标准 EC25,然后部署 VoHive 的 Docker 版。
VoHive 能做什么?
VoHive 由 Go 后端(Gin + GORM + SQLite)和 Vue 3 前端组成,把 4G 模组的管理能力打包成一个开箱即用的 Web 服务。以下是它的核心能力:
📡 多模组并发管理
- USB 热插拔自动发现,多设备实时状态监控
- 支持 Quectel EC20/EC25/EC21/EG25/EM20 等主流高通模组
- 同时管理多张 SIM 卡 / eSIM,互不干扰
🌐 轻量级代理引擎
- 内建 SOCKS5 / HTTP 代理,每个模组可独立开一个代理实例
- 基于
SO_BINDTODEVICE严格绑定出站流量到指定网卡 - 典型场景:一张卡一个代理 IP,组成私有移动代理池
💬 短信收发中心
- Web 界面统一收发短信,支持会话和联系人管理
- 历史短信自动落库(SQLite),可搜索可导出
- USSD 交互(查询余额、套餐等)
- ⭐ 实用场景:多卡接码、验证码统一管理
📱 eSIM 全生命周期管理
- 通过 AT 指令通道直接管理 eSIM 芯片
- Profile 下载、启用、停用、重命名、删除
- 配合多 eSIM 卡,无需插拔物理卡即可切换运营商
🔔 多渠道通知推送
- 重要短信和系统告警可推送至:
- Telegram、Email、PushPlus、Bark、飞书、QQ
- 不漏掉任何关键短信
📞 VoWiFi (IMS 通话)
- 通过宽带网络隧道建立 IMS 连接
- 地下室、弱覆盖场景下保证通话不掉线(本文暂未启用)
🏗️ 多架构支持
- 原生编译 amd64 / arm64 / armv7
- 可在路由器、树莓派、小主机上跑,部署灵活
VoHive 的 License 是 PolyForm Noncommercial 1.0.0,个人学习研究免费,商用需联系作者。
第一步:硬件识别与驱动加载
模块插到 Linux 机器上后,第一步是加载 USB 串口驱动:
1 | sudo modprobe usbserial |
然后注入大疆的 VID/PID,让 option 驱动绑定这个设备:
1 | echo "2ca3 4006" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id |
绑定成功后,/dev/ttyUSB0 ~ /dev/ttyUSB3 四个串口设备出现。其中 /dev/ttyUSB2 是 AT 命令通道。
⚠️ 注意:模块需要插入 SIM 卡才能正常枚举 USB,无 SIM 卡只亮红灯、不出现 ttyUSB 设备。
第二步:USB 身份改写(关键)
使用 socat 向模块发送 AT 命令,将 VID/PID 永久写入 NVRAM:
1 | sudo socat - /dev/ttyUSB2,b115200,raw,echo=0,crnl <<'EOF' |
参数解析:
2c7c,0125— 目标 VID:PID,即 Quectel EC258100,40E4,6300— 其他配置参数(厂商保留字段)
AT+CFUN=1,1 触发模块软复位。约 10 秒后模块重新枚举,lsusb 显示:
1 | ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. |
改写成功!以后这模块插任何 Linux 机器都直接认成 EC25,无需重复操作。
踩坑 1:AT 命令语法
第一次发送 AT+QCFG 时返回 ERROR,经排查是 socat 需要 crnl 标志将 \n 转为 \r\n,否则模块不认识换行符。
踩坑 2:云内核没有 option 驱动
踩了个大坑——Docker VM 跑的 cloud kernel (linux-image-cloud-amd64) 不包含 usb-serial 和 option 驱动。lsusb 能看到设备,但 /dev/ttyUSB* 一个都没有。
解决: 切换到 Debian 标准内核:
1 | # 查看 grub 菜单项 |
Debian 12 在 ESXi VM 上
grub-reboot不生效,必须直接改/etc/default/grub。
第三步:VoHive 平台部署
准备配置目录
1 | mkdir -p /opt/vohive/{config,data,logs} |
创建配置文件
首次部署必须提供配置文件,否则容器反复重启。
1 | server: |
Docker Compose 部署
1 | services: |
关键点:
network_mode: "host"— 模块通过 AT 串口通信,不需要端口映射,host 模式最直接privileged: true— 访问/dev/ttyUSB*需要特权模式- 挂载
/dev— 让容器内能访问串口设备
启动:
1 | cd /opt/vohive |
验证
1 | curl -s -o /dev/null -w '%{http_code}' http://localhost:7575/ |
VoHive Web Dashboard 访问:http://<服务器IP>:7575,默认账号 admin/admin(首次登录后务必修改密码)。
第四步:SIM 卡状态确认
部署完成后通过 AT 命令查询模块和网络状态:
| 项目 | 值 | 备注 |
|---|---|---|
| 模块型号 | Quectel QDC507 (EG25-G) | 硬件版本 |
| 固件版本 | QDC507GLEFM21 | |
| SIM 状态 | READY ✅ | 已识别 |
| 运营商 | 中国电信 (460/11) | LTE FDD |
| 网络注册 | 已注册 | GPRS+EPS 双附着 |
| APN | CTNET | 电信默认 |
| IP 地址 | 10.40.xxx.xxx | PPP 内网 IP |
| CSQ 信号强度 | 28/31 ✅ | 良好 |
| RSRP | -87 dBm | 🟡 中等 |
| DNS | xxx.xxx.xxx.xxx / xxx.xxx.xxx.xxx | 电信 DNS |
附录:关于原作者删库
就在部署完成不久后,VoHive 原作者 iniwex5 宣布「无限期停止维护」,清空了源码仓库。vohive-release 仓库(含预编译二进制)仍公开,但需注意后续独立部署的可能性。
建议做法:
- Fork 备份:将关键仓库 fork 到自己的 GitHub,确保后续可用
- 保留 Docker Hub 镜像:
iniwex/vohive:latest是现成的,优先使用 - 社区备份:
hzlmy2002/vohive-collection备份了完整源码 + 所有 Go 依赖(netlink、qqbot、euicc-go、quectel-qmi-go 等)
总结
整个过程不算复杂,但有几个关键注意点:
- ✅ USB 身份改写一次,永久生效 — 以后再也不用管了
- ⚠️ 必须用标准内核 — cloud kernel 没有 usb-serial 驱动
- 🔑
crnl参数 — socat 发 AT 命令必须加,否则 ERROR - 🐳 Docker host 网络 + privileged — 串口设备访问必备
- 📡 模块需要 SIM 卡才能正常枚举 — 无 SIM 只亮红灯
VoHive 的 Web 界面可以发短信、管理 eSIM、开代理、接推送通知,作为 4G 模块的管理平台非常实用。下一步可以探索它的 VoWiFi 和代理池功能。