前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统驱动之通用驱动i2c-dev分析

Linux系统驱动之通用驱动i2c-dev分析

作者头像
韦东山
发布2021-12-08 10:49:57
1.9K0
发布2021-12-08 10:49:57
举报
文章被收录于专栏:韦东山嵌入式

资料下载

coding无法使用浏览器打开,必须用git工具下载:

代码语言:javascript
复制
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

通用驱动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的核心:

代码语言:javascript
复制
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 总结
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资料下载
  • 视频观看
  • 通用驱动i2c-dev分析
    • 1. 回顾字符设备驱动程序
      • 2. i2c-dev.c注册过程分析
        • 2.1 register_chrdev的内部实现
        • 2.2 i2c-dev驱动的注册过程
      • 3. file_operations函数分析
        • 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 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档