使用环境
- 模块:EC20CEHCLGR06A05M1G
- win11
- ubuntu20.04
工作模式设置
工作模式查看 |
模式说明
- 主要有下面几种模式,其他基本可以归类到这几个里面
- rmnet 模式
通过 QMI 工具发的 QMI 命令, 获取公网 IP。这种模式可以配合 usb_ecm 驱动或高通 GobiNet 驱动使用。
- ecm 模式
通过标准的 CDC-ECM 发起 data call,是发送标准的 ECM 命令,获取局域网 ip。这种模式配合 cdc_ether 驱动使用
- mbim 模式
Mobile Broadband Interface Model,正宗的移动宽带接口模型,专门用于 3G/4G/5G 模块的,只在 win8 以上的 windows 上使用。一般只在 WINDOWS 下使用。
- rndis 模式
基于 USB 实现 RNDIS 实际上就是 TCP/IP over USB,就是在 USB 设备上跑 TCP/IP,让 USB 设备看上去像一块网卡获取局域网 ip。这种方式最简单,模块插上手机卡之后,模块会自动拨号上网。
window驱动说明
- 不管什么模式只要装了移远的任意驱动,就可以看到串口了,顺序可能会不同,如果驱动有没卸载干净也可能识别错误,最好是用哪个装哪个。
- 0 模式对应 Quectel_LTE&5G_Windows_USB_Driver 驱动,自动拨号
- 1 模式对应Quectel_Windows_USB_Driver(Q)_ECM 驱动,网卡就正常工作了类似接到路由器
- 2 模式对应 Quectel_LTE_Windows_USB_Driver_For_MBIM 同 0 模式
- 3 模式对应 Quectel_Windows_USB_Driver(Q)_RNDIS 效果同 1 模式
驱动安装细节
RNDIS 驱动
- 装过其他驱动后,再装 RNDIS 驱动有概率接口对应的驱动识别错误,出现两个 DM 或者少串口之类的问题,可以对对应的设备右键->更新驱动程序->浏览我的电脑以查找驱动程序->选择合适的驱动如下图。最佳方式还是卸载干净之后再安装。
ECM 驱动
- 经过实验先装 ecm 驱动再装,0 模式的驱动,这样 ecm 驱动就不会被卸载掉了。
- 代价少使用 ecm 的时候,有可能不能自动换驱动,需要给网卡换成 ecm 驱动使其正常识别网卡,如下图
补充
- ec20 不推荐在 window 下使用 RNDIS 模式,usb 接口的顺序跟其他的几个不一样,驱动不能自动识别。其他几个由于接口顺序一致,基本上能自动识别,如果不能则参考上一条 ECM 经验
- 参考移远论坛说明
linux 使用
- 主要使用 013 三个模式
ttyUSB 串口用途
- 不同版本的手册,描述也差别好多,找了个版本比较符合手边 ec20 的测试结果,如图
0 模式
- 需要修改对应驱动源码,不过不修改源码好像不影响一般情况使用。
- 关于源码部分的修改适配,建议参考官方的 linux 用户指导《Quectel_UMTS_LTE_5G_Linux_USB_Driver_用户指导》
modprobe添加驱动
- 如果没识别出来则需要指定个驱动加载绑定下,qmi_wwan 不是必须,这个主要给支持 QMI(Qualcomm MSM Interface) 协议用的(wwan),ec20 是高通的,如果只是 ppp 拨号,其实只要 option 就够了。
- 给指定 vid pid 设备绑定一个特定驱动(临时)
sudo modprobe qmi_wwan
sudo sh -c 'echo "2c7c 0125" > /sys/bus/usb/drivers/qmi_wwan/new_id'
sudo modprobe option
sudo sh -c 'echo "2c7c 0125" > /sys/bus/usb-serial/drivers/option1/new_id' - 使用 udev 实现绑定(永久),在/etc/udev/rules.d/创建新规则文件 99-test-4g.rules,内容如下
自动加载绑定 qmi_wwan 驱动
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", RUN+="/bin/sh -c 'modprobe qmi_wwan && echo 2c7c 0125 > /sys/bus/usb/drivers/qmi_wwan/new_id'"
自动加载绑定 option1 驱动
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", RUN+="/bin/sh -c 'modprobe option && echo 2c7c 0125 > /sys/bus/usb-serial/drivers/option1/new_id'"
内核配置驱动
- 其他关于源码部分的修改适配略,建议参考官方
usb转串口option驱动
CONFIG_USB_SERIAL
CONFIG_USB_SERIAL_WWAN
CONFIG_USB_SERIAL_OPTION
添加QMI_WWAN驱动
CONFIG_USB_NET_DRIVERS
CONFIG_USB_USBNET
CONFIG_USB_NET_QMI_WWAN
CONFIG_USB_WDM
1、3 模式
- ecm 和 rndis 模式,只要内核开启了对应的 usb net 驱动支持,就会自动识别,模块是自动拨号的,再 udhcpc 配置下接口,从 dhcp 服务器获取 ip、网关、dns 等信息,如下就可以正常使用
udhcpc -i usb0
- 手边的模块在 13 模式,不需要配置自动拨号功能,并且也不支持下面这个 at 命令,作为备忘留存,具体参数配置好像不同模块有不同,待找手册修正
启动自动拨号
AT+QNETDEVCTL=2,3,1
关闭自动拨号
AT+QNETDEVCTL=2,3,0
USB 类驱动的配置项
- 不需要修改源码,如下表
USB 驱动 | 内核配置项 | 源文件 |
---|---|---|
ACM | CONFIG_USB_ACM | [KERNEL]/drivers/net/usb/cdc-acm.c |
ECM | CONFIG_USB_NET_DRIVERS CONFIG_USB_USBNET CONFIG_USB_NET_CDCETHER |
[KERNEL]/drivers/net/usb/cdc_ether.c |
RNDIS | CONFIG_USB_NET_DRIVERS CONFIG_USB_USBNET CONFIG_USB_NET_RNDIS_HOST |
[KERNEL]/drivers/net/usb/rndis_host.c |
NCM | CONFIG_USB_NET_DRIVERS CONFIG_USB_USBNET CONFIG_USB_NET_CDC_NCM |
[KERNEL]/drivers/net/usb/cdc_ncm.c |
MBIM | CONFIG_USB_NET_DRIVERS CONFIG_USB_USBNET CONFIG_USB_NET_CDC_MBIM |
[KERNEL]/drivers/net/usb/cdc_mbim.c |
内核配置 ppp 拨号支持
- 移远的 ppp 拨号脚本,需要加入 persist 属性设置,才能保持长期不自动退出
CONFIG_PPP
CONFIG_PPP_ASYNC
CONFIG_PPP_SYNC_TTY
CONFIG_PPP_DEFLATE
ubuntu 使用
- ubuntu20 默认已经支持了移远模块,可以识别出来 ttyUSB 串口
0 模式(rmnet)
- ubuntu20.04使用 modem manager,对模块的支持有问题,会拨号成功后几分钟就断网。可能是这个原因
- 使用 modem-manager-gui 来管理拨号则不会出现断网
- 需要卸载 modem manager 才能正常 ppp 拨号
1、3 模式
- ecm 模式和 rndis 模块会自动拨号,但需要 udhcpc 一下接口,从 dhcp 服务器获取 ip、网关、dns 等信息。
udhcpc -i usb0
查看串口是否被占用
先查ModemManager是否启动,ModemManager会占用串口 |
usb 接口查看
查看 ttyUSBX 对应的接口
udevadm info --query=all --name=/dev/ttyUSB1 | grep -i interface |
usb-devices 查看 usb 接口
usb-devices |
lsusb 查看 usb 接口
lsusb -t -v |
参考链接
- https://quectelwb.github.io/STD_Modules/#/UsbNet/UsbNet
- https://forumschinese.quectel.com/t/topic/3676/2 “不同模式接口变化,模式推荐”
- https://www.openwrt.pro/post-542.html “不同模式工作区别”
- https://forum.ubuntu.org.cn/viewtopic.php?t=491093&start=15 “modem manager 问题”
- https://forumschinese.quectel.com/t/topic/5824/4 “移远 quectel-CM 和 modemmanager 冲突”
- https://forumschinese.quectel.com/t/topic/1675 “modemmannager 占用串口”
- https://forumschinese.quectel.com/t/topic/3969/6 “检查串口占用”
- https://getiot.tech/linux-note/use-of-quectel-ec20-dialup-on-linux/ “拨号参考”