良许Linux教程网 干货合集 详解Linux 下使用USB 网络

详解Linux 下使用USB 网络

USB网络是Linux系统中一种特殊的网络类型,它用来实现通过USB接口来连接和共享网络设备,如网卡,打印机,摄像头等。USB网络的优点是可以跨越不同的网络协议和物理介质,提高网络的灵活性和可扩展性。USB网络的实现涉及到USB/IP项目,usbip工具,vhci-hcd模块等概念。在本文中,我们将介绍Linux下使用USB网络的原理和方法12,包括设置USB网络服务器和客户端,列出和绑定USB网络设备,连接和断开USB网络设备等,并举例说明它们的使用方法和注意事项。

应用场景:

一.智能手机共享网络

现在智能手机采用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])  │
img
img

如果是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:  && USB_ETH │
5. │ Location: │
6. │ -> Device Drivers │
7. │ -> USB support (USB_SUPPORT [=y]) │
8. │ -> USB Gadget Support (USB_GADGET [=y]) │
9. │ -> USB Gadget Drivers ( [=m]) │
10. │ -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n │
img
img

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

img
img

二.Linux USB 网络搭建

USB Host安装,以RHEL5为例,直接运行如下命令即可安装 rndis_host.ko

modprobe rndis_host

它将安装 rndis_host.ko和usbnet.ko

1. [root@hxy]# 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. [root@hxy]# modprobe rndis_host
4. [root@hxy]# 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
5.  

 

这时在两端即可以互相 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

http://gp2x.generation.free.fr/public/Autres/

如果不成功,去找一下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

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

img hxy_rndis.zip

4.安装驱动

在开发板与WINDOWS之间插入USB线。这时WINDOWS会提示安装驱动,选择手功安装,并且选择上一步的 sys所在目录即可安装

img

img

img
img

安装后系统会出现一个RNDIS的网卡,配置IP即可与开发板通讯

img
img

通过本文,我们了解了Linux下使用USB网络的原理和方法,它们可以用来实现对USB网络设备的连接和共享。我们应该根据实际需求选择合适的方法,并遵循一些基本原则,如使用正确的TCP端口,使用正确的设备号,使用正确的usbip命令等。USB网络是Linux系统中一种有用而灵活的网络类型,它可以实现对不同类型和位置的网络设备的访问和控制,也可以提升网络的性能和可靠性。希望本文能够对你有所帮助和启发。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部