***********《朱有鹏老师嵌入式linux核心课程》 *********** 《5.linux驱动开发-第5部分-5.8.input子系统基础之按键》 -------------------------------------------------------- 本课程由朱老师物联网大讲堂推出并提供技术支持,课件可打包下载 网盘地址:http://yunpan.cn/cjVy3RAgfDufK 访问密码 4ad7 技术交流QQ群:朱老师物联网讲堂1群 397164505 朱老师个人QQ:1264671872 -------------------------------------------------------- 第一部分、章节目录 5.8.1.什么是input子系统 5.8.2.input设备应用层编程实践1 5.8.3.input设备应用层编程实践2 5.8.4.input子系统架构总览1 5.8.5.input子系统架构总览2 5.8.6.输入核心层源码分析1 5.8.7.输入核心层源码分析2 5.8.8.输入事件驱动层源码分析 5.8.9.输入设备驱动层源码分析1 5.8.10.输入设备驱动层源码分析2 5.8.11.中断方式按键驱动实战1 5.8.12.中断方式按键驱动实战2 第二部分、章节介绍 5.8.1.什么是input子系统 本节全面介绍input子系统的概念和来源、解决的主要问题,目的是让大家对linux中输入类设备有一个全面了解 5.8.2.input设备应用层编程实践1 本节实践编写应用层程序,操作键盘和鼠标这些常见input类设备,目的是让大家先学会使用输入类设备,后面再来分析驱动。 5.8.3.input设备应用层编程实践2 本节接着上节对读上来的数据进行解析,分析其规律并且和设备本身特性进行关联分析。 5.8.4.input子系统架构总览1 本节详细介绍input子系统的三层结构以及各层的功能特点。 5.8.5.input子系统架构总览2 本节介绍input子系统下编写驱动的路线和方法。 5.8.6.输入核心层源码分析1 本节分析输入核心层,主要是模块装载和开放给其他层的接口的分析。 5.8.7.输入核心层源码分析2 本节接着分析输入核心层,主要是handler和device的匹配、安装部分的源码分析。 5.8.8.输入事件驱动层源码分析 本节对输入事件层源码分析,主要以evdev.c为例分析了event handler的安装函数、数据上报函数的实现。 5.8.9.输入设备驱动层源码分析1 本节分析输入设备驱动层,以x210自带的按键驱动为例进行分析。 5.8.10.输入设备驱动层源码分析2 本节接着分析按键驱动,主要是一些源码细节探究。 5.8.11.中断方式按键驱动实战1 本节开始按键驱动实战,先找到内核提供的模版,并且对模版程序进行分析讲解。 5.8.12.中断方式按键驱动实战2 本节以模版驱动为基础,结合x210开发板的情况进行驱动移植、编译、测试、修改。 第三部分、随堂记录 5.8.1.什么是input子系统 5.8.1.1、何为输入设备 5.8.1.2、linux中输入设备的编程模型 (1)命令行界面的输入类设备应用接口 (2)GUI界面带来的麻烦、不同的输入类设备也会带来麻烦 (3)struct input_event 5.8.1.3、input子系统简介 (1)linux的input子系统解决了什么问题 (2)input子系统分4个部分:应用层 + input event + input core + 硬件驱动 (3)input子系统如何工作 (4)事件驱动型GUI框架,如QT、VC等。 5.8.2.input设备应用层编程实践1 5.8.2.1、确定设备文件名 (1)应用层操作驱动有2条路:/dev目录下的设备文件,/sys目录下的属性文件 (2)input子系统用的/dev目录下的设备文件,具体一般都是在 /dev/input/eventn (3)用cat命令来确认某个设备文件名对应哪个具体设备。我在自己的ubuntu中实测的键盘是event1,而鼠标是event3. 5.8.2.2、标准接口打开并读取文件 5.8.2.3、解析struct input_event 5.8.3.input设备应用层编程实践2 5.8.3.1、解析键盘事件数据 5.8.3.2、解析鼠标事件数据 5.8.4.input子系统架构总览1 5.8.4.1、input子系统分为三层 (1)最上层:输入事件驱动层,evdev.c和mousedev.c和joydev.c属于这一层 (2)中间层:输入核心层,input.c属于这一层 (3)最下层:输入设备驱动层,drivers/input/xxx 文件夹下 5.8.4.2、input类设备驱动开发方法 (1)输入事件驱动层和输入核心层不需要动,只需要编写设备驱动层 (2)设备驱动层编写的接口和调用模式已定义好,驱动工程师的核心工作量是对具体输入设备硬件的操作和性能调优。 (3)input子系统不算复杂,学习时要注意“标准模式”四个字。 5.8.5.input子系统架构总览2 5.8.6.输入核心层源码分析1 5.8.6.1、核心模块注册input_init (1)class_register (2)input_proc_init (3)register_chrdev 5.8.6.2、设备驱动层的接口函数 (1)input_allocate_device (2)input_set_capability (3)input_register_device 5.8.7.输入核心层源码分析2 5.8.7.1、handler和device的匹配 (1)input_attach_handler input_match_device 匹配device和handler handler->connect(handler, dev, id) 连接device和handler 5.8.7.2、事件驱动层的接口函数 (1)input_register_handler (2)input_register_handle 5.8.8.输入事件驱动层源码分析 5.8.8.1、input_handler 5.8.8.2、evdev_connect 5.8.8.3、evdev_event 5.8.9_10.输入设备驱动层源码分析1_2 5.8.9.1、先找到bsp中按键驱动源码 (1)锁定目标:板载按键驱动 (2)确认厂家提供的BSP是否已经有驱动 (3)找到bsp中的驱动源码 5.8.9.2、按键驱动源码初步分析 (1)模块装载分析 (2)平台总线相关分析 (3)确定重点:probe函数 5.8.9.3、源码细节实现分析 (1)gpio_request (2)input_allocate_device (3)input_register_device (4)timer 5.8.11.中断方式按键驱动实战1 5.8.11.1、模板 (1)input类设备驱动模式非常固定,用参考模版修改即可 (2)新建驱动项目并粘贴模版内容 5.8.11.2、模板驱动的解析 5.8.11.3、着手移植驱动 5.8.12.中断方式按键驱动实战2 5.8.12.1、驱动移植细节 5.8.12.2、驱动实践