就是塔塔的个人空间 https://www.eechina.com/space-uid-136863.html [收藏] [复制] [RSS]

博客

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

已有 369 次阅读2023-4-20 10:37

上一章节我们写了 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 共享目录,

如下图所示:




路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部