为了对多种不同类型的输入设备进行统一的处理,内核在字符设备驱动上抽象出一层,即输入子系统。...三个重要结构体 都定义在include/linux/input.h中。...通过input_handle就可以找到对应的input_dev和input_handler。 源码分析 笔者会大体上对input子系统的源码进行分析,如若分析的有出入,还望指出。...根据Linux设备模型的原理,直接进入到usb_mouse_probe函数进行分析。...来提交同步事件,告知input子系统,该设备已经提交了一个完整报告。
Linux input子系统,分为三篇文章,第一篇:Linux input子系统的概念,第二篇:Linux input子系统的代码分析(input core),第三篇:Linux input子系统的驱动程序编写...linux系统输入设备繁多,例如按键、键盘、触摸屏、鼠标。这些输入设备都属于字符设备。不过这些输入设备不同类型,不同原理,不同的输入输出信息。那么是如何统一这些输入设备的呢?...答案:linux中将所有的输入设备抽象出input子系统这套软件体系,提供了统一的接口函数,实现了大统一。 input子系统分为三层: 1.输入子系统设备驱动层。...综上所述:在linux中,输入子系统作为一个内核模块存在,向上为用户层提供接口函数,向下为驱动程序提供统一的接口函数。...这样就能够将输入设备的事件通过输入子系统发送给应用层的应用程序,应用程序也可以通过输入子系统通知驱动程序完成某些任务。 下一篇:Linux input子系统的代码分析(input core)
前面两篇文章写了《input子系统的的概念》和《分析input子系统的代码》。这一篇文章来说说input子系统的驱动程序编写。...input子系统的驱动编写要点: 1.分配input_dev结构体(函数:struct input_dev *input_allocate_device(void)) 2.注册input设备(函数:int...从这句话中,可以看出input子系统的驱动部分会变得简单。 input子系统的驱动还是比较简单的,因为大部分工作,都在input核心层,input handler做完了。...input驱动代码,我是在之前文章《linux 中断机制》和input子系统的驱动编写要点结合进行修改的。你会发现代码很简单。 上面说到,input设备是使用input_dev结构体来描述。...其它代码含义请参看include/linux/input.h文件。 事件值(value):事件的值。如果事件的类型是EV_KEY,当按键按下时值为1,松开时值为0。
上一篇文章写了《input子系统的的概念》。今天这篇文章主要分析input子系统的代码,input子系统作为一个字符设备存在kernel中,我们从input这个模块的入口函数开始讲起。...input子系统的核心代码:drivers\input\input.c。 《一》 input模块的入口函数:如图1-1,入口函数通过调用register_chrdev()注册一个字符设备。...其中 ① INPUT_MAJOR:主设备号:13(如图1-2,定义在include\linux\major.h下)。 ② &input_fops:file_operations结构体(如图1-3)。...其实input子系统也一样,驱动跟handle的注册也是没有优先顺序的。...图8-1 下一篇:Linux input子系统的驱动开发
Input子系统的流程图 ? 从图中可以看到一次完整的事件传递包含两个进程,system_server和app进程,我们这一篇先来分析一下左边部分,也就是system_server。...知识准备-epoll epoll有关的知识可以看我好友的博客Linux基础知识之IO多路复用epoll 简单解释一下epoll的作用,类似于java中某个锁的wait,可以让线程block,并不占用cpu..." add device 3: /dev/input/event3 name: "ff_key" add device 4: /dev/input/event2 name: "gpio-keys..." add device 5: /dev/input/event0 name: "qpnp_pon" add device 6: /dev/input/event1 name:...这个问题我们将会在[018]Input子系统-下篇中讲解 参考文章 Input系统—启动篇 Input系统—InputReader线程 Input系统—InputDispatcher线程
概述 ---- linux中input子系统与I2C子系统类似,也被主观分成三部分:输入驱动、输入设备和输入核心。...在linux系统中(linux4.9.88),构建了input子系统,所有采用input子系统的设备,在有输入事件后都会主动上报输入事件。 在输入设备中会有以下几个问题:a. 何时上报?...---- 输入核心(driver/input/input.c): 此代码主要负责搭建linux中input子系统架构,从入口函数进行分析: /* include/uapi/linux/major.h *...在linux中是这样的,当有按键被按下时,输入设备代码中的中断就会被触发,此时我们只需要在中断中获取按键的状态并调用input子系统提供的上报函数直接上报即可。...input子系统其实就是linux针对不同的输入设备搭建的一个架构,抽象出相同的代码,然后提供用户通用的接口,按linux的标准来就能上报标准的输入数据。
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 Input子系统视频介绍 参考资料: Linux 5.x内核文档 Documentation\input\input-programming.rst Documentation...\input\event-codes.rst Linux 4.x内核文档 Documentation\input\input-programming.txt Documentation\input...这就是输入子系统的驱动程序,框架如下: 3....讲什么内容 3.1 框架 3.2 evdev.c剖析 3.3 input_dev驱动编写 3.4 GPIO按键驱动分析与使用 分析内核自带的GPIO按键驱动:drivers\input\keyboard
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 Input子系统框架详解 参考资料: Linux 5.x内核文档 Documentation\input\input-programming.rst Documentation...\input\event-codes.rst Linux 4.x内核文档 Documentation\input\input-programming.txt Documentation\input...Input子系统框架 3....Input子系统内部实现 3.1 重要结构体 左边的input_dev表示输入设备 右边的input_handler表示"处理程序" 匹配之后使用input_handle保存2者之间的联系
input子系统; 4、创建工作队列(主要是对sensor的数据采集); 5、创建sysfs接口; 2.1 创建input子系统: http://blog.csdn.net/ielife/article...、抬起、相对移动,并且需要在必要的时候提交硬件数据(键值/坐标/状态等等); 3、将输入设备注册到输入子系统中; 1 ps_data->als_input_dev = devm_input_allocate_device...上面代码中我们看到INIT_WORK(&ps_data->stk_ps_work, stk_ps_work_func);,其实是一个宏的定义,在include/linux/workqueue.h中。...stk_ps_work_func()就是我们定义的功能函数,用于查询读取Sensor的距离传感器数据的,并上报Input子系统,代码如下: 1 static void stk_ps_work_func...但如果是一个触摸屏,即有x坐标和y坐标,则需要通过input_sync()函数把x和y坐标完整地传递给输入子系统。
子系统的sensor架构: ?...由图上可知,input子系统上的sensor是由三个子系统构成: 1、input子系统(负责上报给设备节点数据); 2、I2C子系统负责sensor driver与sensor传感器进行通信; 3、xSensor...core,下有I2C,驱动需要通过I2C采集信息,并准确及时的上报数据至input core。...驱动上报的数据,是被input core管理并被上层使用的,应符合input core和上层应用框架的要求; 下面以stk3311(drivers/input/misc)为例: 1、makefile和kconfig.../misc目录下找到编译生成的stk3x1x.o的二进制文件; 由于Android是直接按make bootimage来编译内核生成boot.img,所以没有像linux那样make menuconfig
一文搞懂 | Linux 时钟子系统 Clock 时钟就是 SoC 中的脉搏,由它来控制各个部件按各自的节奏跳动。比如,CPU主频设置,串口的波特率设置,I2S的采样率设置,I2C的速率设置等等。
2、概述 led 子系统驱动框架: 所有 led 共性: 有和用户通信的设备节点 亮和灭 不同点: 有的 led 可能是接在 gpio 管脚上,不同的 led 有不同的 gpio 来控制 有的 led...可能由其他的芯片来控制(节约 cpu 的 pin,或者为了控制 led 的电流等) 可以设置亮度 可以闪烁 所以 Linux led 子系统把所有 led 的共性给实现了,把不同的地方留给驱动工程师去做...led 子系统核心文件: driver/leds/led-class.c driver/leds/led-core.c driver/leds/led-triggers.c include/linux/...led 子系统是一个简单的 Linux 子系统 ,在目录 /sys/class/leds 下展示该子系统设备,每个设备都有自己的属性: brightness:设置 LED 亮度,范围 0 ~ max_brightness...触发方式,如 heartbeat、mmc0、backlight、gpio delay_off、delay_on:trigger为timer时,LED亮灭的时间,单位ms kernel/include/linux
Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...1、IIO 子系统简介 IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO 是只用于工业领域的。...大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...Linux 内核使用 iio_chan_spec 结构体来描述通道,定义在 include/linux/iio/iio.h 文件中。
rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。...rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs 和 proc 文件系统下的访问。...rx8010_set_alarm rx8010_set_time 软件逻辑就不在这里赘述了,大家可以参考下面链接 https://jasper1024.com/jasper/c089e4b/ 大家多看几个 Linux...子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。
这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器,SPI 接口的话使用 spi_write/spi_read等。...I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。...regmap 是 Linux 内核为了减少慢速 I/O 在驱动上的冗余开销,提供了一种通用的接口来操作硬件寄存器。...Linux 内核提供了针对不同接口的 regmap 初始化函数。
8)底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...这通常是由于与这个按键对应的输入设备驱动汇报了一个和电源相关的input_event,用户空间的电源管理daemon进程收到这个事件后,再触发s2ram的。...当然,内核也有一个INPUT_APMPOWER驱动,位于drivers/input/apm-power.c下,它可以在内核级别侦听EV_PWR类事件,并通过apm_queue_event(APM_USER_SUSPEND
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...目录 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API...中TCP,UDP协议包在网络子系统中的实现流程。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API 需要屏蔽协议
前言: 上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。...计算机里的时钟硬件 前文曾经提到过,内核时间子系统的实现也需要有硬件的支持。...由于这些时钟都和时间子系统关系不大,所以本文中就不讨论它们了。...Linux时间子系统的文件汇总 Linux kernel 时间子系统的源文件位于linux/kernel/time/目录下,基本包含如下: 这里面也包含几个重要的数据结构,接下来会分开说说: Clocksource...显然关于Linux时间子系统的内容,还有很多可以深入挖掘,在此篇幅有限,就不做过多赘述了,也希望同样对操作系统感兴趣的小伙伴与我们一起交流。
中断是大家用的最多的功能,不管是单片机还是 Linux 系统,都需要用到中断,对它的深入理解是非常必要的。 为什么需要中断?...中断子系统硬件架构 一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器和CPU本身。...中断子系统架构 整个中断子系统的架构分为 4 层,最底层(第四层)为硬件,包括 CPU、中断控制器。第三层是 CPU 的驱动和中断控制器的驱动,由芯片原厂负责。...第二层是 Linux 内核提供的通用中断处理模块,这一层存在的意义在于,希望用户在第一层写的驱动在移植的时候更方便,保持接口不变,不让用户直接使用芯片原厂的 API,而是 Linux 的 API。...关于中断子系统,我写了八篇文章,从头到尾讲了一遍,大家可以去我的blog查看: http://www.linuxer.vip/linux-interrupt1/
领取专属 10元无门槛券
手把手带您无忧上云