《精通Linux设备驱动程序开发》——输入设备驱动程序

Linux内核输入子系统详解
本文深入探讨了Linux内核的输入子系统,包括其优势、运行接口、事件驱动程序、设备驱动程序以及不同类型的输入设备驱动程序,如键盘、鼠标、触摸控制器和加速度传感器。

一、输入子系统

 1、内核的输入子系统是对分散的、多种不同类别的输入设备进行统一处理的驱动程序。


 2、输入子系统的好处

   1)、统一了物理形态各异的相似的输入设备的处理功能。

   2)、提供了用于分发输入报告给用户应用程序的简单的事件接口。

   3)、抽取了输入驱动程序的通用部分,简化了驱动程序,并引入了一致性。


 3、输入子系统的运行接口(P144  图7-1)

   1)、此子系统包括一前一后运行的两类驱动程序:事件驱动程序和设备驱动程序。

   2)、事件驱动程序负责和应用程序的接口。

   3)、设备驱动程序负责和底层输入设备的通信。



二、输入事件驱动程序

 1、Evdev是一个通用的输入事件驱动程序。Evdev产生的每个事件都有如下格式,其定义于include/linux/input.h中:

     struct  input_event {

        struct  timeval  time;

        __u16  type;

        __u16  code;

        __s32  value;

     };


 2、设备实例:虚拟鼠标

   1)、虚拟鼠标的工作过程——虚拟鼠标的输入驱动程序(P145  图7-2)。

   2)、相关代码以及分析。


 3、其他事件接口



三、输入设备驱动程序

 1、serio

   1)、serio层提供了访问老式输入硬件的库例程。

   2)为了与serio提供服务的硬件通信,需要用serio_register_driver()向serio注册规定的回调例程。

   3)、为了给serio添加新的驱动程序,需要用serio_register_port()注册open()/close()/start()/stop()/write()入口函数。


 2、键盘

   1)、键盘的每种类型都有特定的输入设备驱动程序,但所有的都使用相同的键盘事件处理程序,以确保提供欸用户的接口一致。和其他的事件驱动程序相比,键盘事件驱动

             程序有其独特之处:它传送数据给另一个内核子系统(tty层),而不是通过/dev节点传送给用户空间。

   2)、PC键盘

      I、PC键盘通过i8042兼容键盘控制器与处理器接口。态势机通常用专用的键盘控制器,而笔记本计算机的键盘接口则使用通用的嵌入式控制器。

      II、PC键盘按下一个键时,内部处理流程。

   3)、USB与蓝牙键盘

      I、USB规范中有关HID的部分规定了USB键盘、鼠标、小键盘以及其他输入外围设备使用的通信协议。

      II、在Linux上,它们是通过usbhid USB客户端驱动程序实现的,它负责USB HID类设备。

      III、PS/2兼容键盘的数据流。


 3、鼠标

   1)、PS/2鼠标。

   2)、设备实例:滚轮鼠标。

      I、代码清单7-3:滚轮鼠标驱动程序

   3)、指点杆

   4)、触摸板

      I、代码清单7-4:Synaptics触摸板的PS/2鼠标协议驱动程序

   5)、USB和蓝牙鼠标。


 4、触摸控制器


 5、加速度传感器

   1)、加速度传感器用于测试加速度。

   2)、HDAPS驱动程序是平台驱动程序,向输入子系统注册。


 6、输出时事件



四、调试

        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值