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

本文详细介绍了如何在Linux系统中配置Air780e的USB驱动,包括使用CDC-ACM驱动、修改内核添加VID/PID、零包机制及重启恢复功能。通过烧写内核验证了RNDIS功能的实现和网络连接测试。
摘要由CSDN通过智能技术生成

一,  驱动配置

  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:联网测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值