通用驱动i2c-dev分析

本文深入剖析了Linux系统中的通用驱动i2c-dev,包括字符设备驱动的原理,i2c-dev的注册过程,以及file_operations结构体中的关键函数如open和ioctl的实现,特别是针对I2C_SLAVE,I2C_SLAVE_FORCE,I2C_RDWR和I2C_SMBUS的ioctl操作进行了详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通用驱动i2c-dev分析



参考资料:

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

一、温顾而知新——字符设备驱动程序

在这里插入图片描述
怎么编写字符设备驱动程序?

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

二、 i2c-dev.c注册过程分析

2.1 register_chrdev的内部实现

在这里插入图片描述

2.2 i2c-dev驱动的注册过程

在这里插入图片描述

三、 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 总结

在这里插入图片描述


致谢

以上笔记源自韦东山老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值