linux i2c驱动开发之最简单入门:设备树与驱动的匹配

这篇具有很好参考价值的文章主要介绍了linux i2c驱动开发之最简单入门:设备树与驱动的匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1在设备树中声明我们的模拟I2C设备:

i2c的设备加入是必须放在某个i2c的总线下面的,我们这里是放在 i2c7下面。
可以直接在设备树搜索&i2c7,然后把status 修改为okay,然后再加入设备信息.

&i2c7 {
	status = "okay";
	 myi2c-dev {
		status = "okay";
		compatible ="myi2c-dev";
		reg = <0x70>;
	};
};

这里我们指定和驱动匹配的字符串是 myi2c-dev,在bus segment 上分配的地址是 0x70 。
当然这个地址是我们随便写的,我们只是模拟而已,不会和真正的设备交互。

然后编译,烧录系统。

2 驱动代码:

#include <linux/uaccess.h>
#include <linux/fs.h>
#include <linux/stat.h>
#include <linux/cdev.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/irq.h>
#include <linux/mutex.h>
#include <linux/interrupt.h>
#include <linux/bug.h>			/* For BUG_ON.  */
#include <linux/cpu.h>
#include <linux/init.h> /* Needed for the macros */
#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
#include <linux/delay.h>
#include <linux/smp.h>
#include <linux/kernel_stat.h>
#include <linux/sched.h>
#include <linux/percpu-defs.h>
#include <linux/wait.h>
#include <linux/gpio/driver.h>
#include <linux/atomic.h>
#include <linux/platform_device.h>
#include <linux/poll.h>
#include <linux/kfifo.h>
#include <linux/timer.h>
#include <linux/gpio/consumer.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/acpi.h>
#include <linux/regmap.h>
#include <linux/iio/iio.h>
#include <linux/iio/sysfs.h>

/**

dts:

&i2c7 {
	status = "okay";

	 myi2c-dev@77 {
		status = "okay";
		compatible ="myi2c-dev";
		reg = <0x77>;
	};

};


 */

static const struct i2c_device_id my_i2c_id[] = { { "myi2c-dev", 0 }, { }, };

int my__probe(struct i2c_client *client, const struct i2c_device_id *id) {
	pr_info("my_probe\n");
	return 0;
}

int my_remove(struct i2c_client *client) {
	pr_info("remove\n");
	return 0;
}

static struct i2c_driver my_i2c_driver = {
		.driver =
		{ .name = "my_i2c_driver", },
		.probe = my__probe,
		.id_table = my_i2c_id,
		.remove = my_remove, };

module_i2c_driver( my_i2c_driver);

MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Andy");
MODULE_DESCRIPTION("andy one-key driver");
MODULE_ALIAS("one-key");

id_table 指定和哪个设备匹配。

编译模块,然后insmod,就可以在dmesg中看到打印的信息:my_probe
说明驱动和设备成功匹配.

同时我们可以执行:

tree   /sys/bus/i2c/drivers/my_i2c_driver

来查看此驱动是否有匹配的设备。

会有以下输出:

/sys/bus/i2c/drivers/my_i2c_driver
├── 7-0077 -> ../../../../devices/platform/ff160000.i2c/i2c-7/7-0077
├── bind
├── module -> ../../../../module/a2
├── uevent
└── unbind

其中../../../../devices/platform/ff160000.i2c/i2c-7/7-0077 表示匹配的设备。

欢迎各位评论。文章来源地址https://www.toymoban.com/news/detail-601265.html

