抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Sephiroth1s'blog

The quieter you became,the more you are able to hear.

使用环境

  • 模块:EC20CEHCLGR06A05M1G
  • win11
  • ubuntu20.04

工作模式设置

# 工作模式查看
at+qcfg="usbnet"
# 设置工作模式0
at+qcfg="usbnet",0

模式说明

  • 主要有下面几种模式,其他基本可以归类到这几个里面

  • 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会占用串口
sudo systemctl status ModemManager
# 查占用串口的进程
# 列出使用指定文件的进程
sudo fuser /dev/ttyUSB2
# 列出打开的文件和相关的进程信息
sudo lsof | grep ttyUSB

usb 接口查看

查看 ttyUSBX 对应的接口

udevadm info --query=all --name=/dev/ttyUSB1 | grep -i interface

E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_USB_INTERFACES=:ffffff:ff0000:
E: ID_USB_INTERFACE_NUM=01
E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association

usb-devices 查看 usb 接口

usb-devices 

T: Bus=03 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 10 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=2c7c ProdID=0125 Rev=03.18
S: Manufacturer=Android
S: Product=Android
C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA
I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I: If#=0x1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#=0x2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#=0x4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan

lsusb 查看 usb 接口

lsusb -t -v

/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/7p, 12M
ID 0e0f:0002 VMware, Inc. Virtual USB Hub
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
ID 0e0f:0003 VMware, Inc. Virtual Mouse
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 480M
ID 0e0f:0002 VMware, Inc. Virtual USB Hub
|__ Port 1: Dev 10, If 3, Class=Vendor Specific Class, Driver=option, 480M
ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
|__ Port 1: Dev 10, If 1, Class=Vendor Specific Class, Driver=option, 480M
ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
|__ Port 1: Dev 10, If 4, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
|__ Port 1: Dev 10, If 2, Class=Vendor Specific Class, Driver=option, 480M
ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
|__ Port 1: Dev 10, If 0, Class=Vendor Specific Class, Driver=option, 480M
ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem

参考链接

  1. https://quectelwb.github.io/STD_Modules/#/UsbNet/UsbNet
  2. https://forumschinese.quectel.com/t/topic/3676/2 “不同模式接口变化,模式推荐”
  3. https://www.openwrt.pro/post-542.html “不同模式工作区别”
  4. https://forum.ubuntu.org.cn/viewtopic.php?t=491093&start=15 “modem manager 问题”
  5. https://forumschinese.quectel.com/t/topic/5824/4 “移远 quectel-CM 和 modemmanager 冲突”
  6. https://forumschinese.quectel.com/t/topic/1675 “modemmannager 占用串口”
  7. https://forumschinese.quectel.com/t/topic/3969/6 “检查串口占用”
  8. https://getiot.tech/linux-note/use-of-quectel-ec20-dialup-on-linux/ “拨号参考”