OpenWrt21 EC20 R2.0驱动添加

1、OpenWrt21内核版本为5.4,EC20R2.0的VID、PID为0x2C7C, 0x0125,可以使用qmi拨号或者ppp拨号

2、内核修改

        1、修改USB串口驱动

                File : [KERNEL]/drivers/usb/serial/option.c

static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
	{ USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
	{ USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
	{ USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
	{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
	{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
#endif

        2.1、添加零包处理

                File:[KERNEL]/drivers/usb/serial/usb_wwan.c

static struct urb*usb_wwan_setup_urb(struct usb_serial *serial, int endpoint,
int dir, void *ctx, char *buf, int len,void(*callback) (struct urb *))
{
……
#if 1 //Added by Quectelfor Zero Packet
	if (dir == USB_DIR_OUT) {
		struct usb_device_descriptor*desc = &serial->dev->descriptor;
		if (desc->idVendor ==cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
			urb->transfer_flags|= URB_ZERO_PACKET;
		if (desc->idVendor ==cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
			urb->transfer_flags|= URB_ZERO_PACKET;
		if (desc->idVendor ==cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
			urb->transfer_flags|= URB_ZERO_PACKET;
		if (desc->idVendor ==cpu_to_le16(0x2C7C))
			urb->transfer_flags|= URB_ZERO_PACKET;
 
}
#endif
	return urb;
}

        2.2、Add Reset Resume

                File: [KERNEL]/drivers/usb/serial/option.c

static struct usb_serial_driveroption_1port_device = {
……

#ifdef CONFIG_PM
	.suspend           = usb_wwan_suspend,
	.resume            = usb_wwan_resume,
#if 1 //Added by Quectel
	.reset_resume 	   = usb_wwan_resume,
#endif
#endif
}

        2.3、Use GobiNet or QMI WWAN

                File: [KERNEL]/drivers/usb/serial/option.c

static int option_probe(struct usb_serial*serial, const struct usb_device_id *id) {
struct usb_wwan_intf_private *data;
……

#if 1 //Added by Quectel
	//Quectel UC20'sinterface 4 can be used as USB Network device
	if (serial->dev->descriptor.idVendor  == cpu_to_le16(0x05C6)  &&
			serial->dev->descriptor.idProduct ==cpu_to_le16(0x9003)
			&&serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
		return -ENODEV;
	//Quectel EC20's interface4 can be used as USB Network device
	if (serial->dev->descriptor.idVendor  == cpu_to_le16(0x05C6)  &&
			serial->dev->descriptor.idProduct== cpu_to_le16(0x9215)
			&&serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
		return -ENODEV;
	//QuectelEC21&EC25&EC20 R2.0's interface 4 can be used as USB Network device
	if(serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)
			&&serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
		return -ENODEV;
#endif
	/* Store the device flags so we can use them during attach. */
	usb_set_serial_data(serial, (void *)device_flags);

	return 0;
}

        2.4、QMI WWAN Driver

                        2.4.1        Add VID and PID

                                file is "[KERNEL]/drivers/net/usb/qmi_wwan.c".

        

static const struct usb_device_id products[] = {
#if 1 //Added by Quectel
    #ifndef QMI_FIXED_INTF
    /* map QMI/wwan function by a fixed interface number */
    #define QMI_FIXED_INTF(vend, prod, num) \
    .match_flags  =  USB_DEVICE_ID_MATCH_DEVICE  |
    USB_DEVICE_ID_MATCH_INT_INFO, \
    .idVendor = vend, \
    .idProduct = prod, \
    .bInterfaceClass = 0xff, \
    .bInterfaceSubClass = 0xff, \
    .bInterfaceProtocol = 0xff, \
    .driver_info = (unsigned long)&qmi_wwan_force_int##num,
#endif
    { QMI_FIXED_INTF(0x05C6, 0x9003, 4) }, /* Quectel UC20 */
    { QMI_FIXED_INTF(0x05C6, 0x9215, 4) }, /* Quectel EC20 */
    { QMI_FIXED_INTF(0x2C7C, 0x0125, 4) }, /* Quectel EC25/EC20R2.0 */
    { QMI_FIXED_INTF(0x2C7C, 0x0121, 4) }, /* Quectel EC21 */
#endif	

                2.4.2        Add Support for Raw IP Modefor EC21/EC25/EC20 R2.0

                        file is"[KERNEL]/drivers/net/usb/qmi_wwan.c"

#include <linux/usb/usbnet.h>
#include <linux/usb/cdc-wdm.h>

#if 1 //Added by Quectel
#include <linux/etherdevice.h>
#include <linux/version.h>
#endif
/* if follow function exist, modify itas below */
static int qmi_wwan_bind(struct usbnet*dev, struct usb_interface *intf)
{
……
#if 1 //Added by Quectel
    if(dev->udev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
       dev_info(&intf->dev, "Quectel EC21&EC25&EC20 R2.0work on RawIP mode\n");
       dev->net->flags |= IFF_NOARP;
#if (LINUX_VERSION_CODE < KERNEL_VERSION( 3,9,1 ))
/* make MAC addr easily distinguishable from an IP header */
    if (possibly_iphdr(dev->net->dev_addr)){
       dev->net->dev_addr[0] |= 0x02; /* set local assignment bit */
       dev->net->dev_addr[0] &= 0xbf; /* clear "IP" bit */
    }
#endif
    usb_control_msg(
       interface_to_usbdev(intf),
       usb_sndctrlpipe(interface_to_usbdev(intf), 0),
        0x22,//USB_CDC_REQ_SET_CONTROL_LINE_STATE
        0x21,//USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE
        1, //active CDCDTR
        intf->cur_altsetting->desc.bInterfaceNumber,
        NULL, 0, 100);
}
#endif
err:
    return status;
}

 

3 make menuconfig配置选择

        1、内核模块

Kernel modules >>
    USB Support >>
        <*> Kmod -usb-core
        -*-Kmod -usb-net
        -*- kmod-usb-net-cdc-ether//【可选】
        <*> kmod-usb-net-cdc-mbim
        -*- kmod-usb-net-cdc-ncm
        <*> kmod-usb-net-cdc-subset//【可选】
        <*>kmod-usb-net-qmi-wwan
        <*>Kmod-usb-ohci     //这个选项一定要勾选,否则可能无法在系统中查看设备
        <*>Kmod-usb-serial
        <*>Kmod-usb-serial-option
        <*>Kmod-usb-serial-wwan
        <*>kmod-usb-uhci
        <*>Kmod-usb2

        2、网络配置

NetWork   >>
    <*>wwan
    <*>chat
    <*>ppp
    <*>uqmi
    <*>umbim

        3、Utilities配置

Utilities
  <*>comgt
  <*>usbutils//【可选,可查看usb设备】

        4、Luci配置

​
Luci
1. Collections
        <*> luci
3. Applications
        <*> luci-app-multiwan (optional to support multiple 3g dongles)//新版本为mwan3 【可选】
        <*> luci-app-qos (optional to provide QOS support)//【可选】
6. Protocols
        <*> luci-proto-3g
        -*- luci-proto-ppp

​

编译后可在打印信息处找到如下内容:

root@OpenWrt:/# 
[  636.398831] usb 1-1: new high-speed USB device number 2 using ehci-platform
[  636.571938] option 1-1:1.0: GSM modem (1-port) converter detected
[  636.578552] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[  636.586187] option 1-1:1.1: GSM modem (1-port) converter detected
[  636.592761] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[  636.600346] option 1-1:1.2: GSM modem (1-port) converter detected
[  636.606975] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[  636.614554] option 1-1:1.3: GSM modem (1-port) converter detected
[  636.621118] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
[  636.699344] qmi_wwan 1-1:1.4: cdc-wdm0: USB WDM device
[  636.704626] qmi_wwan 1-1:1.4: Quectel EC21&EC25&EC20 R2.0work on RawIP mode
[  636.728069] qmi_wwan 1-1:1.4 wwan0: register 'qmi_wwan' at usb-101c0000.ehci-1, WWAN/QMI device, c2:dc:08:c1:a5:62

        使用ls /dev/tty*命令可以看到

root@OpenWrt:/# ls /dev/tty*
/dev/tty      /dev/ttyS1    /dev/ttyUSB0  /dev/ttyUSB2
/dev/ttyS0    /dev/ttyS2    /dev/ttyUSB1  /dev/ttyUSB3

        使用ls /dev/c*命令可以看到

root@OpenWrt:/# ls /dev/c*
/dev/cdc-wdm0         /dev/console          /dev/cpu_dma_latency

        使用lsusb命令可以看到

root@OpenWrt:/# lsusb 
Bus 002 Device 001: ID 1d6b:0001 Linux 5.4.179 ohci_hcd Generic Platform OHCI controller
Bus 001 Device 002: ID 2c7c:0125 Android Android
Bus 001 Device 001: ID 1d6b:0002 Linux 5.4.179 ehci_hcd EHCI Host Controller

4、拨号

        1、quectel-CM

将quectel-CM文件夹放入openwrt根目录下package目录下

make menuconfig选中quectel-CM包编译即可生成可执行文件

在OpenWrt网页后台Network-Add New Interface选择DHCP Client选择新出现的wwan0,防火墙改为wan保存即可。

        2、ppp拨号

在OpenWrt网页后台Network-Add New Interface设置如下

 防火墙选择wan

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值