input子系统分析二(evdev事件驱动注册)

evdev输入事件驱动分析 evdev[输入事件驱动],为输入子系统提供了一个默认的事件处理方法。其接收来自底层驱动的大多数事件,并使用相应的逻辑对其进行处理。evdev从底层接收事件信息,将其反映到sys文件系统中,用户程序通过对sys文件系统的操作,就能够达到处理事件的能力。1. evdev的初始化 evdev以模块的方式被组织在内核中,也具有初始化函数和卸载函数。evdev的初始化主要完成一些注册工作,使内核认识evd 阅读详情

        evdev 输入事件驱动,为输入子系统提供了一个默认的事件处理方法。其接收来自底层驱动的大多数事件,并使用相应的逻辑对其进行处理。

1 evdev驱动初始化

1.1 evdev驱动加载

static int __init evdev_init(void)
{
    return input_register_handler(&evdev_handler);
}
static void __exit evdev_exit(void)
{
    input_unregister_handler(&evdev_handler);
}
module_init(evdev_init);
module_exit(evdev_exit);

1.2 evdev驱动注册

老样子,通过注释来分析流程:

int input_register_handler(struct input_handler *handler)
{
    mutex_lock_interruptible(&input_mutex); // 加锁,睡眠可以被信号打断
    INIT_LIST_HEAD(&handler->h_list);  // 初始化evdev_handler的h_list链表
    if (handler->fops != NULL) {
        if (input_table[handler->minor >> 5]) {  // **问题1. 为什么这里要右移5位**
            retval = -EBUSY;
            goto out;
        }
        input_table[handler->minor >> 5] = handler;
    }
    list_add_tail(&handler->node, &input_handler_list);  // 将evdev_handler放入input子系统的全局handler链表中
    list_for_each_entry(dev, &input_dev_list, node)  // 遍历input子系统的所有input设备,通过handler去匹配dev
        input_attach_handler(dev, handler);  // 下面详细分析
    input_wakeup_procfs_readers();  // 唤醒队列,不细说

 out:
    mutex_unlock(&input_mutex);
    return retval;
}
EXPORT_SYMBOL(input_register_handler);

input_register_handler主要做了几件事:

  1. 初始化handler的h_list链表,该链表用来找到匹配后的input设备。
  2. 将handler加入input_handler_list全局链表的链尾。
  3. 遍历input dev,匹配设备

匹配的流程,参考上篇文章 “input子系统分析一(input设备注册)”,这里面已经说的很详细了。

2 evdev事件驱动的fops分析

3 问题解答

3.1  为什么这里要右移5位?

