MT7628 Openwrt21 Fibocom FM650

您所在的位置:网站首页 如何安装rndis驱动 MT7628 Openwrt21 Fibocom FM650

MT7628 Openwrt21 Fibocom FM650

2023-12-26 15:33| 来源: 网络整理| 查看: 265

1、拨号模式简介

        ECM(Ethernet Networking Control Model 以太网控制模型)用于在设备和主机之间传输以太网数据 包。在操作系统看来,CDC ECM 设备就是一个虚拟以太网卡,包含标准网卡需要的 MAC 地址和 IP 地址。 CDC ECM 设备通常是一个以太网卡,用于连接 LAN 或者是 WLAN。当客户主机发起 ECM 拨号的请求时, FG650 相当于一个路由器,模块内部会调用相应的服务实现 WWAN 拨号。在拨号成功后,模块内部会启 动 DHCP server 等功能。客户端应用系统通过 DHCP client 服务,获取模块 DHCP server 分配的 IP。客户 主机调用 DHCP 等脚本实现把模块从网络侧获取到的 IP 和 DNS 配置到本机,实现上网。

        NCM (Network Control Model) 是 ECM 协议的改进版。将多个以太网包组成一个 NTB 包在 USB 总线上传输,提高了带宽利用率。

        RNDIS(Remote Network Driver Interface Specification), 既是远程网络驱动接口规范, 基于 USB 实 现 RNDIS 实际上就是 TCP/IP over USB,就是在 USB 设备上跑 TCP/IP,让 USB 设备看上去像一块网卡。

2、拨号模式选择

        FG650 支持 ECM/NCM/RNDIS 三种模式,三种模式的主要特性如下表:

 3、USB端口信息

ECM模式端口枚举顺序

 

NCM模式端口枚举顺序

 

RNDIS模式端口枚举顺序

 

 模块的USB支持多种模式,可以向模块发送AT+GTUSBMODE?,查询当前处于什么模式,也 可以用 AT+GTUSBMODE=,调整 usb 模式,模块回复 OK 后,AT+CFUN=15 重启模组生效。

4、USB枚举模式确认和修改

采用 AT+GTUSBMODE?查询当前 USB 模式。

AT+GTUSBMODE? +GTUSBMODE: 39 OK

采用 AT+GTUSBMODE= 指令可以修改 USB 模式。

AT+GTUSBMODE? +GTUSBMODE: 39 OK AT+GTUSBMODE=37 OK AT+CFUN=15 //重启模组生效 5、USB 串口驱动添加系统组件

        1、内核选中USB driver for GSM and CDMA modems 组件,增加设备支持打开内核源码文件ption.c({kernel/drivers/usb/serial/option.c)。在option_ids数组添加FM650的PID/VID。注意 ECM/NCM/RNDIS 等不同模式下的 PID 是不一样的。需要根据模 组的模式添加相应的 PID/VID(请参考 USB 端口章节),或者可以把 FM650 支持的所有模式 ID 都添加上去。

#define FIBOCOM_VENDOR_ID 0x2CB7 #define FIBOCOM_PRODUCT_FG650_ECM 0x0A04 #define FIBOCOM_PRODUCT_FG650_NCM 0x0A05 #define FIBOCOM_PRODUCT_FG650_RNDIS 0x0A06 static const struct usb_device_id option_ids[] = { #if 1 { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_ECM)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_NCM)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_RNDIS)}, #endif

        2、在 USB 串口驱动中,过滤 ECM/NCM/RNDIS 接口。由于 USB 串口跟 ECM/NCM/RNDIS 都属于 非标准 CDC 设备,需要防止 ECM/NCM/RNDIS 口被 USB 串口驱动加载而导致无法正常加载 ECM/NCM/RNDIS 口驱动。有三种方式可以解决:

        A:比较新的 kernel 版本,在 option.c 中的 opiton_ids 添加代码如下:

{ USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_ECM), .driver_info = RSVD(0) | RSVD(1) | RSVD(5)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_NCM), .driver_info = RSVD(0) | RSVD(1) | RSVD(6)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_RNDIS), .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },

        B:比较老的内核,在option_ids[]添加

static const struct usb_device_id option_ids[] = { #if 1 { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_ECM)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_NCM)}, { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_FG650_RNDIS)}, #endif

并在 probe 函数内判断当前的 interface num 进行过滤,具体如下:

#if 1 if (serial->dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_PRODUCT_FG650_ECM) && serial->interface->cur_altsetting->desc.bInterfaceNumber dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_PRODUCT_FG650_NCM) && serial->interface->cur_altsetting->desc.bInterfaceNumber dev->descriptor.idVendor == cpu_to_le16(FIBOCOM_VENDOR_ID) && serial->dev->descriptor.idProduct == cpu_to_le16(FIBOCOM_PRODUCT_FG650_RNDIS) && serial->interface->cur_altsetting->desc.bInterfaceNumber Interfaces->Add New Interface配置如下

设置防火墙为wan

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3