首页/新闻资讯/正文详情

linux内核中i2c子系统框架

发布时间:2026/11/2 19:04:25 来源:云帆数科 栏目:资讯中心
linux内核中i2c子系统框架
目录前言内核框架1)重要的数据结构2)框架部分总结前言我们都知道Linux作为应用最为广泛的操作系统之一它源码开放可修改开放性高丰富的硬件生态适配性和可移植性强等等有点。关于硬件的可移植性离不开Linux中丰富的子系统框架但是为啥相同的内核代码可以适配不同的硬件呢今天我们就以i2c子系统为例来唠唠这个事儿。内核框架1)重要的数据结构i2c子系统框架可以分为三层核心层i2c-core控制器层adapteralgorithm还有驱动层driverclient其中核心层是统一抽象层为特异性硬件提供统一的接口和统一管理控制器层则是直接控制硬件i2c控制器的层次它根据芯片上的i2c控制器的各种差异而不同驱动则是需要驱动工程师编写适配一定i2c从设备的业务代码。它们各有一个结构体来描述(1)i2c_adapter它就是总线控制器一个i2c控制器例如一个芯片的i2c1i2c2就是由两个adapter描述的它的存在主要是描述硬件信息和用来提供时序实现底层写寄存器的工作(2)i2c_algorithm它是i2c控制器的一个成员具体的算法是在里面实现例如寄存器读写初始化硬件提供时序等等。(3)i2c_client它代表一个总线上挂的从设备(4)i2c_driver代表从设备驱动写业务代码(5)i2c_msg它比较特殊代表i2c传输数据最小数据单元它描述要写的地址方向数据长度还有要读写的缓冲区也就是一段START地址数据2)框架部分只说数据结构无法将它们与我们之前学习的驱动总线设备模型联系起来很突兀的感觉这时候就需要研究研究。(具体函数实现需要看内核源码有兴趣可自行去网上搜集本例是来自rk3x的控制器源码)(1)i2c_rk3x_probe这个函数里填充了i2c_adapter的各种参数完成对i2c控制器的注册(2)of_i2c_register_devices这里面遍历设备树节点主要目标是把设备树信息读取出来把总线上的设备变成client从设备它重要的是循环中一个函数of_i2c_register_device它其实是下面两个函数的封装我们下面再讲。(3)of_i2c_get_board_info顾名思义就是获取设备树信息的它获取的是reg和compatible信息(4)i2c_new_device根据adapter和上面获得的info俩参数来创建client也就是从设备其实到这里我们就已经比较明白了这个就是我们驱动匹配的总线设备信息我们写的i2cdriver就是匹配这些创建的client至于后面iio等更上层的封装我们以后再细说总结总之呢这就是Linux的魅力也是难点所在一大堆结构体嵌套函数从这个文件跳到另一个文件内核极其庞大想要全部通读内核是不现实的我们要有框架性思维选择性的阅读内核代码了解具体一个简单工作从上层到底层的工作流程这样学习是真实有效的。

相关推荐

P1481 魔族密码
P1481 魔族密码

题目链接: P1481 魔族密码 - 洛谷 思路: 典型的dp题目 首先,如何判断两个单词组成词链? 首先后面的一定要比前边的长 其次就是要满足前缀这个条件(并不是子字符串) 这里用compare函数: c… · 2026/11/2 19:04:25

寒地窄带通信工程实践:黑龙江哈尔滨对讲机选型、组网与合规运维总结
寒地窄带通信工程实践:黑龙江哈尔滨对讲机选型、组网与合规运维总结

目录 背景:东北寒地对讲通信的差异化痛点主流技术路线对比:公网对讲机 vs 数字对讲机(DMR)分场景设备选型标准组网配套与临时通信方案无线电合规风险:对讲机执照办理要点后期运维、维修与备件管理项目选型决策建议总结… · 2026/11/2 19:04:25

把统计表和图里的结果用一句话写清楚:可直接套用的“结果段三步法”与图注模板
把统计表和图里的结果用一句话写清楚:可直接套用的“结果段三步法”与图注模板

我经常看到同学和同事把统计表和几张图做好后,卡在“结果怎么写”——写得像讨论、漏报显著性或让读者看不出图要点。为了能立刻把结果段写完并送审/提交,我总结了一套可直接套用的方法:三步结果模板、几句可搬用的图注句式和一份自检清单。下… · 2026/11/2 19:04:25

单畴IPS液晶显示技术与TechWiz LCD 2D仿真实践
单畴IPS液晶显示技术与TechWiz LCD 2D仿真实践

1. 单畴IPS液晶显示技术概述单畴IPS(In-Plane Switching)液晶显示技术是当前高端显示面板的主流方案之一。与传统的TN(Twisted Nematic)模式相比,IPS液晶分子在电场作用下始终保持平行于基板平面旋转,这使得… · 2026/11/3 13:22:05

1553B总线入门:命令字、消息调度与BC/RT联调
1553B总线入门:命令字、消息调度与BC/RT联调

简介:《1553B总线入门教程》PPT面向航空航天、导弹、无人机及装甲车辆等领域的总线通信初学者与工程技术人员,系统梳理GJB289A/1553B协议的基础概念、标准来源与工程应用要点。压缩包内仅含1个pptx文件,大小约5.26MB,以图文幻灯片… · 2026/11/3 13:22:05

ISO 15118-20 入门:车桩 V2G 通信协议与报文解析
ISO 15118-20 入门:车桩 V2G 通信协议与报文解析

简介:这份ISO 15118-20:2022英文原版标准面向电动汽车充电通信协议开发、车网互动(V2G)研究与测试认证人员,聚焦第二代网络层与应用层要求,为不同品牌车辆与充电设施之间的互操作、安全通信和智能电网调度提供统一技术… · 2026/11/3 13:22:05

ISO 15118-20充电通信入门:分层、SDP发现与TLS证书实战
ISO 15118-20充电通信入门:分层、SDP发现与TLS证书实战

简介:2022年发布的ISO 15118-20国际标准正式文本,聚焦道路车辆与电网之间通信接口的第二代网络层与应用层要求,面向电动汽车充电协议开发、车桩互联互通测试及智能电网研究领域的中高级技术人员,帮助解决不同品牌车型与充电设施之… · 2026/11/3 13:22:05

PPT制作全攻略:从学术到商业的演示设计
PPT制作全攻略:从学术到商业的演示设计

1. 项目概述"从学生到CEO"这个标题精准捕捉了不同职业发展阶段人群的核心痛点——如何快速生成符合场景需求的演讲PPT。作为一位经历过学术汇报、职场晋升到商业路演的过来人,我深刻理解每类场景对演示文档的差异化要求。学生党需要严谨的学术框架&#x… · 2026/11/3 13:22:05

Anaconda3 安装与首配实战:PATH、虚拟环境与依赖验证避坑指南
Anaconda3 安装与首配实战:PATH、虚拟环境与依赖验证避坑指南

简介:面向Python数据科学初学者、高校学生与自学者,这份Anaconda安装指南围绕三大主流操作系统,梳理从官网获取安装包到完成基础环境配置的关键环节。压缩包内仅含1个docx文件,大小约14KB,篇幅轻量,便于本地… · 2026/11/3 13:21:04

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码