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设备控制器,为什么不直接和硬件打交道,为什么要中间多核心层和适配层?

相关推荐
secondyoung6 小时前
I2C通信协议详解
arm开发·驱动开发·stm32·单片机·嵌入式硬件·mcu·51单片机
一技安身7 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师8 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
迷途呀8 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
赴生-8 小时前
Liunx 操作系统 进程概念(上)
linux
binqian9 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌9 小时前
Shell编程——if条件语句
linux·运维·shell
Dawn-bit9 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马9 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器
mounter62510 小时前
Linux 7.2 引入更灵活的块设备错误注入机制
linux·linux kernel·kernel·disk·error injection