当前位置:   article > 正文

Air780e模块在linux设备上的RNDIS网卡使用_air780e linux 应用

air780e linux 应用

一,  驱动配置

  Air780e 是基于RK3588 平台开发的,使用CDC - ACM 驱动,大部分linux 系统默认就支持,插入就可以使用,如果不支持使用如下配置

        1. 虚拟串口

2. RNDIS

  Air780E 的 是标准的 rndis,因此一般的linux 就可以 ,按照下图下图配置

或修改.config:kernel/arch/arm64/configs$ vi OK3588-Linux_defconfig

CONFIG_USB_NET_RNDIS_HOST=m

CONFIG_USB_NET_RNDIS_WLAN=m

具体使用方法,详见:https://doc.openluat.com/wiki/37?wiki_page_id=4465

二,驱动修改

  对Linux内核驱动做一定的修改,使操作系统能够支持Air780e。

    1.Add VID add PID

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

static const struct usb_device_id option_ids[] = {
    //+add by airm2m for Air780e
    { USB_DEVICE(0x19d1, 0x001) },
     //-add by airm2m for Air780e
   { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
    { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },   
 2. Add the Zero Packet Mechanism   

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

static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
                      int endpoint,                                                              
                      int dir, void *ctx, char *buf, int len,
                      void (*callback) (struct urb *))
{
    struct usb_serial *serial = port->serial;
    struct urb *urb;
    urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
    if (!urb)
        return NULL;
    usb_fill_bulk_urb(urb, serial->dev,
              usb_sndbulkpipe(serial->dev, endpoint) | dir,
              buf, len, callback, ctx);
    //+add by airm2m for Air780e
    if(dir == USB_DIR_OUT){
        struct usb_device_descriptor *desc = &serial->dev->descriptor;
        if(desc->idVendor == cpu_to_le16(0x1286) && desc->idProduct ==         cpu_to_le16(0x4e3d))
        {
            urb->transfer_flags |= URB_ZERO_PACKET;
        }
    }
    //-add by airm2m for Air780e
    return urb;
}
   3. Add Reset Resume

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

static struct usb_serial_driver option_1port_device = {
    .driver = {                                                                                                  
        .owner =    THIS_MODULE,
        .name =     "option1",
    },   
    ....
#ifdef CONFIG_PM
    .suspend           = usb_wwan_suspend,
    .resume            = usb_wwan_resume,
    //+add by airm2m for Air780e
    .reset_resume      = usb_wwan_resume,
    //-add by airm2m for Air780e
#endif
};

三,烧写内核验证

  Air780e正常启动后,通过USB连接到linux设备上,驱动正常加载后会产生一个可以联网的RNDIS网卡:

模块VIDPIDDevice
Air780e0x19d10x001eth网卡(RNDIS网卡)

1. USB连接Air780e模块和linux设备

 

通过lsusb查看模块的vid与pid,分别是19d10001

只要通过USB连接Air780e模块就可以直接用了,模块开机后就会在linux设备端看到新的网卡,如下图:

注意:

  • i. 每个设备的ethx可能不一样,插入Air780e模块后增加的网卡即为RNDIS网卡,地址为192.168.10.x

  • ii. 如果没能正常识别网卡,可以通过dmesg命令参看一下usb驱动加载情况,下图是rndis驱动加载正常的情况:

2. RNDIS功能测试

  • step 1:禁用本地网卡
sudo ifconfig eth0 down
  • step 2:使能模块网卡
sudo ifconfig eth2 up

使能之后最好再通过ifconfig再次确认一下

  • step 3:联网测试

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号