linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述:

可以将上面这一 I2C 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层, 本篇主要内容就是介绍 I2C 子系统框架中的内核空间。

在用户空间,主要学习如何使用i2c编写应用程序。(业务层)

在内核空间,放的就是和i2c相关的驱动程序,如果使用i2c编写驱动程序。(主要关注)

在硬件层,就是放着具体的某一个i2c外设。比如触摸屏的芯片......。

学习主要学习这一层。

在i2c设备驱动层,第一件事就是编写外设的驱动程序,比如触摸屏芯片的驱动程序,让触摸屏芯片工作起来。第二个作用就是创建设备节点,因为在它上面的是应用程,应用层上面想操控外设,比如读写,就需要访问设备节点,访问节点就是对硬件操作。按照以前的子系统,编写完驱动,就是可以自己和硬件打交道了。但是这里不是直接和硬件打交道

把数据交给了核心层,为什么?i2c的核心层作用是什么。

搞定i2c核心层,之前先了解i2c适配器驱动层,i2c适配程是直接和硬件打交道的

我的rk3568是用硬件产生i2c协议的,所以在硬件层,i2c外设,是通过SCL和SDA这两根线连接到cpu的i2c控制器,所以硬件能产生这个i2c波形,就是靠这个i2c控制器。是看不到摸不着的,在cpu里面。

所以i2c控制器也是一个硬件,想要硬件运行起来我们就需要有对应的驱动程序,所以i2c适配器驱动层的作用就是编写i2c控制器的驱动程序,让i2c控制器运行起来,也就是说让i2c控制器可以产生对应的波形,有一些地方i2c_adapter结构体就是代表i2c控制器

i2c的核心层是位于i2c设备驱动和i2c适配器驱动层的中间,所以作用就是承上启下。

最后的问题,竟然有了i2c设备控制器,为什么不直接和硬件打交道,为什么要中间多核心层和适配层?

相关推荐
一颗小树x1 分钟前
Llama 3.1 本地电脑部署 Linux系统 【轻松简易】
linux·llama·本地部署·3.1
Struggle Sheep1 小时前
linux安装redis
linux·运维·redis
butteringing2 小时前
BuildFarm Worker 简要分析
linux·软件构建·bazel·re api
reset20213 小时前
ubuntu离线安装ollama
linux·ubuntu·ollama
放氮气的蜗牛3 小时前
Linux命令终极指南:从入门到精通掌握150+核心指令
linux·运维·服务器
DC_BLOG4 小时前
Linux-Ansible模块进阶
linux·运维·服务器·ansible
Imagine Miracle4 小时前
【Deepseek】Linux 本地部署 Deepseek
linux·运维·服务器
SuperPurse4 小时前
linux下查看当前用户、所有用户的方法
linux·运维·服务器
Once_day4 小时前
linux之perf(17)PMU事件采集脚本
linux·运维·perf
m0_747124534 小时前
Linux 驱动入门(5)—— DHT11(温湿度传感器)驱动
linux·linux驱动