在 Linux 系统中使用 Quectel 4G 模块(EC801E / EC20),通过 USB 连接,模块工作在 ECM(CDC Ethernet)模式。系统现象:
-
能识别 USB 设备
-
出现
/dev/ttyUSB* -
出现 ECM 网卡
enx* -
能拿到 IP 地址
-
但不能访问外网
典型表现:
能 ping 模块网关
不能 ping 公网 IP
不能访问域名
本文给出一套完整的工程级排障流程 + 最终自动化解决方案。
查看 USB 设备树
lsusb -t
应看到类似:
cdc_ether
option
说明:
-
ECM 网卡驱动加载成功
-
AT 串口驱动加载成功
查看串口
ls /dev/ttyUSB*
应至少有:
ttyUSB0
ttyUSB1
ttyUSB2
ifconfig
或:
ip addr
应看到:
enxXXXXXXXX
inet 192.168.43.xxx
查看路由
ip route
应看到:
default via 192.168.43.1 dev enxXXXX
模块网关测试
ping 192.168.43.1
如果 ✅ 通:
说明:
Linux → USB → 模块 ECM → 正常
公网 IP 测试
ping 8.8.8.8
如果 ❌ 不通:
说明问题不在 Linux 网卡,而在模块数据通道
很多人忽略一个关键点:
模块注册到网络
≠
数据会话(PDP)已建立
≠
ECM 已绑定数据通道
必须满足:
APN 配置
PDP 激活
数据 IP 分配
ECM 绑定
进入 AT 串口:
microcom -p /dev/ttyUSB2 -s 115200
检查基础状态
AT+CPIN?
AT+CGATT?
AT+CEREG?
应为:
READY
1
0,1
设置 APN(按运营商修改)
AT+CGDCONT=1,"IP","3gnet"
激活 PDP
AT+CGACT=1,1
查询是否拿到数据 IP(关键一步)
AT+CGPADDR=1
成功应返回:
+CGPADDR: 1,"10.x.x.x"
这表示:
✅ 数据通道真正打通
ECM 绑定(部分固件需要)
AT+QNETDEVCTL=1,1,1
udhcpc -i enxXXXX
或:
dhclient enxXXXX
ping 8.8.8.8
ping baidu.com
应恢复正常。
EC801E / EC20 ECM 模式常见特性:
-
模块重启后 PDP 不自动绑定 ECM
-
需要再次激活数据通道
-
Linux 仍能拿到 DHCP 地址,但 NAT 不工作
表现就是:
有IP
无外网
ping ≈ 150–250 ms
属于 LTE / Cat1 正常范围。
创建:
/usr/bin/cell_auto_net.sh
#!/bin/sh
TTY=/dev/ttyUSB2
IFACE=$(ip -o link | awk -F': ' '{print $2}' | grep ^enx | head -n1)
echo -e "AT+CGDCONT=1,"IP","3gnet"
" > $TTY
sleep 1
echo -e "AT+CGACT=1,1
" > $TTY
sleep 2
echo -e "AT+QNETDEVCTL=1,1,1
" > $TTY
sleep 3
udhcpc -i $IFACE
加入开机自启:
/etc/rc.local
按顺序:
1️⃣ 有 ttyUSB
2️⃣ 有 enx 网卡
3️⃣ 能 ping 192.168.43.1
4️⃣ AT+CGPADDR 有公网IP
5️⃣ 没有 → CGDCONT + CGACT
6️⃣ 重新 DHCP
7️⃣ 再测公网
这类问题本质是:
蜂窝模块数据面未激活,而不是 Linux 网络栈问题
关键判断点只有一条:
AT+CGPADDR 是否返回公网IP
只要这一条成立,外网一定能通。
这套方法适用于:
-
工控 Linux
-
ARM Linux
-
x86 Linux
-
嵌入式 Linux
-
开发板系统








