1. 程式人生 > >Linux 下使用USB 網路

Linux 下使用USB 網路

 Andrew Huang <[email protected]> 轉載請註明作者及聯絡方式.  在介紹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網路結構如下 二.Linux USB 網路搭建  USB Host安裝,以RHEL5為例,直接執行如下命令即可安裝 rndis_host.ko      modprobe rndis_host   它將安裝 rndis_host.ko和usbnet.ko
  1. [[email protected]]# find /lib/modules/2.6.18-194.el5/ -name "rndis*"
  2. /lib/modules/2.6.18-194.el5/kernel/drivers/usb/net/rndis_host.ko
  3. [[email protected]]# modprobe rndis_host
  4. [[email protected]]# lsmod | grep rndis_host
  5. rndis_host 10433 0
  6. cdc_ether 9793 1 rndis_host
  7. usbnet 19913 2 rndis_host,cdc_ether
在開發板上編譯好核心模組,g_ether.ko.執行如下命令    insmod g_ether.ko
  1. # insmod g_ether.ko
  2. g_ether gadget: ing random self ethernet address
  3. g_ether gadget: using random host ethernet addr
  4. usb0: MAC de:5e:8b:3d:84:db
  5. usb0: HOST MAC 32:90:92:52:a9
  6. g_ethethernet Gadget, morial Day 2008
  7. g_ether gadget: g_ether ready
  8. Registered gadget driver 'g_ether'
分別在主機和開發板之間抽入USB線,其中開發板使用D型的Slave端介面(不要插在HOST介面上!) 讓USB網絡卡結點生效,這裡一般是usb0  ifconfig usb0 192.168.3.101 up
  1. hub 1-0:1.0: unable to enumerate USB device 2
  2. g_ether gadget: high speed config #1: Chernet (ECM)
在主機端做類似配置,配成另一個IP即可 ifconfig usb0 192.168.3.120 up
  1. # ifconfig usb0 192.168.3.120 up
  2. usb 1-1: new high speed USB device using ehci_hcd and address 5
  3. usb 1-1: configuration #1 chosen from 2 choices
  4. 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中
  1. #define RNDIS_VENDOR_NUM 0x0525 /* NetChip */
  2. #define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */
 2.下載WINDOWS的RNDIS驅動.     http://www.microsoft.com/china/whdc/device/network/NDIS/rndis.mspx       或    如果不成功,去找一下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    如果不想修改,直接用我改好現成的  4.安裝驅動    在開發板與WINDOWS之間插入USB線。這時WINDOWS會提示安裝驅動,選擇手功安裝,並且選擇上一步的 sys所在目錄即可安裝            安裝後系統會出現一個RNDIS的網絡卡,配置IP即可與開發板通訊

相關推薦

Linux 網路攻擊

學習了虛擬機器的linux系統,想玩點有意思的,沒錯就是攻擊,給大家教一個簡單的arpspoof攻擊 這種攻擊會將對方電腦卡的掉線,注意這種操作是在同一區域網下的操作。 接下來說一說具體的步驟 第一步 安裝 sudo apt-get install dsniff ssl

系統日誌管理,時間同步服務,linux網路配置

####系統的日誌管理#### #2.rsyslog的管理# /var/log/messages ##服務資訊登陸 /var/log/secure ##系統登陸日誌 /var/log/cron ##定時任務日誌 /var/log/maillog ##郵件日誌 /var/log/boot.lo

linux網路通訊設定:openssh、PuTTY、tightVNC

OpenSSH的安裝: windows上安裝PuTTY:  PuZZY上傳檔案到linux:  1.在window下的cmd中cd到PuZZY所在的資料夾下 2.使用pscp命令上傳檔案 3.使用pscp命令下載檔案     ti

Linux網路配置--ip 閘道器 dns

Linux下的網路配置 ip的基礎知識 1、什麼是IP ADDRESS internet protocol address          ##網路協議地址 ipv4  &

linux網路服務

1.apache 企業中常用的web服務,用來提供http://(超文字傳輸協議) Apache HTTP Server(簡稱Apache)是Apache軟體基金會的一個開放原始碼的網頁伺服器,可以在大多數計算機作業系統中執行,由於其多平臺和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。它

linux網路配置gfg

linux下的網路配置 什麼是IP address internet protocol address ##網路協議地址 ipv4:internet protocol version 4 ip是由32個01組成,即1.2x32(11111110.11111

part_03 : linux網路管理

基礎知識 ipv4: 2進位制32位-----10進位制 172.25.0.10/255.255.255.0 172.25.0.10:ip地址 255.255.255.0:子網掩碼(實現子網的劃分) 子網掩碼:用來劃分網路區域,255位對應的ip位為網路位,網路

linux網路配置

一、IP ADDRESS         IP地址是指網際網路協議地址(英語:Internet Protocol Address,又譯為網際協議地址),是IP Address的縮寫。IP地址是IP協議提供的一種統一的地址格式,它為網際網路上的每一個網路和每一臺主機分配一個邏

LinuxUSB轉串列埠驅動

Linux發行版自帶usb to serial驅動,以模組方式編譯驅動,在核心原始碼目錄下執行Make MenuConfig選擇Devces drivers-->USB seupport--> <M>USB Serial Converter support --> <M

Linux網路裝置驅動(一)

網路裝置介面層主要是為變化多端的網路定義了一個統一且抽象的net_device,實現了多種硬體在軟體層次上的統一。網路裝置驅動主要是填充net_device的成員並註冊net_device來實現硬體操作函式和核心的掛接。通常情況下,網路裝置驅動以中斷方式接受資料,而net_device中則定義了poll_co

linuxUSB轉串列埠的設定

在linux下利用簡訊modem傳送簡訊,由於簡訊modem使用的是USB串列埠轉換器(晶片為PL2303),把在配置和除錯的過程和方法在此記錄下,希望給有同樣需求的同仁提供一點幫助。 【一】、驅動相關說明:如果直接使用串列埠線,而沒有用到USB轉串列埠裝置,就不需要安裝驅

linux網路儲存ISCSI

服務端 下載安裝服務 yum install targetcli.noarch -y fdisk /dev/vdb 關閉狀態不用啟動   通過命令新增共享裝置 進入targetcli   建立塊儲存 /backsto

基於arm平臺linuxUSB音效卡驅動安裝和使用

核心配置 <*> Advanced Linux Sound Architecture —> usb音效卡安裝 1.apt-get install alsa-base 2

linux USB 攝像頭的使用說明

此處我只說用uvc通用驅動 查詢攝像頭是否是UVC裝置,參見官網 1 找到CAMERA ID 2 lsusb -d VID:PID -v | grep “14 Video” 如果輸出有下面資訊說明支援 bFunctionClass

Linux ACE 網路庫的編譯安裝

這裡使用的環境是rehat,centos也類似 下載 下載連結進去找任意找一個版本,wget 到本地,然後用 tar 解壓。比如我這裡使用6。4。6 mkdir ace cd ace wg

linux網路配置詳解

debian下的網路配置檔案地址: /etc/network/interfaces # The loopback network interface  auto lo iface lo inet loopback # The primary network interfac

LinuxSocket網路程式設計send和recv使用注意事項

1.send函式 ssize_t send( SOCKET s, const char *buf, size_t len, int flags ); (1)send先比較待發送資料的長度len和套接字s的傳送緩衝的長度, 如果len大於s的傳送緩衝區的長度,

Linux訪問網路檔案系統

1   smbclient  //ip/sharename [[email protected] mnt]# smbclient //172.25.254.253/westos Enter root's password: Domain=[USER-20161030DE] OS=[Windows

Linux C 網路程式設計之 多執行緒通訊 例項

簡單示例,有不對的地方,歡迎指點。 伺服器端 /* ============================================================================ Name : sockThreadServer

ARM9+LinuxUSB攝像頭影象採集

終於實現了在Micro2440+Linux2.6.29環境下通過NFS檔案系統實現USB攝像頭影象採集。在此,做一個總結,以備後續參考。  實驗條件:RedHat9.0(核心版本2.4.18),Micro2440開發板,Linux2.6.29(arm9),ANC