首页 > 其他分享 >通用驱动i2c-dev分析

通用驱动i2c-dev分析

时间:2023-07-30 17:11:36浏览次数:35  
标签:I2C dev ioctl i2cdev 驱动 i2c open

参考资料:

  • 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,ioctl,i2cdev,驱动,i2c,open
From: https://www.cnblogs.com/liusiluandzhangkun/p/17591696.html

相关文章

  • Rockchip RK3399 - Machine驱动(simple-card)
     ----------------------------------------------------------------------------------------------------------------------------开发板:NanoPC-T4开发板eMMC:16GBLPDDR3:4GB显示屏:15.6英寸HDMI接口显示屏u-boot:2023.04linux  :6.3------------------------......
  • Rockchip RK3399 - Codec驱动( Realtek ALC5651)
    ----------------------------------------------------------------------------------------------------------------------------开发板:NanoPC-T4开发板eMMC:16GBLPDDR3:4GB显示屏:15.6英寸HDMI接口显示屏u-boot:2023.04linux :6.3----------------------------......
  • Rockchip RK3399 - Platform驱动(DMA&i2s0)
    Platfromdriver提供了配置/使能SoC音频接口的能力;Plaftrom驱动分为两个部分:snd_soc_platform_driver、snd_soc_dai_driver。snd_soc_platform_driver:负责管理音频数据,把音频数据通过DMA或其他操作传送至CPUDAI中;snd_soc_dai_driver:负责完成SoC一侧的DAI参数配置,同时也会通过......
  • ClevopyAI - 人工智能驱动的营销文案生成工具
    ClevopyAI是一款基于人工智能技术的营销文案开发工具,可以极大地提高文案创作效率,助你轻松吸引目标受众。ClevopyAI的主要功能提供90多种营销文案模板,覆盖电商、代写、教育等多个行业图片生成器可根据文案关键词自动生成匹配的高质量图片支持一键批量生成标题、简介、文章等......
  • 黑苹果如何在macOS Sonoma中驱动博通网卡
    准备资源资源包中包含:AirportBrcmFixup.kext/IOSkywalkFamily.kext/IO80211FamilyLegacy.kext/OpenCore-Patcher 使用方法:1.将csr-active-config设置为03080000全选代码复制2.在boot-args中添加amfi=0x803.在Delete中添加csr-active-config4.将SecureBootModel设置为D......
  • 设备驱动-10.中断子系统-4.3中断线程化处理-threaded_irq
    1.threaded_irq引入工作队列用起来挺简单,但是它有一个缺点:工作队列中有多个work,前一个work没处理完会影响后面的work执行,导致后面的work没法快速响应。那么可以再内核自己创建一个线程来单独处理,不跟别的work凑在一块了。比如在Linux系统中,对于存储设备比如SD/TF卡,它......
  • 关于静态库的创建,以及关于 自己修改的驱动以 静态库的方式呈现。
    首先实验普通的静态库的程序。目标就是,公司的驱动最好以库的方式提供给用户。           编写一个makefile 继续在驱动中进行测试。网上的资料  这个写的是不对的。测试了半天发现没有办法去引用libxxx.a 但是可以去引用一个.o......
  • 极具性价比的步进电机驱动芯片-TMC2226/TMC2209使用小结
    TMC2226/2209相对于TMC2660C、TMC5160来说,价格低了很多,同时功能并没有太多阉割。对比TMC5160,少了内部加减速曲线,电流足够(Ipeak=2.8A),相对5160而言功能也很足够,所以毫无疑问TMC2226是极具性价比的步进驱动芯片。让我们一起看看TMC2226/TMC2209的一些特点:1、配置接......
  • linux驱动模板
     最基本#include<linux/module.h>//需要测试是否还需要其他头文件staticint__initled_init(void){}staticvoid__exitled_exit(void){}module_init(led_init);//驱动初始化module_exit(led_exit);//驱动退出MODULE_LICENSE......
  • VMware ESXi 8.0U1c Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
    VMwareESXi8.0U1cUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)发布ESXi8.0U1c集成驱动版,在个人电脑上运行企业级工作负载请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2023-07-......