首页>计算机>Linux认证>应用技术>正文
基于Linux的USB设备的详细介绍

www.zige365.com 2007-8-21 17:04:30 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
 twiddle_descriptors ()功能建立起设备的USB描述符。在描述符全部建起后,准备从USB主机枚举并接收一个数据帧。kick_start_rx()所需的代码大多数情况下只是一种对sa1100_usb_recv() 的调用以建立回调而已。当USB主机发送数据包时,设备的内核通过回调调用rx_done_callback_packet_buffer()函数,把数据包的内容移入usb-char 设备点上由read()返回的FIFO队列。

   主机

   对于运行Linux的USB主机,usb-char相应的USB主机模块称为usbserial模块。大多数Linux版本都包括Usbserial模块,尽管通常不是自动装入。在USB与设备的连接建立之前,usbserial 由modprobe 或 insmod载入。

   一旦USB设备开始枚举,主机上的应用程序便用usbserial设备点(字符型,最大188,最小0以上)之一与设备进行通信。这些节点通常命名为/dev/ttyUSBn。Usbserial模块在内核报文日志记录中报告它把哪个节点指定给USB设备使用:

   usbserial.c: 通用转换器删除

   usbserial.c: 通用转换器当前连到ttyUSB0上。连接建立后,USB主机上的应用程序便通过读写指定的节点与USB设备进行通信。

   Linux 主机上usbserial模块的一种替代选择是一种称作libusb(libusb.sourceforge.net)的库。这种库使用低层内核系统调用进行USB数据传输,而不是通过usbserial模块,在某种程度上跨Linux内核版本建立和使用时更方便。Libusb库还提供大量有用的调试功能,这一点在对运行在USB链路上的复杂通信协议进行除错时有帮助。用libusb与采用usb-char的USB设备进行通信时,Linux主机应用程序使用usb_open()函数建立与该设备的连接。然后应用程序使用usb_bulk_read()和usb_bulk_write()与设备交换数据。

   USB上的以太网

   另一种选择是把USB作为一种以太网络来对待。Linux具有在主机和设备端均可实现这种功能的模块。由于iPAQ硬件既没有可接入的串行端口也没有一种专用的网络接口,因此,iPAQ 的Linux内核专门采用这种通信策略,在StrongARM的Linux内核中,usb-eth模块(arch/arm/mach- sa1100/usb-eth.c)对用USB作物理媒介的虚构以太网设备进行仿真。一旦创建后,这一网络界面便被指定一个IP地址,否则作为通常的以太网硬件对待。一旦USB主机连上后,usb-eth模块便能使USB设备“看到” Internet(如果存在Internet的话),ping测其它IP地址,甚至“谈论”DHCP, HTTP, NFS, telnet, 和e-mail。简言之,任何在实际的以太网界面上运行的应用将不折不扣地在usb-eth接口上得到实现,因为它们不能分辨出其正在使用的不是实在的以太网硬件。

   主机

   在Linux主机上,相应的Ethernet-over-USB内核模块称为usbnet。当usbnet模块得到安装且设备的USB连接建立完成时,usbnet模块便针对主机端内核及用户应用创建一个与实际硬件酷似的虚构以太网界面,主机端应用程序通过运行设备IP地址 ping测,可以检查USB设备的存在。如果ping测成功,设备便加上了。

   结语

   Linux不再只是USB主机使用,当今它也是USB设备的合适选择,Linux 下的USB通信是非常灵活和易用的。

本新闻共3页,当前在第3页  1  2  3  

我要投稿 新闻来源:USB开发网 编辑: 作者:
相关新闻
红旗linux认证模拟题库仅供参考(1)
红旗linux认证模拟题库仅供参考(2)
红旗linux认证模拟题库仅供参考(3)
红旗linux认证模拟题库仅供参考(5)
红旗linux认证模拟题库仅供参考(6)
红旗linux认证模拟题库仅供参考(7)