RK3568平台 input输入子系统

一.input子系统简介

Input 子系统是管理输入的子系统, 和 pinctrl 和 gpio 子系统一样, 都是 Linux 内核针对某一类设备而创建的框架。 input 子系统处理输入事务, 任何输入设备的驱动程序都可以通过 input 输入子系统提供的接口注册到内核, 利用子系统提供的功能来与用户空间交互。

输入设备总类繁杂, 包括按键, 键盘, 触摸屏, 鼠标, 摇杆等, 它们本身是字符设备, 不过内核为了能将这些设备的共性抽象出来, 简化驱动的开发, 建立了一个 Input 子系统。 用户只需要根据内核提供的 input 子系统下提供的 API 函数接口, 完成设备的注册即可。

对于驱动开发者不需要去关心应用层,只需要按照要求上报这些输入事件即可。 input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层,最终给用户空间提供可访问的设备节点,input 子系统框架如:

可见在Linux内核空间,分为驱动层、核心层和事件层。编写驱动程序时只需要关注这三个层,它们的分工如下:

  • 驱动层:输入设备的具体驱动程序,向核心层报告输入内容
  • 核心层:为驱动层提供输入设备注册和操作接口,通知事件层对输入事件进行处理
  • 事件层:和用户空间进行交互

二.input子系统核心层注册

复制代码
struct class input_class = {
 .name = "input",
 .devnode = input_devnode,
};
......
......
static int __init input_init(void) {
 int err;
 err = class_register(&input_class);
 if (err) {
  pr_err("unable to register input_dev class\n");
  return err;
 }

 err = input_proc_init();
 if (err)
  goto fail1;

 err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0), INPUT_MAX_CHAR_DEVICES,"input");
 if (err) {
  pr_err("unable to register char major %d", INPUT_MAJOR);
  goto fail2;
 }

 return 0;

fail2: input_proc_exit();
fail1: class_unregister(&input_class);
 return err;
}

注册一个 input 类,这样系统启动以后就会在/sys/class 目录下有一个 input 子 目录

待更新。。。。。。

相关推荐
不摆烂选手10 小时前
Linux 阻塞和非阻塞 I/O 简明指南
linux·驱动开发·ubuntu·正点原子imx6ull学习笔记
__Benco13 小时前
OpenHarmony平台驱动开发(十五),SDIO
驱动开发
7yewh14 小时前
FPGA前瞻篇-计数器设计与实现实例
arm开发·驱动开发·嵌入式硬件·fpga开发·硬件架构·硬件工程·精益工程
程序员JerrySUN18 小时前
《驱动开发硬核特训 · 专题篇》:深入理解 I2C 子系统
驱动开发
sukalot18 小时前
window 显示驱动开发-将虚拟地址映射到内存段(二)
驱动开发
忧虑的乌龟蛋1 天前
嵌入式Linux I2C驱动开发详解
linux·驱动开发·嵌入式·iic·i2c·读数据·写数据
月上柳青2 天前
linux-驱动开发之设备树详解(RK平台为例)
linux·驱动开发·dsp开发
程序员JerrySUN3 天前
驱动开发硬核特训 · Day 30(下篇): 深入解析 lm48100q I2C 音频编解码器驱动模型(基于 i.MX8MP)
linux·驱动开发·架构·音视频
Blossom.1183 天前
《从零开始:构建你的第一个区块链应用》
人工智能·驱动开发·python·深度学习·区块链·aigc·交互
狄加山6754 天前
Linux Input子系统与驱动开发实战
linux·运维·驱动开发