当前位置:   article > 正文

适配移远RG200U-5G模块_rg200u 5g 显示 usb0 没有 wwan

rg200u 5g 显示 usb0 没有 wwan

内核下宏支持:

ppp:
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOE=y
CONFIG_PPPOLAC=y
CONFIG_PPPOPNS=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLIP=y
CONFIG_SLHC=y
rndis:
CONFIG_USB_USBNET=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_RNDIS_HOST=y
options:
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

kernel下涉及文件:

drivers/usb/serial/option.c
drivers/usb/serial/usb_wwan.c
  • 1
  • 2

添加模块的vid和pid,找到drivers/usb/serial/option.c文件中option_ids数组

static const struct usb_device_id option_ids[] = {
 { USB_DEVICE(0x2C7C, 0x0900) },
 .....
 {}
 }
  • 1
  • 2
  • 3
  • 4
  • 5

重新编译内核,烧写到开发板,可以看到模块默认为ncm,但加载的节点只有两个,且发送不了at指令

将drivers/usb/serial/option.c文件中option_probe函数做如下修改:

#if 0 //Added by Quectel   
        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;
        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;
        if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
                __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
                __u8 bInterfaceNumber = serial->interface->cur_altsetting->desc.bInterfaceNumber;
                //Quectel module's some interfaces can be used as USB Network device (ecm, rndis, mbim)
                if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF)
                        return -ENODEV;
                if ((idProduct&0xF000) == 0x6000) {
                        //ASR interface 4 is modem port
                }
                else if ((idProduct&0xF000) == 0x8000) {
                        //HISI interface 0 is NCM
                        if (bInterfaceNumber == 0)
                                return -ENODEV;
                }
                else if ((idProduct&0xF000) == 0x0000) {
                        //MDM interface 4 is QMI
                        if (bInterfaceNumber >= 4) {
                                return -ENODEV;
                        }
                }
        }
#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

添加零包机制,在drivers/usb/serial/usb_wwan.c,做如下修改:

找到usb_wwan_setup_urb函数:
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -504,7 +504,13 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
        usb_fill_bulk_urb(urb, serial->dev,
                          usb_sndbulkpipe(serial->dev, endpoint) | dir,
                          buf, len, callback, ctx);
-
+       #if 1
+               if (dir == USB_DIR_OUT) {
+                       struct usb_device_descriptor *desc = &serial->dev->descriptor;
+                       if (desc->idVendor == cpu_to_le16(0x2C7C))
+                               urb->transfer_flags |= URB_ZERO_PACKET;
+               }
+       #endif
        return urb;
 }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

做完以上步骤重新编译,烧写到开发板,将会看到完整加载后的ttyUSB节点和usb0网卡节点
在这里插入图片描述
一切准备就绪可以通过以下命令来进行测试网络。

直接进行拨号:dhclient -v usb0  或者  udhcpc -i usb0
如果有问题的话可通过at指令来配置。
(1)at指令配置:
at+qcfg="ethernet",0   //配置成USB模式
at+qcfg="nat",0       //配置成网卡模式
at+qcfg="usbnet",5    //配置NCM拨号方式
at+qcfg="usbnet",1    //ecm
AT+QCFG="usbnet",3    //rndis
重启生效,发送at指令at+cfun=1,1
(2) at+qeng=”servingcell”确认是否注网,注网后,at+qnetdevctl=1,1,1执行拨号
(3) ifconfig –a查看网卡,route –n查看路由表,然后用ping命令测试网络

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/602294
推荐阅读
相关标签
  

闽ICP备14008679号