Linux 下使用USB 网络

12 篇文章 0 订阅
5 篇文章 0 订阅
  Andrew Huang <bluedrum@163.com> 转载请注明作者及联络方式.

 在介绍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. [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


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

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

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

   
  
   
    安装后系统会出现一个RNDIS的网卡,配置IP即可与开发板通讯
  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Linux USB Camera是指在Linux操作系统下使用USB摄像头。Linux是一种开放源代码的操作系统,具有高度的灵活性和可定制性。Linux USB Camera可以通过USB接口与计算机连接,用于拍摄图像或视频。以下是关于Linux USB Camera的一些特点和使用情况: 首先,Linux操作系统具有广泛的设备支持,包括各种USB摄像头。许多摄像头制造商都提供了针对Linux的驱动程序和软件,以确保其设备在Linux上的兼容性。这为用户提供了更多选择,以找到适合其需求的USB摄像头。 其次,在Linux使用USB摄像头非常简单。大多数Linux发行版都附带了通用的摄像头驱动程序(如Video4Linux),这使得安装和配置摄像头变得更加容易。用户只需插入USB摄像头,打开相应的应用程序或命令行工具,即可开始使用摄像头。 此外,Linux还提供了许多强大的摄像头应用程序和工具。例如,Cheese是一款常用的摄像头应用程序,可用于拍摄照片和录制视频。FFmpeg则是一种流行的多媒体框架,可用于处理和编辑从摄像头获取的视频。这些工具为用户提供了更多的功能和定制选项。 最后,Linux USB摄像头还可以与其他应用程序和服务集成。例如,用户可以在视频会议、视频监控、图像识别等场景下使用USB摄像头。网络摄像头还可以与流媒体服务器一起使用,实现远程监控和视频直播。 总之,Linux USB摄像头在Linux操作系统中具有广泛的支持和应用场景。用户可以根据自己的需求选择适合的摄像头,并借助Linux丰富的摄像头应用程序和工具,实现各种功能和定制。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值