基于linux系统USB 键盘驱动设计文献综述
2020-04-07 15:26:21
一、 Linux USB键盘设计的背景和意义 Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。 随着计算机硬件飞速发展,外围设备日益增多,键盘、鼠标、调制解调器、打印机、扫描仪早已为人所共知,数码相机、MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的。USB是一个使计算机周边设备连接标准化、单一化的接口。 键盘是最常见的计算机输入设备,它广泛应用于微型计算机和各种终端设备上,计算机操作者通过键盘向计算机输入各种指令、数据,指挥计算机的工作。计算机的运行情况输出到显示器,操作者可以很方便地利用键盘和显示器与计算机对话,对程序进行修改、编辑,控制和观察计算机的运行。 伴随智能化时代到来,人们通过与操作系统交互来实现生活的智能化。而USB键盘凭借与主机连接方便,并且通信速度快,且有简单的操作。Linux操作系统已在越来越多的硬件平台上移植,尤其是在嵌入式领域更是得到广泛的应用。因此开发USB键盘驱动程序显得越来重要。 二、 USB键盘驱动的实现方式 首先对USB键盘驱动所提供的功能进行定义,用C语言实现相应的功能函数。 编译并调试代码,若有错误,则分析修改代码,重新编译调试;若无错误,则将USB键盘驱动加载到内核,实现对USB键盘的支持。
三、USB通信协议 数据通信协议部分是USB的核心内容。主要包括:以差模串行信号为载体传送二进制代码来传输信号;数据包作为最基本的完整信息单元,包含一系列数据信息。数据包可以分解为更小的单元#8212;域;以包为基础,构成USB的三种事务。进而,组合不同的传输类型,传输各种类型的数据,实现USB的各种功能。 包是USB最基本的数据单元,每个包,基本包含一个完整的USB信息。按照其在整个USB数据传输中的作用不同,包分为三类:令牌包、数据包和握手包。他们之间的区别是由更小的单元#8212;域来划分的。域又分为七类:同步序列域、包标识域、地址域、端点域、帧号域、数据域和CRC校验域。 以包为基础,USB定义了四种数据的传输类型:控制传输、中断传输、批量传输和同步传输。每一种类型都由一定的包按照某种特定的格式组成。不同的传输类型的最大传输速度、占用USB总线的带宽、传输数据的总量和应用场合等都是不同的。传输是一种比较笼统的说法,在实际的数据传输中,往往还需要细分为多个数据交换过程,每一次的数据交换过程既不能叫做某种传输,也不是包,而是另外一个重要的概念#8212;处理事务。每种传输方式都由多个处理事务来完成,每一笔处理事务由底层包组成。域、包、处理事务和传输的关系就是实现USB通信的过程。 为了细化USB的通信机制,USB协议的开发者采用了分层的概念,每一层传输的数据结构对其他逻辑层是透明的,USB设备和USB主机通信的逻辑结构和每层的逻辑通道。为了便于理解USB协议,将USB通信逻辑上分成了三层:信号层、协议层和数据传输层。信号层用来实现在USB设备和主机的物理连接之间传输位信息流的信息。协议层用来实现USB设备和USB主机端的系统协议软件之间传输包字节流的信息,它们在信号层被编码成NRZI位信息后传送出去。数据传输层用来实现在USB主机端的客户端驱动程序和设备端的功能接口之间传输有一定意义的信息,这些信息在协议层被打包成包格式。协议将信号层传输的位信息流称为包,将协议层传输的包信息流称为处理事务,将数据传输层传输的信息流称为传输。所有的传输最终都以比特流的方式在信号层上实现通信。 USB的传输,是USB面向用户的最高级的数据结构。USB定义了四种数据传输类型,即控制传输、中断传输、批量传输和同步传输,用以完成各种类型的数据传输。 处理事务和传输的关系是核心。传输是由一个或多个处理事务组成的,而处理事务按照其特点分为三种类型:输入(in)处理事务、输出(Out)处理事务和设置(SetuP)处理事务。任何一种传输都是由这三种处理事务组成,不同的只是这三种处理事务的组合和搭配情况。 中断传输由In处理事务或Out处理事务组成,主要用于如鼠标、键盘等自ID设备的数据传输中。中断传输中,”中断”的概念并不等同于PC系统中硬件设备的中断,USB主机是以周期性的方式对设备进行轮询,以确定设备是否有数据发送。中断传输没有固定的传输速率,低速、全速和高速设备均支持中断传输,只是对传送的数据包的大小要求不同。 批量传输由In处理事务或Out处理事务组成,主要用于大容量数据的传输中,如硬盘、光盘刻录机及数码相机等。批量传输对传输速率和宽带没有固定的要求,当总线”忙”时,USB会优先考虑其他类型的数据传输,而暂停批量传输。低速设备不支持批量传输,只有全速和高速设备才支持批量传输。 同步传输由In处理事务或Out处理事务组成,主要用于音频流恒定传输速率的数据传输中,如音箱、显示器和摄像头等设备。同步传输讲究的是数据传输速率的恒定,而对数据的准确性的要求不如批量传输严格。所以,同步传输中没有握手包,不对发送错误的数据进行重试。需要说明的是,与中断传输和批量传输不同的是,对于全速设备,同步传输不支持数据包的交替触发机制,只能以Data0发送。而高速设备在一定条件下支持触发机制,由于情况复杂,不予讨论。低速设备不支持同步传输,只有全速和高速设备才支持同步传输。 控制传输是最复杂、最重要的传输类型,也是USB枚举阶段最主要的数据交换方式。当USB设备初次连接到主机之后,主机通过控制传输来交换信息、设备地址和读取设备的描述符来识别该设备,并安装相应的驱动程序,在此基础之上其余三种可能的传输方式才能够使用。进行USB系统开发时,首要的任务就是利用控制传输实现设备的枚举过程,提供各种设备信息。控制传输由In处理事务、Out处理事务和Setup处理事务组成,其中核心是Setup处理事务。
参考文献: [1] 郑强等,《Linux驱动开发入门与实践》清:清华大学出版社,2009 [2] Jonathan Corbet, Alesssandro Rubini, Greg Kroah-Hartman, 《Linux Device Drivers》 O#8217;Reilly Media Inc, 2005 [3] Wolfgang Manuerer 《Professional Linux Kernel Architecture》 Wiley Publishing,Inc, 2008 [4]作者:W.Richard.Steven,译者:尤晋元,张亚英,戚正伟《UNIX环境高级编程-第二版》机械工业出版社,2005 [6]Steve Oualline:《Practical C Programming》O#8217;Reilly,Inc 1998 [7]DANIEL.P.BOVELamp;MARCO CESAII著 陈莉君 张琼声 张宏伟 译《深入理解Linux内核》O#8217;REILLY 中国电力出版社,2007 [8]宋宝华 《Linux设备驱动开发详解》 人民邮电出版社,2010 [9](美) Jan Axelson 《USB大全》 中国电力出版社,2001 [10]韦东山 《嵌入式linux应用开发完全手册》人民邮电出版社,2008 [11][印] Sreekrishman Venkateswaran 著, 宋宝华 何昭然 史海滨 吴国成 译《精通Linux 设备驱动程序开发》 人民邮电出版社,2010.3 [12]陈学松 《深入Linux设备驱动内核机制》 电子工业出版社 2012-1 [13][英] Neil Matthew, Richard Stones 著, 陈健,宋健健 译《 Linux程序设计》北京:人民邮电出版社:2010 [14]俞永昌 著,李红姬,李明吉 译 《Linux设备驱动开发技术及应用》 北京:人民邮电出版社 2008-9 |