基于Linux的USB设备的详细介绍

文章作者 100test 发表时间 2007:03:14 16:00:38
来源 100Test.Com百考试题网


引言

通用串行总线(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(),那么内核将会在枚举过程结束时调用所提供的回调函数。回调函数能很好地对设备完成连接状态进行可视化指示。

相关文章


Linux系统笔记本基于“敲打”的命令
Linux系统配置与优化经验谈
第三方认证考试-大纲:LPIC202考纲(九)
绝对好用Linux操作系统的8个经典技巧
基于Linux的USB设备的详细介绍
第三方认证考试-大纲:LPIC202考纲(十)
Linux网络安全之经验谈(2)
第三方认证考试-大纲:LPIC202考纲(八)
Linux系统管理员秘技:用快捷命令一招制胜
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