迅为i.MX6ULL开发板I2C总线实现driver驱动

news2024/11/18 3:48:15

上一章节我们写了 client.c,并且我们已经成功地把它加载到内核里面。i2c 用非设备树实现,我们需要

 

用 i2c_board_info 这个结构体来描述我们的 i2c 设备,如果我们用设备树的方法来实现,我们直接在设备树

的节点下面添加创建对应设备的节点就可以了。后面的实验我们都用设备树的,非设备树的方法了解一下

就可以了,本章节我们来设计 i2c 驱动的 driver 部分。

我们在 Ubuntu 的/home/topeet/driver/imx6ull/40i2c 目录下新建一个 driver.c 文件,拷贝前面实验的

Makefile,driver.c 文件的代码如下所示:

/*

* @Author: topeet

* @Description: i2c 总线实现 driver 驱动

*/

#include <linux/init.h>

#include <linux/module.h>

#include <linux/i2c.h>

//与设备树的 compatible 匹配

static const struct of_device_id ft5x06_id[] = {

{.compatible = "edt,edt-ft5306", 0},

{.compatible = "edt,edt-ft5x06", 0},

{.compatible = "edt,edt-ft5406", 0},

{}};

// 无设备树的时候匹配 ID 表

static const struct i2c_device_id ft5x06_id_ts[] = {

{"xxxxx", 0},

{}};

/* i2c 驱动的 remove 函数 */

int ft5x06_remove(struct i2c_client *i2c_client)

{

return 0;

}

/* i2c 驱动的 probe 函数 */

int ft5x06_probe(struct i2c_client *i2c_client, const struct i2c_device_id *id)

{

printk("This is ft5x06_probe\n");

return 0;

}

//定义一个 i2c_driver 的结构体

static struct i2c_driver ft5x06_driver = {

.driver = {

.owner = THIS_MODULE,

.name = "ft5x06_test",

// 采用设备树的时候驱动使用的匹配表

.of_match_table = ft5x06_id,

},

.probe = ft5x06_probe,

.remove = ft5x06_remove,

.id_table = ft5x06_id_ts};

/* 驱动入口函数 */

static int ft5x06_driver_init(void)

{

int ret;

// 注册 i2c_driver

ret = i2c_add_driver(&ft5x06_driver);

if (ret < 0)

{

printk(" i2c_add_driver is error \n");

return ret;

}

printk("This is ft5x06_driver_init\n");

return 0;

}

/* 驱动出口函数 */

static void ft5x06_driver_exit(void)

{

// 将前面注册的 i2c_driver 也从 Linux 内核中注销掉

i2c_del_driver(&ft5x06_driver);

printk("This is ft5x06_driver_exit\n");

}

module_init(ft5x06_driver_init);

module_exit(ft5x06_driver_exit);

MODULE_LICENSE("GPL");

我们参考第三十九章 Linux 内核模块将刚刚编写的驱动代码编译为驱动模块,编译完如下图所示:

在加载驱动之前,我们要恢复设备树文件中我们之前章节注释掉的节点,重新编译设备树内核,然后再烧写镜像。

开发板启动后,我们进入到/sys/bus/i2c/devices/目录下查看是否有生成 I2C 节点,如下图所示:

我们进入共享目录并且加载驱动模块,共享目录的搭建请参考第三十七章 37.2.3 搭建 nfs 共享目录,

如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于File.io的学习记录(读取文本)

可以通过字节流&#xff08;FileInputStream&#xff09;、字符流&#xff08;InputStreamReader&#xff09;、字符缓冲流&#xff08;BufferedReader&#xff09;读取文本中的数据。 1、FileInputStream读取文本 public void read(){String path "fileTest.txt";F…

JDK新增史上最无用提案!竟是为了简化Hello World?

前两天JDK 20更新了&#xff0c;很多人表示很失望&#xff0c;但是我万万没想到的是&#xff0c;还有更令人失望的。 OpenJDK最近又增加了一个新提案&#xff0c;JEP 445&#xff0c;这个提案的主要内容是要简化Hello World的写法。并且该新特性即将在Java 21中作为预览功能推出…

凌恩生物文献分享|多组学联合,病毒与宿主关联分析又升级了!

病毒是地球上数量最多的生物实体&#xff0c;在调控宿主群落组成、推动宿主进化及影响土壤元素的生物地球化学循环等方面起着非常重要的作用。病毒基因组结构简单&#xff0c;一般只含有单一核酸&#xff0c;探究病毒基因组在病毒的毒力系统、病毒的基因组进化与演变历程方面具…

FlinkX的安装与使用(异构数据同步工具——flinkx)

异构数据同步工具——flinkx - 知乎 一、概要简介 FlinkX是由袋鼠云开源基于Flink的分布式离线和实时相结合的数据同步框架&#xff0c;既可以采集静态的数据比如&#xff1a;MYSQL,HDFS等&#xff0c;也可以采集实时变化的数据比如&#xff1a;MYSQL BINLOG,KAFKA等。目前官方…

【1187. 使数组严格递增】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你两个整数数组 arr1 和 arr2&#xff0c;返回使 arr1 严格递增所需要的最小「操作」数&#xff08;可能为 0&#xff09;。 每一步「操作」中&#xff0c;你可以分别从 arr1 和 arr2 中各选出一个…

如何在苹果Mac OS系统中安装MT4电脑版软件?

