linux一个iic上有多个设备,Linux中IIC设备驱动再细读_1

本文详细介绍了Linux内核中S3C2440 soc的IIC设备驱动注册流程,包括i2c_driver和i2c_adapter的注册,以及设备探测和连接的过程。通过分析内核代码,解析了驱动与硬件设备之间的交互,包括平台设备资源注册、驱动注册、adapter构造和设备文件创建等关键步骤。
摘要由CSDN通过智能技术生成

S3C2440内核IIC设备驱动建立流程:

由内核打印信息,追索驱动流程:

参考的内核版本为: linux-2.6.22.6

----------------------------------------

内核注册流程:

由打印信息:

1. 先注册 i2c_driver:i2cdev_driver                --- \drivers\i2c\i2c-dev.c

前面分析过,内核启动初始化会执行函数:i2c_dev_init

i2c_dev_init(void)

register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);       // 注册字符设备,主设备号为:I2C_MAJOR,应用层统一的操作接口为 i2cdev_fops

i2c_dev_class = class_create(THIS_MODULE, "i2c-dev");  // 构建一个class:i2c_dev_class

i2c_add_driver(&i2cdev_driver);

i2c_register_driver(THIS_MODULE, driver);

driver_register(&driver->driver);

list_add_tail(&driver->list,&drivers);   // 这里将 i2cdev_driver 挂接到 drivers 链表上

// 遍历adapters链表中的adapter,调用函数 i2cdev_attach_adapter(adapter)

if (driver->attach_adapter) {   // 这里 driver->attach_adapter = i2cdev_attach_adapter

struct i2c_adapter *adapter;

// 在系统初始化的时候,adapters链表上,还没有初始化adapter元素,所以找不到adapter

list_for_each_entry(adapter, &adapters, list) {

driver->attach_adapter(adapter);  // 初始化的时候,找不到adapter,所以该句不会执行。

}

}

static struct i2c_driver i2cdev_driver = {

.driver = {

.name    = "dev_driver",

},

.id        = I2C_DRIVERID_I2CDEV,

.attach_adapter    = i2cdev_attach_adapter,

.detach_adapter    = i2cdev_detach_adapter,

.detach_client    = i2cdev_detach_client,

};

注:

这个代码是linux内核做好的框架,内核启动,就会注册一个i2c字符设备以及类,i2c-driver链表。

并且为这个i2c字符设备提供了统一的应用层的操作接口函数。

打印信息:

i2c /dev entries driver

i2c_dev_init, i2c_add_driver: i2cdev_driver

-------------------------------------------------

2. 然后注册i2c_adapter:  s3c24xx_i2c.adap       --- \drivers\i2c\busses\i2c-s3c2410.c

注:这里就是针对不同的Soc注册i2c adapter,adapter是针对硬件i2c设备来说的。

在S3C2440中,使用平台总线驱动来注册I2C设备的。

2.1 初始化注册i2c平台设备资源:<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值