linux驱动-认识输入子系统源码以及裁剪

引入:输入子系统的代码在内核源码的哪个路径下?那些是事件处理层,那些是核心层,设备驱动层对应的代码

.input子系统源码所在内核源码路径、kernel/driver/input。

输入子系统又分为输入事件处理层,核心层,设备驱动层 。

在前面已经知道了evdev是事件处理层的代码,input_compat是核心层代码,剩下的都是设备层的代码吗?

apm-power.c-提供了与 APM(Advanced Power Management)相关的输入设备接口。

evkug.c-提供了一个用于调试的虚拟输入设备,可以模拟按键、鼠标移动等事件。

evdev.c和 evdevo-提供了一个通用的输入事件层,将所有输入设备的事件转化为标准化

的输入事件格式,并提供给上层用户空间程序使用。

ff-core.c 和 ff-core.o-提供了力反馈设备的支持,允许输入设备发送力反馈信息。

ff-memless.c 和 ff-memless.0-提供了一种无需分配内存的力反馈设备支持,可以在只能使

用静态内存的系统中使用。

samepont/-提供了支持游戏控制器的驱动程序。

input.c 和 input.o-提供了输入子系统的初始化和事件处理等操作。

imput-compac 和 imput-cempat.h-提供了向后兼容的接口,用于支持旧版本的输入系统。

imput-ledsc 和 jmnput-leds.0-提供了 LED 指示灯设备的支持,例如在笔记本电脑键盘上的

NumLock、CapsLock、Scrolllock等键。

input-mt.c 和 input-mt.o-提供了多点触控设备的支持,如在触摸屏上使用多个手指进行探作。

input-poldevc 和 input-polldev.o-提供了轮询式输入设备的支持,例如通过串口或并口接收数据的输入设备。

jgydeyc-提供了支持游戏杆的驱动程序

keyboard/-提供了支持键盘的驱动程序。

matrix-keymap.c和 matrix-keymap.o-提供了矩阵键盘的支持。

misc/-提供了其他类型输入设备的驱动程序,如红外线遥控器、输入音频等,

mouse/和mousedev.c-提供了支持鼠标的驱动程序。

modules.builtin 和 modules.order-提供了内核中使用的模块列表。

remotect!/-提供了支持远程控制的驱动程序。

rmi4/-提供了支持触控板和其他12C 设备的驱动程序。 ......。

只要分清楚那些是事件处理层代码和那些是设备驱动层的就可以了,因为我工作中就是以这两部分为主。那如何分辨呢?最简单也是最有效的方法就是用vim打开你先知道的源文件。

以input-leds.c为例,看看他有没有驱动入口,看到它在驱动入口有一个注册handler事件,就是事件处理层的源码。

再来看一个,ff-core.c,一样的方法,vim ff-core.c,这个代码没有入口函数,但是有这个__set_bit关键符,它就是设备驱动层的代码

下一个用 joydev.c看看,老规则vim joydev.c,很明显也是事件处理层

源码目录下还有一些目录,进到这里touchscreen里面,在这个目录文件下一般都是和触摸屏芯片相关的。看一下vim edt-ft5x06.c

没有发现什么注册相关的,也没有看到__set_bit,但是这里面都是对硬件初始化所以也是设备驱动层

像刚刚touchscreen目录下,每一个文件就代表一个名字,但是我们应该设备要用得了那么多屏幕驱动吗?很显然不是,所以不是都要编写进内核里面的,根据需求,所以这个时候就需要用到裁剪

三如何裁剪这部分的代码

上图中我看出,,默认支持了很多设备,而且有些代码默认已经编译支持了

如果进行裁剪,打开 make menconfig,图像化配置界面。先export ARCH=arm64配置一下

进到以下路径进行裁剪。

Device Drivers --->

Input device support --->

_*. Generic input layer (needed for keyboard, mouse,...) //input 核心层

<> Mouse interface //事件处理层

<> Joystick interface//事件处理层

<> Event interface//事件处理层 event.c

\*\] Keyboards//设备驱动层---\> \[\*\] Mice ---\> //设备驱动层 \[\*\] Joysticks/Gamepads //设备驱动层 \[\*\] Touchscreens ---\> //设备驱动层

相关推荐
小糖学代码1 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
shizhan_cloud1 小时前
Shell 函数的知识与实践
linux·运维
Deng8723473481 小时前
代码语法检查工具
linux·服务器·windows
霍夫曼3 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
月熊4 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物5 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
赖small强5 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
IT运维爱好者7 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA7 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴7 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生