if (input_table[handler->minor >> 5]) {  // **问题1. 为什么这里要右移5位**

linux input子系统(二)- input event drivers evdev 驱动分析 input子系统分为了input device drivers和input event drivers,看图                                                        可以看到,在kernel space中,input -core 管理着 input device drivers 以及input event drivers,其中在 input 阅读详情

相关推荐

Linux input子系统(二)input子系统驱动

Linux input子系统 Linux input子系统(一)input设备应用编程 Linux input子系统(二)input子系统驱动 Linux input子系统(二)input子系统驱动 文章目录Linux input子系统(二)input子系统驱动一、input子系统驱动框架1.1 input子系统的主要对象1.2 input子系统的驱动框架二、input设备驱动编写2.1 分配一个...

JT同学的博客 2321

理解evdev

翻译自这里 理解evdev 这篇文章解释了evdev协议的工作原理。阅读本文后,您应该了解evdev是什么以及如何解释evdev事件dump以了解您的设备正在做什么。该帖子主要针对必须调试设备的用户,因此我将遗漏或简化一些技术细节。我将使用evemu-record的输出作为示例,因为这是evdev的主要调试工具。 什么是evdev? evdev是一种仅限Linux的通用协议,内核使用该协议将有...

wanywhn的博客 1万+

input 子系统(evdev,input_core,input_handler,input_dev)

文章目录概述input-coreinput_dev 以及handlerinput_eventevbug关于slot A/B协议(本段为摘抄)常用写input 驱动的步骤测试代码(ubuntu16.04下测试通过)驱动代码应用代码 概述 input子系统框架图 1.input-core 输入核心 2.input-event-dev 输入事件驱动程序 3.input-driver 输入设备驱动程...

感觉身体被掏空 1346

Linux Kernel input设备之handler注册

/**  * input_register_handler - register a new input handler  * @handler: handler to be registered  *  * This function registers a new input handler (interface) for input  * devices in the system

星空探索 471

linux input 子系统分析

先写一篇备忘,以后有机会再整理                                                 Linux  Input 设备驱动1认识和使用 input 事件:1.1Linux input 驱动分类Input驱动程序是Linux输入设备的驱动程序

4506

Multisim仿真入门:单相半波可控整流电路从搭建到波形分析(附避坑指南)

本文为电力电子技术初学者提供了一份详细的Multisim仿真指南,手把手教你从零搭建单相半波可控整流电路。通过对比纯电阻、阻感负载及加入续流二极管后的波形变化,直观理解晶闸管触发、电感续流等核心原理,并附有实用的参数设置与常见问题避坑指南,帮助你将抽象理论转化为可视化的工程实践。

weixin_29208077的博客 343

input子系统学习笔记九 evdev输入事件驱动分析

evdev 输入事件驱动,为输入子系统提供了一个默认的事件处理方法。其接收来自底层驱动的大多数事件,并使用相应的逻辑对其进行处理。evdev 输入事件驱动从底层接收事件信息,将其反映到 sys 文件系统中,用户程序通过对 sys 文件系统的操作,就能够达到处理事件的能力。下面先对 evdev 的初始化进行简要的分析。 evdev的初始化         evdev 以模块的方式被组织在

宇宙的起源 940

免费测试国外大模型Claude 3.7 Sonnet API:无需api key(秘钥)

Claude 3.7 Sonnet是Anthropic公司推出的第三代Claude系列AI模型中的中规模版本(2024年发布),在性能与效率间实现平衡。该模型基于改进的Transformer架构,支持128K上下文窗口,擅长复杂推理、数学计算和创意写作,在GSM8K数学基准测试中准确率达92%。其采用"宪法AI"伦理框架,通过多轮对抗训练减少有害输出,同时新增多模态理解能力(可解析图片/图表内容)。Claude 3.7 Sonnet是Anthropic推出的高效轻量级大模型,主打快速响应与成本优化。

Explinks的博客 1498

input子系统详解4——输入事件驱动层源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2108

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南

本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。

weixin_29173777的博客 344

SAP S4 HANA 新资产会计中的平行分类账估值

在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。

yanzibing99的博客 1329

Linux input 子系统详解

1. 模块概述 1.1.相关资料和代码研究 drivers/input/ include/uapi/linux/input-event-codes.h 2. 模块功能 linux核心的输入框架 3. 模块学习 3.1.概述 Linux输入设备种类繁杂,常见的包括触摸屏、键盘、鼠标、摇杆等;这些输入设备属于字符设备,而linux将这些设备的共同特性抽象出来,Linux input 子系统就产生了。 3.2.软件架构 输入子系统是由设备驱动层(input driver)、输入核心层(input core)、输

一口Linux的专栏 3327

属性基加密(Attribute-based Encryption, ABE)

KP-ABE中,用户的密钥定义了访问策略,密文的属性与策略进行匹配。CP-ABE中,密文定义了访问策略,用户的属性与策略进行匹配。

2201_75392924的博客 1831

input子系统框架、核心层、输入事件驱动层详解

一、input子系统架构总览 1、input子系统分为三层 (1)最上层:输入事件驱动层,evdev.c和mousedev.c和joydev.c属于这一层 (2)中间层:输入核心层,input.c属于这一层 (3)最下层:输入设备驱动层,drivers/input/xxx 文件夹下2、input类设备驱动开发方法 (1)输入事件驱动层和输入核心层不需要动,只需要编写设备驱动层 (2)设备

huangliangben的博客 1281

国产FPGA逆袭!深度评测复旦微RFVU3P5G核心板在相控阵雷达中的表现

本文深度评测了复旦微RFVU3P5G核心板在相控阵雷达中的实战表现。该核心板凭借射频直采架构、高采样率ADC/DAC及丰富的DSP资源,在多通道同步精度、动态范围及系统稳定性等关键指标上表现出色,展现了国产FPGA在高端雷达应用中的硬核实力与供应链自主价值。

b0c1d2的博客 724

【ComfyUI专栏】ComfyUI 常用工作流下载与分享网址

首先我们来分享第一个网站,Openart 网站,这个网站同时也能提供比较多的其他类型。但是如果希望下载工作流,我们可以访问到如下的这个站点。作为ComfyUI的学习用户来说,我们通常需要借助他山之石来帮助我们快速成长,因此我们需要找到能够分享和下载的网址。,当前网站是综合性网站,在网站中可以下载各种不同的类型,其中工作流只是可以下载的非常小的部分。这个网站也可以浏览不同的工作流,这个工作流的地址和访问如下的站点。

技术与管理的平衡木- 7804

input子系统中读取流程解析

对Input子系统中读取流程进行解析,以内核提供的evdev.c(input_handler)和gpio-keys.c(input_dev)为例,详解发生中断时,Input device层是如何上报数据,将事件传递给input handler层去进行处理,唤醒休眠开始读取数据。包括 input_handler、evdev、evdev_client 等结构体的实现细节,尤其是 evdev 设备驱动的接口和数据传递的工作机制

caiji0169的博客 1925

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1827

input device和input handler的注册以及匹配过程解析

本文解析了Linux内核中input子系统的工作机制,特别是通过对Linux 4.9.88版本的源码分析,详细解读了input_dev和input_handler的注册及匹配过程。文章以典型的GPIO键盘驱动和evdev驱动程序为例,剖析了input_register_device与input_register_handler如何协同工作,使设备与处理程序能够顺利连接。通过代码示例,提供了清晰的注释和逻辑说明,帮助理解内核如何处理输入设备的注册、事件管理及驱动支持。

caiji0169的博客 2353

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Linux input子系统学习总结(二)----Input事件驱动

Input 事件驱动: (主要文件 :drivers/input/evdev.c 、 drivers/input/input.h)基于kernel 4.0 一、 关键函数调用顺序: 1、input_register_handler(&evdev_handler); ///注册 evdev_handler 这个input事件驱evdev.c 2、inpu...

Xiaohui6666的博客 302

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux input子系统分析之四 input handler驱动实例evdev分析

在前面几章我们介绍了input子系统的实现,针对input子系统而言,主要就包括input handler、input handle、input device这三种逻辑抽象,而在input子系统中input handler与input device是多对多的联系(而在设备驱动模型中,一般设备与驱动时1对多的关联)。 本章我们将通过一个input handler实例,理解input handler驱动的实现流程。我们选用evdev进行 分析。 本章的主要内容如下: 一、input han...

lickylin的专栏 2376

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

input子系统分析一(input设备注册)

以一个遥控器设备为例,分析input设备的注册、匹配,连接等流程

玩命的狙击手 2525

input子系统事件处理层evdev分析

<!-- pre {font-family:"AR PL UMing HK"} p {margin-bottom:0.08in} --> 在input子系统中事件处理层有很多evdev,joydev,evbug,mousedev。但是他们的实现基本上是一样的,对于触摸屏来说,事件处理器是evdev,现在就来分析一下evdev的代码。 首先还是evdev的入口和出口

zhengsheng23的专栏 5301

input子系统详解

Input子系统详解 一.Input子系统架构 Linux系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动,下面是Input子系统架构: Input子系统架构 二.Input系统的组成 输入子系统由驱动层(Driver

ylyuanlu的专栏 2万+
上一篇: input子系统分析一(input设备注册)
下一篇: input子系统分析三(input设备数据处理流程)
程序员毛毛~
博客等级 码龄11年 46粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值