Linux 下使用USB 网络

  在介绍USB的驱动开发时,我通常会用用Linux的的USB网络来演示,它兼容RNDIS网络,一台Linux即可充当USB的device端,也可以由另一台Linux来充当USB的Host端,Host端的也可以由安装的微软的标准的Rndis驱动来充当.


  这种网络有相当强的实用价值,而且完整实现的Linux USB Slave驱动和Linux USB Gadget两种驱动,因此有很强演示效果.


  应用场景:

   一.智能手机共享网络

     现在智能手机采用3G网络,通过Linux/Android手机上安装相关驱动,可以用USB线在主机和手机建一个共享网络,这样智能手机充当一个无线路由器的功能.现在手机一般都有这个功能,WINDOWS安装Rndis驱动即可.而且就是用的我们后面提到的g_ether.ko驱动.

     这种方式,远远优于把手机当成3G的modem,用USB来拨号这种方式,共享网络相当于手机和电脑都上网不误.

   这种方式跟用手机WIFI作无线热点的功能一样,但是APN的实现的要求较高,很多手机不一定能支持,而且USB还有同时供电.还是有其优点.


 二.增加第二个有线网络.

   在教室上课时,很多时候服务器和学生用机只有一个网络口接口,我把网线接到局域网时,我的开发板就无法用NFS接我的机器,学生机也是如此,现在服务器上把有线网络接入局域网,而我的开发板与服务器则直接相连.


   

一.USB 网络的结构


  在与以太网不同,在USB网络里各终端不是对等的,即USB Host端和USB Device端的所需要软件和硬件接口不一样.

   USB网络有很多种,其中用得最多是RNDIS网络。它的全称是

   Remote Network Device Interface Specification.


     它是由微软制定的规范,因为手机使用用得较多,因此LINUX也在驱动中兼容这个规范

  (PS:Android手机这个功能几乎是标配,而手机需要支持的功能FAT,RNDIS,MTP(媒体传输协议),都是MS的专利,这几张牌成了MS向Android手机制造产家收取专利费的重要武器,三星已经交了钱了)


  一般象PC机充当USB Host角色,带USB Host的接口的Linux开发板也可以充当这个角色.

   如果是LINUX主机,需要安装安装 rndis_host.ko 这个驱动。一般发行版均已经编译好,直接运行即可。

  如果嵌入式开发板可以配置内核的rndis_host为动态模块

它位于

   

│ Prompt: Host for RNDIS and ActiveSync devices (EXPERIMENTAL) │ │ Defined at drivers/net/usb/Kconfig:234                        │ │ Depends on: NETDEVICES && USB && NET && USB_USBNET && EXPERIMENTAL │ │ Location: │ │ -> Device Drivers                                             │ │ -> Network device support (NETDEVICES [=y])                   │ │ -> USB Network Adapters │ │ -> Multi-purpose USB Networking Framework (USB_USBNET [=m])   │

Linux 下使用USB 网络

   


如果是WINDOWS主机,则需要安装MS的Generic RNDIS驱动。


在USB的另一端,一般是嵌入式设备,以嵌入式LINUX为例,需要安装USB Gadget驱动g_ether.ko 来进行通讯。g_ether.ko在配置菜单位置如下

Symbol: USB_ETH_RNDIS [=n] │ │ Prompt: RNDIS support │ │ Defined at drivers/usb/gadget/Kconfig:609 │ │ Depends on: <choice> && USB_ETH │ │ Location: │ │ -> Device Drivers │ │ -> USB support (USB_SUPPORT [=y]) │ │ -> USB Gadget Support (USB_GADGET [=y]) │ │ -> USB Gadget Drivers (<choice> [=m]) │ │ -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n │

Linux 下使用USB 网络



因此一个完整RNDIS网络结构如下


Linux 下使用USB 网络

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wysygf.html