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

www.zige365.com 2007-8-21 17:04:30 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
 引言

   通用串行总线(USB)是一种快速而灵活地连接配件与计算机工作站的接口,其应用非常广泛。Linux中除了包含对USB主机控制器的驱动,还含有USB设备控制器,尤其是集成在StrongARM SA1110处理器上的控制器的驱动。这些控制器驱动通过使用USB可使基于Linux的嵌入式系统与主机 (运行的可以是Linux,或不是)进行通信。这里提供三种方法给运行Linux操作系统的嵌入式系统增加USB支持,可采用其中一种与USB主机展开通信。

   第一种,最复杂的设备采用专门编写的内核模块解析标准USB总线上通行的错综复杂的高层协议;相应的USB主机定制驱动和应用程序来完成连接。第二种,有些基于Linux的设备把总线当作一种简单的运行在主机上的点对点串行连接使用;主机应用程序采用主机操作系统提供的USB编程界面,而其外在表现则仿佛是在通过一种典型的串行端口进行通信。第三种,另有一些设备把USB看作一种以太网络,它们用主机作网关,把USB设备与办公LAN或 Internet相连接。通常的做法是使用专门的主机驱动实现它。

   最佳方案的选择取决于研发所需时间,以及针对具体嵌入式应用,要把USB接口作成什么样。以下对这三种方法如何在基于Linux的USB设备上的应用逐一进行描述。本文是关于如何在基于Linux的照相机和PDA之类的USB设备上使用Linux的论述,在此,USB是指由方形连接器而非扁平矩形连接器构成的USB设备。

   内核模块

   把USB加到基于Linux的设备上的第一种方法是编写一个定制的Linux内核模块。这种方法通常要求相应开发主机操作系统(Windows、Linux以及其它OS)的驱动。

   借助定制内核模块在设备中的安装,可以进行文件系统仿真等,使嵌入式应用将其USB主机当作远程存储设备对待。这一方法的另一潜在用途是构成一种存储转发字符设备,从嵌入式应用程序中缓冲数据流,直到USB主机连接完成建立为止。

   对于基于StrongARM的Linux设备,其USB应用内核模块调用sa1100_usb_open(),对管理芯片的板上USB设备控制器外设的内核代码进行初始化。然后该模块调用sa1100_usb_get_descriptor_ptr()和 sa1100_usb_set_string_descriptor(),通过枚举过程对USB主机的给定USB描述符进行设置。这些描述符包括设备供货商及产品的数字标识符、正文字符串等主机可用来对设备进行识别的信息。甚至有一个序列号域,以便主机唯一地识别设备或对USB上相同设备的多个实例加以区分。

   内核模块必须在开始USB通信前完成USB描述符的建立,这是因为枚举过程由USB设备控制器驱动,一旦USB主机连上后会自动执行。一切准备就绪后,USB设备模块便调用sa1100_usb_start(),告诉内核接受来自主机的USB连接请求。如果模块在USB主机连上前调用 sa1100_set_configured_ callback(),那么内核将会在枚举过程结束时调用所提供的回调函数。回调函数能很好地对设备完成连接状态进行可视化指示。

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

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