4G/5G模组----概念+驱动+调试
前言:USB 驱动程序,包括 USB 串口驱动(如 option 和 ACM)以及 USB 网络驱动(如 GobiNet、QMI_WWAN、MBIM、NCM、RNDIS 和 ECM),各自有不同的功能和用途。以下是对这些驱动程序的简要介绍:
基础概念----USB 驱动程序
USB 串口驱动:
option 驱动:
功能: 支持通过 USB 接口与设备进行串行通信,通常用于连接调制解调器(modem)或其他串口设备。
用途: 允许系统通过 USB 与设备交换数据,常用于嵌入式系统或需要串口通信的场景。
ACM 驱动(Abstract Control Model):
功能: 提供 USB 串口设备的支持,使设备表现为虚拟串口。
用途: 广泛用于调制解调器、GPS 接收器等设备,允许通过标准串口接口进行通信。
USB 网络驱动:
GobiNet 驱动:
功能: 专为高通(Qualcomm)Gobi 技术的设备设计,支持通过 USB 接口进行网络连接。
用途: 用于高通 Gobi 芯片组的调制解调器,提供高速数据传输功能。
QMI_WWAN 驱动:
功能: 支持高通的 QMI(Qualcomm MSM Interface)协议,通过 USB 实现网络连接。
用途: 用于高通基带处理器,与 GobiNet 类似,但实现方式不同。
QMI(Qualcomm Message Interface)定义:QMI 是高通定义的一种通信协议,主要用于高通基带与应用处理器之间的通信。拨号方式:通过发送 QMI 命令建立数据连接,通常使用工具如 qmicli 或 libqmi。IP 地址类型:通常获取公网 IP 地址。驱动支持:需要在 Linux 内核中启用 QMI_WWAN 驱动。适用模块:广泛应用于高通芯片的模块,如 EC20、EC200N-CN 等。性能特点:支持 IP 聚合和复用,适用于高速数据传输场景。
MBIM 驱动(Mobile Broadband Interface Model):
功能: 专为移动宽带设备设计的接口模型,通过 USB 提供网络连接。
用途: 主要在 Windows 8 及以上版本中使用,支持各种移动宽带设备的连接。
NCM 驱动(Network Control Model):
功能: USB 网络控制模型,提供高效的数据传输方式。
用途: 用于需要高带宽和低延迟的网络通信场景。
RNDIS 驱动(Remote Network Driver Interface Specification)
功能: 微软定义的协议,通过 USB 提供网络适配器功能。
用途: 在 Windows 系统中广泛使用,使设备表现为网络接口。
ECM 驱动(Ethernet Control Model):
功能: USB 以太网控制模型,使设备通过 USB 提供以太网连接。
用途: 常用于需要将设备作为网络接口连接到主机的场景。
ECM(Ethernet Control Model)
定义:ECM 是 USB CDC(Communication Device Class)协议的一种实现,模拟以太网设备。
拨号方式:通过发送标准的 ECM 命令建立数据连接。
IP 地址类型:通常获取私网 IP 地址。
驱动支持:Linux 内核早期版本已原生支持,无需额外驱动。
适用模块:适用于支持 ECM 协议的模块,如华为 ME909。
性能特点:不支持 IP 聚合和复用,性能相对较低。
驱动程序的选择取决于设备类型、所需的功能以及操作系统的支持情况。例如,如果使用的是高通 Gobi 技术的调制解调器,可能需要加载 GobiNet 或 QMI_WWAN 驱动;如果使用的是标准的以太网功能,可能需要加载 ECM 驱动。
案例:
驱动解析
USB 转串口驱动
模块加载 USB 转串口 option 驱动程序后,在/dev 目录下创建 ttyUSB0、ttyUSB1 和 ttyUSB2 等设备文件。以下章节介绍如何将 USB 转串口 option 驱动程序移植到 Linux 操作系统中。
添加 VID 和 PID
为了识别模块,需将模块的 VID 和 PID 信息添加到kernel/drivers/usb/serial/option.c 文件中,对应的 VID 和 PID 以 EC05 系列模块为例:
static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel......{ USB_DEVICE(0x2C7C, 0x0125) },......
#endif
使用 USBNet 驱动(option驱动)
上一节配置使模块的所有 USB 接口均绑定 USB 转串口 option 驱动程序,导致 USBNet 驱动程序接口无法工作。用户可以添加以下语句来防止 USBNet 驱动程序接口绑定 USB 转串口 option 驱动程序。
在kernel/drivers/usb/serial/option.c 文件中添加以下语句:
static int option_probe(struct usb_serial *serial, const struct usb_device_id