通用驱动i2c-dev分析

Posted 韦东山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用驱动i2c-dev分析相关的知识,希望对你有一定的参考价值。

通用驱动i2c-dev分析

参考资料:

  • Linux驱动程序: drivers/i2c/i2c-dev.c
  • I2C-Tools-4.2: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
  • AT24cxx.pdf

1. 回顾字符设备驱动程序

怎么编写字符设备驱动程序?

  • 确定主设备号
  • 创建file_operations结构体
    • 在里面填充drv_open/drv_read/drv_ioctl等函数
  • 注册file_operations结构体
    • register_chrdev(major, &fops, name)
  • 谁调用register_chrdev?在入口函数调用
  • 有入口自然就有出口
    • 在出口函数unregister_chrdev
  • 辅助函数(帮助系统自动创建设备节点)
    • class_create
    • device_create

2. i2c-dev.c注册过程分析

2.1 register_chrdev的内部实现

2.2 i2c-dev驱动的注册过程

3. file_operations函数分析

i2c-dev.c的核心:

static const struct file_operations i2cdev_fops = {
	.owner		= THIS_MODULE,
	.llseek		= no_llseek,
	.read		= i2cdev_read,
	.write		= i2cdev_write,
	.unlocked_ioctl	= i2cdev_ioctl,
	.compat_ioctl	= compat_i2cdev_ioctl,
	.open		= i2cdev_open,
	.release	= i2cdev_release,
};

主要的系统调用:open, ioctl:

要理解这些接口,记住一句话:APP通过I2C Controller与I2C Device传输数据。

3.1 i2cdev_open

3.2 i2cdev_ioctl: I2C_SLAVE/I2C_SLAVE_FORCE

3.3 i2cdev_ioctl: I2C_RDWR

3.4 i2cdev_ioctl: I2C_SMBUS

3.5 总结

以上是关于通用驱动i2c-dev分析的主要内容,如果未能解决你的问题,请参考以下文章

[国嵌攻略][155][I2C用户态驱动设计]

Kernel的IIC驱动分析

I2C驱动实现的两种思路(i2c-dev.c和i2c-core.c)

Linux I2C驱动--用户态驱动简单示例

I2C驱动实现的两种思路

IIC协议——i2c-dev的使用