Linux下的USB键盘驱动
随着现代计算机系统的发展,计算机的输入设备已经不再局限于传统的键盘和鼠标,而是出现了各种类型和品牌的输入设备,比如触摸屏、笔记本电脑内置键盘、蓝牙键盘、有线/无线静音键盘等等。Linux作为一种现代化的操作系统,自然也需要能够支持这些不同类型的输入设备,尤其是USB键盘,因为它被广泛应用在个人电脑、笔记本电脑和服务器上。
在Linux系统下,USB键盘是通过USB控制器和USB键盘驱动程序来实现的。USB控制器是一种硬件设备,它用于管理USB设备与计算机之间的数据传输。USB键盘驱动程序则是一种软件程序,它用于将USB键盘输入转化为计算机可以理解的信号,然后将这些信号发送给操作系统。
Linux系统下的USB键盘驱动主要分为两部分,分别是HID驱动和USB核心驱动。HID是“Human Interface Device”的缩写,它是一种USB设备的通用类别,用于管理各种类型的USB输入设备,包括键盘、鼠标、摇杆、游戏控制器等等。USB核心驱动则是用来管理USB设备和USB控制器的通用驱动程序。
当插入USB键盘时,Linux系统会自动识别这个设备,然后加载对应的驱动程序。USB键盘驱动程序接收来自USB控制器的数据报文,然后将它们转化为操作系统可以理解的键盘事件。操作系统通过事件通知机制接收这些键盘事件,然后进行相应的响应,比如显示字符、键盘映射、服务程序等等。
在Linux系统中,USB键盘的驱动程序位于“/dev/input/”目录下,以“eventX”命名。每个USB键盘驱动程序都有一个唯一的事件文件名,它由“event”和一个数字组成,数字表示这个事件文件对应的USB键盘驱动程序的编号。当操作系统接收到键盘事件时,它就会向相应的事件文件写入相应的事件信息。
在Linux系统下,USB键盘可以通过配置文件对键盘映射和键盘布局进行定制,以适应不同用户的需要。配置文件包括系统配置文件和用户配置文件,通常存储在“/etc/”和“~/.config/”目录下。系统配置文件包括键盘映射表和键盘布局表,它们定义了键盘按键与相应字符之间的映射关系。用户配置文件包括个人设置文件和应用程序设置文件,它们定义了用户自定义的键盘映射和键盘布局。
Linux系统下的USB键盘驱动程序是一种重要的输入设备驱动程序,它负责将USB键盘输入转化为操作系统可以理解的键盘事件,从而使操作系统能够正确识别、响应和处理键盘输入。同时,USB键盘驱动程序还支持键盘映射和键盘布局的定制,以满足不同用户的需求和偏好。
相关问题拓展阅读:
Linux概述 Linux是一个成熟而稳段慎定的网络操作系统。将Linux植入嵌入式设备具有众多的优点。首先,Linux的源代码是开放闹燃银的,任何人都可以获取并修改,用之开发自己的产品。其次,Lirmx是可以定制液宴的,其系统内核最小只有约134kB。
IIC规范
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IIC总线正搏产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
2.IIC总线的特点
IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的更大传输速率支持40个组件。IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
2.IIC总线工作原理
2.2. 总线构成及信号类型
IIC总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,更高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,IIC总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分:
?地址码用来选址,即接通需要控制的电路,确定控制的种类;
?控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。
这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
IIC总线在传送数据过程有三种类型信号:
?开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。举链祥
?结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
?数据传输信号:在开始条件以后,时钟信号SCL的高电平周期期问,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电平周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。
?应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
目前有很多半导体集成电路上都集成了IIC接口。带有IIC接口的单片机有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供IIC接口。
2.总线基本操作
IIC规程运用主/从双唤慎向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。
2.3.1 控制字节
在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。
2.3.2 写操作
写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序。
2.3.3 读操作
读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。
2.3.4 总线仲裁
主机只能在总线空闲的时候启动传输。两个或多个主机可能在起始条件的最小持续内产生一个起始条件,结果在总线上产生一个规定的起始条件。
当SCL线是高电平时,仲裁在SDA线发生:这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平和它自己的电平不同。
仲裁可以持续多位。从地址位开始,同一个器件的话接着就是数据位(如果主机-发送器),或者比较相应位(如果主机-接收器)。IIC总线的地址和数据信息由赢得仲裁的主机决定,在这个过程中不会丢失信息。
仲裁不能在下面情况之间进行:
?重复起始条件和数据位;
?停止条件和数据位;
?重复起始条件和停止条件。
2.特性总结
?IIC肯定是2线的(不算地线)IIC协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了
?IIC的原则是
l在SCL=1(高电平)时,SDA千万别忽悠!!!否则,SDA下跳则”判罚”为”起始信号S”,SDA上跳则”判罚”为”停止信号P”.
l在SCL=0(低电平)时,SDA随便忽悠!!!(可别忽悠过火到SCL跳高)
?每个字节后应该由对方回送一个应答信号ACK做为对方在线的标志.非应答信号一般在所有字节的最后一个字节后.一般要由双方协议签定.
?SCL必须由主机发送,否则天下大乱
?首字节是”片选信号”,即7位从机地址加1位方向(读写)控制.从机收到(听到)自己的地址才能发送应答信号(必须应答!!!)表示自己在线.其他地址的从机不允许忽悠!!!(当然群呼可以忽悠但只能听不许说话)
?读写是站在主机的立场上定义的.”读”是主机接收从机数据,”写”是主机发送数据给从机.
?重复位主要用于主机从发送模式到接收模式的转换”信号”,由于只有2线,所以收发转换肯定要比SPI复杂,因为SPI可用不同的边沿来收发数据,而IIC不行.
?在硬件IIC模块,特别是MCU/ARM/DSP等每个阶段都会得到一个准确的状态码,根据这个状态码可以很容易知道现在在什么状态和什么出错信息.
?位IIC总线可以挂接127个不同地址的IIC设备,0号”设备”作为群呼地址.10位IIC总线可以挂接更多的10位IIC设备.
原文 作者:putiancaijunyu
3.Linux下IIC驱动架构
Linux定义了系统的IIC驱动体系结构,在Linux系统中,IIC驱动由3部分组成,即IIC核心、IIC总线驱动和IIC设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的IIC框架。
3.1.1 IIC核心
IIC 核心提供了IIC总线驱动和设备驱动的注册、注销方法,IIC通信方法(即“algorithm”,笔者认为直译为“运算方法”并不合适,为免引起误解, 下文将直接使用“algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
在我们的Linux驱动的i2c文件夹下有algos,busses,chips三个文件夹,另外还有i2c-core.c和i2c-dev.c两个文件。
i2c-core.c文件实现了I2Ccore框架,是Linux内核用来维护和管理的I2C的核心部分,其中维护了两个静态的List,分别记录系统中的I2Cdriver结构和I2Cadapter结构。I2Ccore提供接口函数,允许一个I2Cadatper,I2Cdriver和I2Cclient初始化时在I2Ccore中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口,主要应用在I2C设备驱动中。
3.1.2 IIC总线驱动
IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至直接集成在CPU内部。总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在那里,等待设备驱动调用其函数。
IIC总线驱动主要包含了IIC适配器数据结构i2c_adapter、IIC适配器的algorithm数据结构i2c_algorithm和控制IIC适配器产生通信信号的函数。经由IIC总线驱动的代码,我们可以控制IIC适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。
Busses文件夹下的i2c-mpc.c文件实现了PowerPC下I2C总线适配器驱动,定义描述了具体的I2C总线适配器的i2c_adapter数据结构,实现比较底层的对I2C总线访问的具体方法。I2Cadapter 构造一个对I2Ccore层接口的数据结构,并通过接口函数向I2Ccore注册一个控制器。I2Cadapter主要实现对I2C总线访问的算法,iic_xfer() 函数就是I2Cadapter底层对I2C总线读写方法的实现。同时I2Cadpter 中还实现了对I2C控制器中断的处理函数。
3.1.3 IIC设备驱动
IIC设备驱动是对IIC硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的IIC适配器上,通过IIC适配器与CPU交换数据。设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。
IIC设备驱动主要包含了数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。
i2c-dev.c文件中实现了I2Cdriver,提供了一个通用的I2C设备的驱动程序,实现了字符类型设备的访问接口,实现了对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件操作的接口函数。我们可以通过open函数打开 I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过 read和write函数完成对I2C设备的读写操作。
通过I2Cdriver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。
没有,这是windowsNT的技术,linux认为键盘和鼠标都属于同样的设备,不需要HAL的屏蔽
linux u 键盘驱动的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux u 键盘驱动,【简明易懂】谈谈Linux下的USB键盘驱动,如何在Linux下模拟键盘输入 利用驱动,arm平台下linux驱动。。想制作一个键盘驱动,接口为iic,能够捕获iic值产生相应的键盘事件,linux键盘和鼠标驱动有HAL层吗?的信息别忘了在本站进行查找喔。
成都创新互联科技有限公司,是一家专注于互联网、IDC服务、应用软件开发、网站建设推广的公司,为客户提供互联网基础服务!
创新互联(www.cdcxhl.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。创新互联——四川成都IDC机房服务器托管/机柜租用。为您精选优质idc数据中心机房租用、服务器托管、机柜租赁、大带宽租用,高电服务器托管,算力服务器租用,可选线路电信、移动、联通机房等。
本文名称:【简明易懂】谈谈Linux下的USB键盘驱动(linuxu键盘驱动)
网站链接:http://www.shufengxianlan.com/qtweb/news7/411657.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联