| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 一、linux驱动开发-11.1-INPUT子系统 -> 正文阅读 |
|
[系统运维]一、linux驱动开发-11.1-INPUT子系统 |
一、前言 ???????linux内核专门做了一个input子系统的框架来处理输入实践。输入设备的本质还是字符设备,只是在其基础上套上了input框架。 二、子系统 2.1、简介 ???????input子系统就是管理输入的子系统,和pinctrl、gpio子系统一样,都是linux内核针对某一类设备而创建的框架,如下: ???????驱动编写只需要关注中间的驱动层、核心层、事件层,分工如下: ???????驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容。 2.2、编写流程 ???????input 核心层会向 Linux 内核注册一个字符设备,在drivers/input/input.c 这个文件,input.c 就是 input 输入子系统的核心层。 ? ? ? ? 注册一个input类,系统启动后,就会在/sys/class目录下有一个input子目录。 ???????input子系统的所有设备主设备号都为13,因此在使用input子系统处理输入设备的时候就不需要注册字符设备了,只需要向系统注册一个input_device即可。 2.2.1、注册input_dev 2.2.1.1、申请 ???????input_dev表示input设备,定义在include/linux/input.h,使用input_allocate_device来申请。
???????如果要注销input设备,使用input_free_device来释放前面申请到的input_dev
2.2.1.2、初始化 ???????需要初始化的内容主要为事件类型(evbit)和事件值(keybit)。 2.2.1.3、注册 ? ? ? ?初始化完成后就需要向linux内核注册input_dev,
???????同样,注销驱动的时候也需要使用input_unregister_device函数来注销前面注册的input_dev,
示例:
2.2.2、上报事件 ???????向内核注册input_dev后,还得将获取到的具体输入值或者输入事件,上报给内核,比如在按键中断,定时中断中将按键值上报给内核,这样内核才能获取输入值。 不同的事件,其上报事件的API函数不同,下面是常见的:
???????上报事件以后还需要使用input_sync函数来告诉内核input子系统上报结束:
示例如下:
2.3、input_event结构体 ????????Linux 内核使用 input_event 这个结构体来表示所有的输入事件,input_envent 结构体定义在include/uapi/linux/input.h 文件中,结构体内容如下
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 4:45:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |