歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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為動態模塊 它位於    
  1. │ Prompt: Host for RNDIS and ActiveSync devices (EXPERIMENTAL) │
  2. │ Defined at drivers/net/usb/Kconfig:234                        │
  3. │ Depends on: NETDEVICES && USB && NET && USB_USBNET && EXPERIMENTAL │
  4. │ Location: │
  5. │ -> Device Drivers                                             │
  6. │ -> Network device support (NETDEVICES [=y])                   │
  7. │ -> USB Network Adapters │
  8. │ -> Multi-purpose USB Networking Framework (USB_USBNET [=m])   │
   
如果是WINDOWS主機,則需要安裝MS的Generic RNDIS驅動。
在USB的另一端,一般是嵌入式設備,以嵌入式LINUX為例,需要安裝USB Gadget驅動g_ether.ko 來進行通訊。g_ether.ko在配置菜單位置如下
  1. Symbol: USB_ETH_RNDIS [=n] │
  2. │ Prompt: RNDIS support │
  3. │ Defined at drivers/usb/gadget/Kconfig:609 │
  4. │ Depends on: <choice> && USB_ETH │
  5. │ Location: │
  6. │ -> Device Drivers │
  7. │ -> USB support (USB_SUPPORT [=y]) │
  8. │ -> USB Gadget Support (USB_GADGET [=y]) │
  9. │ -> USB Gadget Drivers (<choice> [=m]) │
  10. │ -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n │


因此一個完整RNDIS網絡結構如下
Copyright © Linux教程網 All Rights Reserved