天天看點

linux下使用網絡

在介紹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下使用網絡

  如果是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: && USB_ETH │

│ Location: │

│ -> Device Drivers │

│ -> USB support (USB_SUPPORT [=y]) │

│ -> USB Gadget Support (USB_GADGET [=y]) │

│ -> USB Gadget Drivers ( [=m]) │

│ -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n │

   [ 點選檢視大圖]

linux下使用網絡

  是以一個完整RNDIS網絡結構如下   [ 點選檢視大圖]

linux下使用網絡

  二.Linux USB 網絡搭建

  USB Host安裝,以RHEL5為例,直接運作如下指令即可安裝 rndis_host.ko

  modprobe rndis_host

  它将安裝 rndis_host.ko和usbnet.ko

[root@hxy]# find /lib/modules/2.6.18-194.el5/ -name “rndis*”

/lib/modules/2.6.18-194.el5/kernel/drivers/usb/net/rndis_host.ko

[root@hxy]# modprobe rndis_host

[root@hxy]# lsmod | grep rndis_host

rndis_host 10433 0

cdc_ether 9793 1 rndis_host

usbnet 19913 2 rndis_host,cdc_ether

  在開發闆上編譯好核心子產品,g_ether.ko.執行如下指令

  insmod g_ether.ko

insmod g_ether.ko

g_ether gadget: ing random self ethernet address

g_ether gadget: using random host ethernet addr

usb0: MAC de:5e:8b:3d:84:db

usb0: HOST MAC 32:90:92:52:a9

g_ethethernet Gadget, morial Day 2008

g_ether gadget: g_ether ready

Registered gadget driver ‘g_ether’

  分别在主機和開發闆之間抽入USB線,其中開發闆使用D型的Slave端接口(不要插在HOST接口上!) 讓USB網卡結點生效,這裡一般是usb0

  ifconfig usb0 192.168.3.101 up

hub 1-0:1.0: unable to enumerate USB device 2

g_ether gadget: high speed config #1: Chernet (ECM)

  在主機端做類似配置,配成另一個IP即可

  ifconfig usb0 192.168.3.120 up

ifconfig usb0 192.168.3.120 up

usb 1-1: new high speed USB device using ehci_hcd and address 5

usb 1-1: configuration #1 chosen from 2 choices

usb0: register ‘cdc_ether’ at usb-0000:00:1d.7-1, CDC Ethernet Device, 32:90:26:92:52:a9

  這時在兩端即可以互相 ping 通。

  三.與Windows 建立聯接。

  如果希望與Windows 建立RNDIS網絡聯接,需要下載下傳RNDIS驅動,并且根據g_ether.ko的産商号和裝置号調整安裝INF檔案。

  1.确定VID和PID

  首先确認g_ether.ko的RNDIS的vendor号和product号.它的定義在 drivers/usb/gadget/ether.c中

define RNDIS_VENDOR_NUM 0x0525 /* NetChip */

define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */

  2.下載下傳WINDOWS的RNDIS驅動.

  ;  

  或

  如果不成功,去找一下RNDIS-USB-Kit_05.exe 這個檔案。它是一個壓縮檔案,其中的rndismpy.sys,usb8023y.sys就是驅動檔案.

  3.修改安裝inf檔案

  以其中的RNDIS_Template.inf為藍本修改安裝檔案。主要修改兩個地方:

  把 mm/dd/yyyy,x.y.v.z 修改成任意的時間和版本号,我修改是 09/28/2011,1.0.0.0

  (注意有兩處)

  把 USB\VID_vvvv&PID_pppp 修改成查到的數字,這裡必須是Linux定義的 USB\VID_0525&PID_A4A2

  把inf和兩個sys放在一起,随意取個名字,我取名 hxy_rndis.inf

  如果不想修改,直接用我改好現成的

   hxy_rndis.zip

  4.安裝驅動

  在開發闆與WINDOWS之間插入USB線。這時WINDOWS會提示安裝驅動,選擇手功安裝,并且選擇上一步的 sys所在目錄即可安裝

linux下使用網絡

  

linux下使用網絡

    安裝後系統會出現一個RNDIS的網卡,配置IP即可與開發闆通訊

linux下使用網絡

繼續閱讀