首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux驱动之I2C子系统剖析

I2C是广泛应用于计算机中的串行总线,用于处理器其外设之间的通信。 I2C硬件基本概念 I2C总线由两根传递数据的双向信号线与一根地线组成,半双工、主从方式通信。...总线速度有三种模式 标准模式 100kbps 快速模式 400kbps 高速模式 3.4Mbps I2C子系统框架 I2C设备驱动层:drivers/i2c/i2c-dev.c (通用型) 或者为特定设备定制的设备驱动...笔者会大体上对I2C子系统的源码进行分析,如若分析的有出入,还望指出。 I2C核心层 I2C核心层的实现位于drivers/i2c/i2c-core.c中,笔者从i2c_init函数开始分析。...核心层分析可知,I2C总线是根据id_table进行匹配,所以这里并不会按照常规的Linux驱动模型进行match后probe,况且这个驱动里也没有probe方法。...); 把关注点放在初始化I2C控制器的s3c24xx_i2c_init函数申请IRQ上。

6.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    12.Linux输入子系统分析(详解)

    所以需要使用输入子系统, 使应用程序无需打开多个不同的驱动设备便能实现 1.输入子系统简介 同样的输入子系统也需要输入驱动的框架,好来辨认应用程序要打开的是哪个输入驱动 比如: 鼠标、键盘、游戏手柄等等这些都属于输入设备...;这些输入设备的驱动都是通过输入子系统来实现的(当然,这些设备也依赖于usb子系统) 这些输入设备都各有不同,那么输入子系统也就只能实现他们的共性,差异性则由设备驱动来实现。...对于我们写驱动的人来说在设备驱动中就只要使用输入子系统提供的工具(也就是函数)来完成这些“差异”就行了,其他的则是输入子系统的工作。...这个思想不仅存在于输入子系统,其他子系统也是一样(比如:usb子系统、video子系统等) 所以我们先来分析下输入子系统input.c的代码,然后怎么来使用输入子系统(在内核中以input来形容输入子系统...只有一个.open函数,显然输入子系统就是通过这个函数来实现输入设备的驱动,接下来我们以按键驱动为例来分析这个函数。

    1.6K61

    Linxu 输入子系统分析

    /*输入子系统分析 input.c*/ /*1. 为什么需要输入子系统? 由于我们平时用的输入设备比较杂乱,比较多。 比如: 鼠标,键盘, 触摸屏等。...这样的好处是对所有的设备进行一个统一抽象处理。形成一个统一的接口。方便驱动的编写等。 这种机制就是输入子系统。...*/ /*搜索工程,发现是各式各样的输入设备。 比如键盘, 鼠标, 游戏句柄等。...同理: 当注册input_handler时,会去input_dev的链表中, (省略, 上面的操作几乎一样) */ /*那还有几个问题? 当应用程序read时, 我们的驱动程序应该干些什么?..., d_node) if (handle->open) handle->handler->event(handle, type, code, value); } /* 总结:如何写一个符合输入子系统的驱动程序

    32620

    Linux Led 子系统

    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

    41330

    Linux RTC 子系统

    rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。...rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs proc 文件系统下的访问。...主要是设置时间、获取时间、设置闹钟、读闹钟,以及 rtc 中断处理函数闹钟中断处理函数。...rx8010_set_alarm rx8010_set_time 软件逻辑就不在这里赘述了,大家可以参考下面链接 https://jasper1024.com/jasper/c089e4b/ 大家多看几个 Linux...子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。

    18810

    Linux IIO 子系统

    工业场合里面也有大量的模拟量和数字量之间的转换,也就是我们常说的 ADC DAC。而且随着手机、物联网、工业物联网可穿戴设备的爆发,传感器的需求只持续增强。...Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...sizeof_priv:私有数据内存空间大小,一般我们会将自己定义的设备结构体变量作为 iio_dev 的私有数据,这样可以直接通过 iio_device_alloc 函数同时完成 iio_dev 设备结构体变量的内存申请...Linux 内核使用 iio_chan_spec 结构体来描述通道,定义在 include/linux/iio/iio.h 文件中。

    2.2K40

    Linux Regmap 子系统

    学习 I2C SPI 驱动的时候,针对 I2C SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。...这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...1、什么是 Regmap Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。...Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器,SPI 接口的话使用 spi_write/spi_read等。...I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。

    2.8K40

    Linux 电源管理子系统

    8)底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。...1、CPUFreq 驱动 CPUFreq 子系统位于 drivers/cpufreq 目录下,负责进行运行过程中 CPU 频率电压的动态调整,即 DVFS(Dynamic Voltage Frequency...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...这通常是由于与这个按键对应的输入设备驱动汇报了一个电源相关的input_event,用户空间的电源管理daemon进程收到这个事件后,再触发s2ram的。

    2.9K20

    Linux 网络子系统

    今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...目录 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API...Linux实现的是链路层、网络层传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API 需要屏蔽协议

    3.5K21

    Linux时间子系统(下)

    前言: 上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。...由于这些时钟都时间子系统关系不大,所以本文中就不讨论它们了。...Linux时间子系统的文件汇总 Linux kernel 时间子系统的源文件位于linux/kernel/time/目录下,基本包含如下: 这里面也包含几个重要的数据结构,接下来会分开说说: Clocksource...相信通过两期的内容,可以帮助大家对计算机时间子系统有一个大概的了解,同时更好的理解hrtimertimekeeping原理。...显然关于Linux时间子系统的内容,还有很多可以深入挖掘,在此篇幅有限,就不做过多赘述了,也希望同样对操作系统感兴趣的小伙伴与我们一起交流。

    38210

    Linux 电源管理子系统

    8)底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。...1、CPUFreq 驱动 CPUFreq 子系统位于 drivers/cpufreq 目录下,负责进行运行过程中 CPU 频率电压的动态调整,即 DVFS(Dynamic Voltage Frequency...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...这通常是由于与这个按键对应的输入设备驱动汇报了一个电源相关的input_event,用户空间的电源管理daemon进程收到这个事件后,再触发s2ram的。

    4K20

    Linux 中断子系统(一):框架

    中断子系统硬件架构 一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器CPU本身。...在现代的移动设备中,发起中断的设备可以位于soc(system-on-chip)芯片的外部,也可以位于芯片的内部,因为目前大多数 soc 都集成了大量的硬件 IP,例如 I2C、SPI、Display...中断子系统架构 整个中断子系统的架构分为 4 层,最底层(第四层)为硬件,包括 CPU、中断控制器。第三层是 CPU 的驱动中断控制器的驱动,由芯片原厂负责。...第二层是 Linux 内核提供的通用中断处理模块,这一层存在的意义在于,希望用户在第一层写的驱动在移植的时候更方便,保持接口不变,不让用户直接使用芯片原厂的 API,而是 Linux 的 API。...关于中断子系统,我写了八篇文章,从头到尾讲了一遍,大家可以去我的blog查看: http://www.linuxer.vip/linux-interrupt1/

    3.3K10

    浅谈 Linux 内核无线子系统

    浅谈 Linux 内核无线子系统 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送接收呢?...1 全局概览 在开始探索 Linux 无线具体细节之前,让我们先来把握一下 Linux 无线子系统整体结构。如图1,展示了 Linux 无线子系统各个模块之间的抽象关系。 ?...通常我们把 Linux 内核无线子系统看成两大块: cfg80211 mac80211 ,它们连通内核其他模块用户空间的应用程序。...Linux 内核无线子系统统一各种 WiFi 设备,并处理 OSI 模型中最底层的 MAC 、 PHY 两层。 若进一步划分, MAC 层可以分为 MAC 高层 MAC 底层。...Linux 子系统实现大部分的 MAC 高层回调函数。 2 模块间接口 从图一中我们可以看出,各个模块之间分界线很清晰,并且模块间相互透明不可见。模块之间一般不会相互影响。

    3.3K31

    手把手教你使用 gpio 子系统 API

    本文讲解 pinctrl 子系统 gpio 子系统的 API,以及使用示例。 传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如 pin 功能冲突)。...pin controller GPIO Controller 不是一回事,前者控制引脚可用于 GPIO 功能、I2C 功能等功能性切换;后者只是把引脚配置为输入、输出、设置GPIO方向、获取值等简单的功能...在 kernel/drivers/misc/ 中新建文件夹,命名为 mygpio,里面放置 gpio.c Makefile。然后输入 make 编译出 gpio.ko。...比如 GPIO50 ,一开始初始化的时候是 I2C ,设备待机时候,我希望切换到普通 GPIO 模式,并且配置为下拉输入,省电。...对于 pinctrl 子系统的设备树配置,是遵守 service client 结构。 client 端各个平台基本都是一样的,server 端每个平台都不一样,使用的字符串的配置也不一样。

    1.9K10

    windows的Linux子系统安装

    1.启用子系统功能 需要win系统支持子系统 进入控制面板 -> 程序功能 -> 启用或关闭windows功能: 勾选适用于Linux的windows子系统,确定,等待后,确认重启设备 2.下载子系统...方案二:重置Windows 10商店缓存后测试 按WIN+R组合键调出运行,输入WSRESET,点击确定 应用商店重置命令会运行,并打开Win10商店 方案三:修改internet选项 1.打开控制面板...进入需要的版本,点击获取 默认安装到C盘(若不想安装到C盘,看本篇最后),点击安装 等待下载完成后,启动即可, 3.子系统相关配置 启动后,会提示创建用户设置密码,根据提示操作即可 [card...title="修改root密码" color="info"] 直接输入sudo passwd root修改 [/card] [card title="修改Linux国内镜像源并更新" color="success..."] 输入sudo vi /etc/apt/sources.list命令 把原来的内容注释掉(在最前面加#) 到https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu

    5.4K20

    linux input子系统(1)《Rice linux 学习开发》

    Linux input子系统,分为三篇文章,第一篇:Linux input子系统的概念,第二篇:Linux input子系统的代码分析(input core),第三篇:Linux input子系统的驱动程序编写...答案:linux中将所有的输入设备抽象出input子系统这套软件体系,提供了统一的接口函数,实现了大统一。 input子系统分为三层: 1.输入子系统设备驱动层。...2.输入子系统核心层 3.输入子系统事件处理层 其中: 1.设备驱动层提供对硬件寄存器的读写访问将底层硬件对用户输入访问的相应转换为标准的输入事件,在通过核心层提交给事件处理层。...3.事件层为用户的应用程序提供了统一的设备访问接口,驱动层提交的事件处理。 输入子系统使得我们输入设备的驱动部分不再关心对设备文件的操作,只需要关心对各个硬件寄存器的操作和提交相应的输入事件。...这样就能够将输入设备的事件通过输入子系统发送给应用层的应用程序,应用程序也可以通过输入子系统通知驱动程序完成某些任务。 下一篇:Linux input子系统的代码分析(input core)

    1.9K10

    linux input子系统(2)《Rice linux 学习开发》

    其中 ① INPUT_MAJOR:主设备号:13(如图1-2,定义在include\linux\major.h下)。 ② &input_fops:file_operations结构体(如图1-3)。...③ id_table:用来input_dev匹配(图4-4),从注释上可以获知,支持所有的输入设备。 ④ event:从字面意思理解就是事件处理函数,下面将进一步讲解这个函数。...而input子系统通过调用input_match_device ()函数将input_devinput_handler进行匹配。 在平台总线上不管是注册设备先还是注册驱动,都可以。...图5-4 《六》 Input子系统中注册input_dev注册input_handler都调用了input_match_device()函数。那么我们来看看这个函数实现了什么?...图8-1 下一篇:Linux input子系统的驱动开发

    1.4K20
    领券