hi3559平台增加USB网卡(RNDIS/Ethernet Gadget)功能

第一章 RNDIS 介绍

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

第2章 USB Gadget驱动架构

    
hi3559平台增加USB网卡(RNDIS/Ethernet Gadget)功能_第1张图片

第3章 内核驱动添加

根据上面的驱动架构,需要添加RNDIS的API驱动和gadget driver。
在linux的根目录下执行:
make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig
依次进入:
    Device Drivers —>
        [*] USB support —>
            <*> USB Gadget Support —>
                         Ethernet Gadget (with CDC Ethernet support)
                         [*] RNDIS support

如下图所示:
hi3559平台增加USB网卡(RNDIS/Ethernet Gadget)功能_第2张图片
重新编译内核 即可生成相应的ko文件。
当然海思3559平台 USB控制器的驱动也是需要的,默认是支持的,这里不需要额外添加。

第4章 驱动加载

 
将驱动拷贝到板端的komod路径
加载顺序如下:

insmod /komod/usbcore.ko
insmod /komod/phy-hisi-usb.ko
insmod /komod/configfs.ko
insmod /komod/udc-hisi.ko
insmod /komod/libcomposite.ko
insmod /komod/u_ether.ko 
insmod /komod/usb_f_rndis.ko 
insmod /komod/usb_f_ecm.ko
insmod /komod/usb_f_ecm_subset.ko
insmod /komod/g_ether.ko

注意:必须确保USB是工作在slave模式的,如果不是需要更改寄存器配置:

himm(0x12030078 ,0x800311a0);

第5章 网络配置

5.1 板端网络配置

驱动加载完成之后ifconfig –a以看到板端会有一个usb0的网卡设备出现,
通过以下命令配置网络:

ifconfig usb0 192.168.1.10 netmask 255.255.255.0

设置为ip 192.168.1.10 子网掩码255.255.255.0

5.2 PC端网络配置

插入到PC上之后,会识别成一个RNDIS/Ethernet Gadget网络设备,驱动一般会安装不成功,

5.2.1 方法一:

   我是win7的系统,按照以下步骤已经安装成功
       在设备管理器中选中未安装驱动的RNDIS/Ethernet Gadget device,
            --》 升级驱动程序 
            --》 手动选择驱动程序 
            --》 从计算机的驱动程序列表中选择
              --》(网络适配器,如果要求选择设备类型的话)
              --》 Microsoft Corporation -> Remote NDIS Compatible Device,

然后会有提示不建议安装此驱动程序因为无法确认是否与硬件相匹配, 请忽略警告,继续。

5.2.2 方法二:

打开 设备管理器 –>
网络适配器–>
RNDIS/Ethernet Gadget
更新驱动程序
手动选择 linux RNDIS/Ethernet Gadget驱动进行安装
如果安装不上,需要自己修改的“rndis.inf”配置文件,即需要根据你设备的pid和vid来修改inf文件之后才能安装上驱动。
RNDIS driver:
RNDIS driver

5.2.3 PID 和VID查看方法

  1. 从windows的设备管理器中查看即使还没有驱动程序)
    hi3559平台增加USB网卡(RNDIS/Ethernet Gadget)功能_第3张图片

  2. 查看linux设备的驱动程序设备描述符:

   drivers/usb/gadget/legacy/ether.c
static struct usb_device_descriptor device_desc = { 
    .bLength =      sizeof device_desc,
    .bDescriptorType =  USB_DT_DEVICE,

    .bcdUSB =       cpu_to_le16 (0x0200),

    .bDeviceClass =     USB_CLASS_COMM,
    .bDeviceSubClass =  0,  
    .bDeviceProtocol =  0,  
    /* .bMaxPacketSize0 = f(hardware) */

    /* Vendor and product id defaults change according to what configs
     * we support.  (As does bNumConfigurations.)  These values can
     * also be overridden by module parameters.
     */
    .idVendor =     cpu_to_le16 (CDC_VENDOR_NUM),
    .idProduct =        cpu_to_le16 (CDC_PRODUCT_NUM),
    /* .bcdDevice = f(hardware) */
    /* .iManufacturer = DYNAMIC */
    /* .iProduct = DYNAMIC */
    /* NO SERIAL NUMBER */
    .bNumConfigurations =   1,  
};     

PC端的网卡IP配置为192.168.1.*, 即可相互ping通了

你可能感兴趣的:(海思平台(hisi))