Linux内核基础 -- I2C 控制器驱动开发指南

2024-05-16 13:12

本文主要是介绍Linux内核基础 -- I2C 控制器驱动开发指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux Kernel I2C 控制器驱动开发指南

本文档旨在指导开发者如何在 Linux 内核中编写和注册 I2C 控制器驱动。

1. I2C 控制器驱动代码位置

在 Linux 内核中,I2C 控制器的驱动代码通常位于以下路径:

drivers/i2c/busses/

在这个目录中,每个 I2C 控制器的驱动通常都有一个独立的 C 文件。例如,i2c-bcm2835.ci2c-imx.c 等。

2. 将 I2C 控制器驱动注册进 Linux 框架

要将 I2C 控制器驱动注册进 Linux 框架,通常需要完成以下步骤:

2.1 定义并初始化 I2C 控制器的 i2c_adapter 结构体

static struct i2c_adapter my_i2c_adapter = {.owner = THIS_MODULE,.class = I2C_CLASS_HWMON,.algo = &my_i2c_algorithm,.dev.parent = &pdev->dev,.nr = my_i2c_bus_number,.name = "My I2C Adapter",
};

2.2 实现 I2C 控制器的操作函数

这些操作函数包括 master_xferfunctionality 等,通常在 i2c_algorithm 结构体中定义。

static struct i2c_algorithm my_i2c_algorithm = {.master_xfer = my_i2c_master_xfer,.functionality = my_i2c_functionality,
};

2.3 注册 I2C 适配器

在驱动的 probe 函数中调用 i2c_add_adapter 将 I2C 适配器注册到 I2C 核心框架中。

static int my_i2c_probe(struct platform_device *pdev)
{// 设备初始化代码...// 注册 I2C 适配器ret = i2c_add_adapter(&my_i2c_adapter);if (ret)return ret;...
}

2.4 注销 I2C 适配器

在驱动的 remove 函数中调用 i2c_del_adapter 注销 I2C 适配器。

static int my_i2c_remove(struct platform_device *pdev)
{i2c_del_adapter(&my_i2c_adapter);...
}

2.5 定义平台驱动结构体

包含 proberemove 函数,并通过 module_platform_driver 宏进行注册。

static struct platform_driver my_i2c_driver = {.probe = my_i2c_probe,.remove = my_i2c_remove,.driver = {.name = "my_i2c",.of_match_table = of_match_ptr(my_i2c_dt_ids),},
};module_platform_driver(my_i2c_driver);

3. my_i2c_functionality 函数的作用

my_i2c_functionality 函数在 I2C 控制器驱动中用于返回该 I2C 控制器所支持的功能。这些功能定义在 I2C 核心框架中,并以一组标志(flags)的形式表示。这些标志可以是对 I2C 核心框架提供的一些标准功能的支持,比如 10-bit 地址模式、多主模式等。

3.1 常见的功能标志

以下是一些常见的 I2C 功能标志,它们定义在 include/linux/i2c.h 文件中:

  • I2C_FUNC_I2C: 标准 I2C-level 功能(读写传输)。
  • I2C_FUNC_10BIT_ADDR: 支持 10-bit 地址。
  • I2C_FUNC_PROTOCOL_MANGLING: 支持协议转换。
  • I2C_FUNC_SMBUS_EMUL: 支持 SMBus 仿真。
  • I2C_FUNC_SMBUS_QUICK: 支持 SMBus Quick 命令。
  • I2C_FUNC_SMBUS_READ_BYTE: 支持 SMBus 读字节命令。
  • I2C_FUNC_SMBUS_WRITE_BYTE: 支持 SMBus 写字节命令。
  • I2C_FUNC_SMBUS_READ_BYTE_DATA: 支持 SMBus 读字节数据命令。
  • I2C_FUNC_SMBUS_WRITE_BYTE_DATA: 支持 SMBus 写字节数据命令。
  • I2C_FUNC_SMBUS_READ_WORD_DATA: 支持 SMBus 读字数据命令。
  • I2C_FUNC_SMBUS_WRITE_WORD_DATA: 支持 SMBus 写字数据命令。
  • I2C_FUNC_SMBUS_BLOCK_DATA: 支持 SMBus 块数据传输。

3.2 示例

假设我们的 I2C 控制器支持标准 I2C 功能和 SMBus 仿真功能,那么 my_i2c_functionality 函数可以这样实现:

static u32 my_i2c_functionality(struct i2c_adapter *adap)
{return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
}

这个函数返回一个 32-bit 的整数,其中每个 bit 表示一个支持的功能。I2C 核心框架调用这个函数以了解该 I2C 控制器的能力,然后可以相应地执行不同的操作。

这篇关于Linux内核基础 -- I2C 控制器驱动开发指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995006

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: