当前位置: 首页 > article >正文

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  --->    //设备驱动层


 


http://www.kler.cn/a/379891.html

相关文章:

  • 时间序列预测(十八)——实现配置管理和扩展命令行参数解析器
  • 提高文本处理效率:精通awk命令中的$NF
  • 数据库操作(php+mysql)
  • windows XP,ReactOS系统3.4 共享映射区(Section)---1
  • Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)
  • 光耦合器的关键作用和创新---腾恩科技
  • 【c++篇】:深入剖析vector--模拟实现属于自己的c++动态数组
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战!
  • 2024年科技特长生招生新趋势:多领域扩展与创新人才培养
  • 连续可穿戴式基于微型机器学习跌倒检测
  • Win系统通过命令行查看笔记本电池损耗/寿命/健康
  • 每天10个vue面试题(七)
  • 【Redis_Day3】Redis通用命令
  • VR 创业之路:从《I Expect You To Die》到未来展望
  • 深度学习:Yolo V4的改进
  • 【系统架构设计师】2023年真题论文: 论面向对象分析的应用与实现(包括解题思路和素材)
  • 传智杯 第六届-复赛-C
  • zxing生成、解析二维码,条形码
  • centos安装指定版本的git
  • Sublime Text 的PHP格式化插件phpfmt 的 setting 配置参数说明
  • idea连接docker并构建镜像
  • IPsec传输模式与隧道模式的深度解析及应用实例
  • 关于Linux系统调试和性能优化技巧有哪些?
  • SpringCloud-Eureka注册中心
  • 【系统架构设计师】2022年真题论文: 论湖仓—体架构及其应用(包括解题思路和素材)
  • Sublime常用快捷键