大疆 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 卡,无需插拔物理卡即可切换运营商

🔔 多渠道通知推送

  • 重要短信和系统告警可推送至:
    • TelegramEmailPushPlusBark飞书QQ
  • 不漏掉任何关键短信

📞 VoWiFi (IMS 通话)

  • 通过宽带网络隧道建立 IMS 连接
  • 地下室、弱覆盖场景下保证通话不掉线(本文暂未启用)

🏗️ 多架构支持

  • 原生编译 amd64 / arm64 / armv7
  • 可在路由器、树莓派、小主机上跑,部署灵活

VoHive 的 License 是 PolyForm Noncommercial 1.0.0,个人学习研究免费,商用需联系作者。

第一步:硬件识别与驱动加载

模块插到 Linux 机器上后,第一步是加载 USB 串口驱动:

1
2
sudo modprobe usbserial
sudo modprobe option

然后注入大疆的 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
2
3
4
sudo socat - /dev/ttyUSB2,b115200,raw,echo=0,crnl <<'EOF'
AT+QCFG="usbcfg",2c7c,0125,0,0,8100,40E4,6300
AT+CFUN=1,1
EOF

参数解析:

  • 2c7c,0125 — 目标 VID:PID,即 Quectel EC25
  • 8100,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-serialoption 驱动。lsusb 能看到设备,但 /dev/ttyUSB* 一个都没有。

解决: 切换到 Debian 标准内核:

1
2
3
4
5
6
7
# 查看 grub 菜单项
grep menuentry /boot/grub/grub.cfg

# 切换到标准内核 6.1.0-50-amd64
sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT="1>2"/' /etc/default/grub
update-grub
reboot

Debian 12 在 ESXi VM 上 grub-reboot 不生效,必须直接改 /etc/default/grub

第三步:VoHive 平台部署

准备配置目录

1
mkdir -p /opt/vohive/{config,data,logs}

创建配置文件

首次部署必须提供配置文件,否则容器反复重启。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
debug: false
port: 7575

web:
username: admin
password: admin

devices:
- name: DJI-4G
port: /dev/ttyUSB2
modem_type: quectel

vowifi:
enabled: false

webhook:
enabled: false

Docker Compose 部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
services:
vohive:
image: iniwex/vohive:latest
container_name: vohive
restart: unless-stopped
network_mode: "host"
privileged: true
volumes:
- ./config:/app/config
- ./data:/app/data
- ./logs:/app/logs
- /dev:/dev
environment:
- TZ=Asia/Shanghai

关键点:

  • network_mode: "host" — 模块通过 AT 串口通信,不需要端口映射,host 模式最直接
  • privileged: true — 访问 /dev/ttyUSB* 需要特权模式
  • 挂载 /dev — 让容器内能访问串口设备

启动:

1
2
3
cd /opt/vohive
docker compose -f docker-compose.custom.yml pull
docker compose -f docker-compose.custom.yml up -d

验证

1
2
3
4
curl -s -o /dev/null -w '%{http_code}' http://localhost:7575/
# 返回 200

docker logs vohive | tail -5

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 等)

总结

整个过程不算复杂,但有几个关键注意点:

  1. USB 身份改写一次,永久生效 — 以后再也不用管了
  2. ⚠️ 必须用标准内核 — cloud kernel 没有 usb-serial 驱动
  3. 🔑 crnl 参数 — socat 发 AT 命令必须加,否则 ERROR
  4. 🐳 Docker host 网络 + privileged — 串口设备访问必备
  5. 📡 模块需要 SIM 卡才能正常枚举 — 无 SIM 只亮红灯

VoHive 的 Web 界面可以发短信、管理 eSIM、开代理、接推送通知,作为 4G 模块的管理平台非常实用。下一步可以探索它的 VoWiFi 和代理池功能。