很多投资者可能已经发现了&#xff0c;当前市面上绝大部分的正规交易平台&#xff0c;都在使用MT4电脑版软件作为平台专用的交易工具。而市面上的电脑系统主要又分为微软Windows系统和苹果Mac OS系统&#xff0c;对于微软Windows系统的MT4电脑版软件安装&#xff0c;想必大家都…

若依Linux环境部署

若依Linux环境部署 1.若依项目2.后端3.Linux环境配置4.环境部署附录 1.若依项目 若依官网若依文档前后端分离代码 2.后端 整体项目结构 自己创建好数据库&#xff0c;并在如下地方修改代码 日志路径也需要修改 数据库建表语句 同时redis也要启动并配置好 后端启动 3.…

高级篇三、用户与权限管理

第03章_用户与权限管理.pdf 1、用户管理 1.1 登录MySQL服务器 mysql -h xxx -P xxx -u xxx -p DatabaseName –e "SQL语句"下面详细介绍命令中的参数&#xff1a; -h参数 后面接主机名或者主机IP&#xff0c;hostname为主机&#xff0c;hostIP为主机IP。-P参数 后…

如何在Google Play设置置顶大图

应用的置顶大图是Google Play商店上ASO优化的重要一环&#xff0c;是我们保持品牌形象的重要场所。如果我们没有设置预览视频&#xff0c;那么Google Play 将会使用置顶大图&#xff0c;如果添加了预览的视频&#xff0c;那么视频会放置在置顶大图的顶部。 添加游戏或应用程序…

关于Redis的BigKey

文章目录 准备keys * 等命令的危害与避免不用keys * &#xff0c;应该用什么BigKey阿里云Redis开发规范多大算Big危害怎么产生的&#xff1f;怎么发现BigKey怎么删除String类型使用hscan每次获取少量field-value&#xff0c;再使用hdel删除每个field使用ltrim渐进式逐步删除&am…

管理后台项目-02-平台属性组件模块

目录 1-分类三级列表 2-属性列表 2.1-需求功能分析 2.2-功能代码实现数据获取和变动 2.3-动态渲染数据 3-新增修改属性 3.1-点击新增属性逻辑处理 3.2-点击列表页面修改属性逻辑 3.3-新增和修改属性 3.4-点击删除属性值 3.5-点击删除属性 1-分类三级列表 需求&…

通过案例来了解响应式开发的音频控件

目录 前言 一、视频控件的使用方法 1.语法 2、部分功能介绍 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5表单等功能方法的代码&#xff0c;这也是很多教材的一个典型案例&#xff1b; 2.本文将讲解涉…

IMX6ULL裸机篇之中断实验-通用中断驱动说明二

一. 通用中断驱动 本文是 IMX6ULL 裸机篇---中断实验。旨在用 C 语言编写一套简单的中断驱动框架代码。 在 start.S 文件中&#xff0c;我们在中断服务函数 IRQ_Handler 中调用了 C 函数 system_irqhandler 来处 理具体的中断。 本实验会认识中断控制器&#xff1a;…

RT-DETR论文学习笔记(DETRs Beat YOLOs on Real-time Object Detection)

论文地址&#xff1a;https://arxiv.org/abs/2304.08069 代码地址&#xff1a;GitHub - PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time mult…

完美解决丨ValueError: time data ‘2018/12/24‘ does not match format ‘%Y/%m/%d‘

这里我选择的是&#xff1a; python from datetime import datetime date datetime.strptime(2018/12/24, %Y/%m/%d) 如果你可以执行这段代码&#xff0c;那么你可能会收到这样的报错&#xff1a; python Traceback (most recent call last): File "C:\Users\Administra…

机器学习中最基本的概念之一:数据集、样本、特征和标签

本文重点 数据集、样本、特征和标签是机器学习中的重要概念,这些概念在机器学习算法的设计和实现过程中起着至关重要的作用。在本文中,我们将对这些概念进行详细的讲解,以便更好地理解机器学习算法的基本原理和应用。 一、数据集 数据集是机器学习中最基本的概念之一,它…

VUE3 取Slot元素方法

VUE3 取Slot元素方法 话说前面,这方法诡异的很…尽量不要用. 我这里要实现一个对slot元素进行方法拓展的事情 就比如说我要给一个元素添加自定义拖放事件,正常来说大概是这样的 //vue3 <template><div class"custom" ref"el"><slot> …

Visual Instruction Tuning: 用LLaVA近似多模态GPT-4

©Paperweekly 原创 作者 | Chunyuan Li 使用 GPT-4 进行视觉指令学习&#xff01;Visual Instruction Tuning with GPT-4! ▲ Generated by GLIGEN (https://gligen.github.io/): A cute lava llama and glasses 我们分享了 LLaVA (Language-and-Vision Assistant)&#…

linux工具gcc/g++/gdb/git的使用

目录 gcc/g 基本概念 指令集 函数库 &#xff08;重要&#xff09; gdb使用 基本概念 指令集 项目自动化构建工具make/makefile 进度条小程序 ​编辑 git三板斧 创建仓库 git add git commit git push git status git log gcc/g 基本概念 gcc/g称为编译器…

集合详解之(五)Map集合

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;Map集合的介绍&#x1fa85;如何保证键的不重复性&#xff1f;&#xff08;equals()与hashCode()方法的联用&#xff09;&#x1f380;HashMap集合及常用方法&#x1f38…