到了这里,关于linux i2c驱动开发之最简单入门:设备树与驱动的匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux驱动开发之i2c框架讲解到例程

            本篇章在rk3399平台上,基于设备树的i2c驱动开发。i2c直接使用硬件i2c总线,体系结构分为3部分:I2C 核心、I2C 总线驱动和I2C 设备驱动。 I2C 核心 (i2c-core.c)提供了I2C 总线驱动和设备驱动的注册、注销方法等。我们主要了解Linux中i2c的基本框架,分为 i2c主机驱动开发

    2024年02月02日
    浏览(44)
  • TP驱动——I2C驱动,细节分析——dts设备树

    TP驱动程序,是指带屏幕设备的触屏功能调用的驱动程序。TP外设与主板之间的关系如下框图: 产品常用的屏幕单元为液晶显示屏幕,TP的触摸功能也是一同集成到一起的,通过控制芯片以及外围电路、i2c总线与主板进行通信。 TP驱动的功能逻辑: 当有触点发生时,TP芯片向主

    2024年02月04日
    浏览(42)
  • 详解AT24CXX驱动开发(linux platform tree - i2c应用)

    目录 概述 1 认识AT24Cxx 1.1 AT24CXX的特性 1.2 AT24CXX描述 1.2.1 引脚 1.2.2 容量描述 1.2.3 设备地址 1.3 操作时序 1.3.1 写单个字节时序 1.3.2 写page字节时序 1.3.3 读取当前数据时序 1.3.4 随机读取数据 1.3.5 连续读取多个数据 2 驱动开发 2.1 硬件接口 2.2 代码实现 2.2.1 查看设备信息 2.2.2 编写

    2024年02月22日
    浏览(47)
  • I2C知识大全系列四 —— I2C驱动之Linux下的I2C

    Linux 系统定义了 I2C 驱动体系结构。在 Linux 系统中, I2C 驱动由三部分组成,即 I2C 核心 、 I2C 总线驱动 和 I2C 设备驱动 。这三部分相互协作,形成了非常通用、可适应性很强的 I2C 框架。 I2C核心 I2C 核心提供了 I2C 总线驱动 和 设备驱动 的 注册 、 注销方法 , I2C 通信方法

    2024年02月07日
    浏览(58)
  • Linux I2C 驱动实验

    目录 一、Linux I2C 驱动简介 1、I2C 总线驱动 2、I2C 设备驱动 1、 i2c_client 结构体 2、 i2c_driver 结构体 二、硬件分析 三、设备树编写 1、pinctrl_i2c1 2、在 i2c1 节点追加 ap3216c 子节点 3、验证 四、 代码编写 1、makefile 2、ap3216c.h  3、ap3216c.c ①、头文件 ②、驱动出入口  ③、 i2c驱动

    2024年02月08日
    浏览(54)
  • 【IMX6ULL驱动开发学习】10.Linux I2C驱动实战:AT24C02驱动设计流程

    前情回顾:【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板_阿龙还在写代码的博客-CSDN博客 目录 一、修改设备树(设备树用来指定引脚资源) 二、编写驱动 2.1 i2c_drv_read 2.2 i2c_drv_write 2.3 完整驱动程序 三、上机测试 放在哪个I2C控制器下面 AT24C02的I2C设备地址(查

    2024年02月11日
    浏览(53)
  • linux-2.6.22.6内核i2c驱动框架源码分析

    i2c是常见的通信协议,协议比较简单,只有数据和时钟两条线(SDA和SCL),i2c的通信分为主机和从机,主机一般占主导地位,从机可以有多个。 i2c通信的数据格式为(SDA上的数据):开始的7位里面指定了设备地址(因为有多个从机),第8位是读或写信号,表示此次传输是读还

    2024年02月11日
    浏览(52)
  • 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动

    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第2篇, 主要总结和记录一个I2C从设备的驱动, 在linux内核中如何实现, 如何给用户态的程序暴露合适的接口, 让用户态有机

    2024年02月09日
    浏览(49)
  • Clion开发STM32之I2C驱动(参考RT-Thread)

    本章是根据RT-Thread源码中的I2C组件进行抽离,主要不习惯用RT-Thread 然后在结合at24cxx模块补充测试 也为了方便移植和独立于框架的限制。 操作gpio部分 头文件 源码 头文件 源文件

    2024年02月10日
    浏览(45)
  • 设备树解析 & i2c设备模型

    目录 1、基础概念 1、总线 2、手机启动流程 1、MTK启动流程 2、高通启动流程的差别 3、设备树解析 1、设备树相关 2、设备树解析 4、 i2c 设备初始化流程 1、总线 总线是连接多个设备或者接入点的数据传输通路。 老的电脑主机的都有PCI插槽类似现在的内存条,可以插声卡、网

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包