I2C驱动总共分为三层

来源:互联网 发布:windows repair win10 编辑:程序博客网 时间:2024/04/30 20:16

I2C驱动总共分为三层:I2C总线适配器驱动层,设备驱动层,I2C核心层。


1、总线适配器驱动层是一个平台设备驱动(platform-device-driver,对应的是控制器的驱动,它分为I2C控制器驱动i2c-s3c2410.c文件中)和设备资源(在devs.c文件中声明资源,在mach-smdk2410.c中注册资源),对应一个虚拟总线将它们挂接起来,定义描述具体i2c总线适配器的i2c_adapter数据结构、实现在具体i2c适配器上的i2c总线通信方法,并由i2c_algorithm数据结构进行描述

2、设备驱动层是对于具体设备的一个驱动比如eeprom驱动(在eeprom.c文件中),由I2C总线将驱动与控制器挂接起来;定义描述具体设备的i2c_client和可能的私有数据结构、借助i2c框架的i2c_probe函数实现注册设备的attach_adapter方法、提供设备可能使用的地址范围、以及设备地址检测成功后创建i2c_client数据结构的回调函数。

3、I2C核心层(在i2c-core.ci2c.h中)就类似于一个封装起来的函数库,它提供公用的结构体,提供注册和注销的接口,提供公用或者转接函数,起一个上下层承接的作用。

还有一个i2c-dev.c文件,i2c-dev模块为系统中所有的i2c适配器创建相应的/dev/i2c-x字符设备节点,并注册设备访问方法,从而使得用户进程可以访问该i2c总线上的设备。它包含I2C适配器申请主设备号(内核中已规定#define I2C_MAJOR 89)和创建设备类以及对设备的操作方法file_operations(也就是找到对应的adapterclient,并做相应操作),主设备号的申请放这里,是因为I2C的主设备号相同,当有多个控制器时,不必每次都申请。

0 0
原创粉丝点击