建立网站步骤,seo关键词优化软件怎么样,杭州未来科技网站建设,网站建设大全一. 简介
Linux下的SPI 驱动框架和 I2C 很类似#xff0c;都分为主机控制器驱动和设备驱动#xff0c;主机控制器也就是 SOC的 SPI 控制器接口#xff0c;SPI设备驱动也就是所操作的SPI设备的驱动。
本文来学习一下Linux下SPI设备驱动。 二. Linux下SPI驱动#xff1a;SP…一. 简介
Linux下的SPI 驱动框架和 I2C 很类似都分为主机控制器驱动和设备驱动主机控制器也就是 SOC的 SPI 控制器接口SPI设备驱动也就是所操作的SPI设备的驱动。
本文来学习一下Linux下SPI设备驱动。 二. Linux下SPI驱动SPI设备驱动简介
1. spi_driver 结构体 spi 设备驱动也和 i2c 设备驱动也很类似 Linux 内核使用 spi_driver 结构体来表示 spi 设备 驱动我们在编写 SPI 设备驱动的时候需要实现 spi_driver 。 spi_driver 结构体定义在 include/linux/spi/spi.h 文件中结构体内容如下 struct spi_driver {const struct spi_device_id *id_table;int (*probe)(struct spi_device *spi);int (*remove)(struct spi_device *spi);void (*shutdown)(struct spi_device *spi);struct device_driver driver;
};
可以看出spi_driver 和 i2c_driver、platform_driver 基本一样当 SPI 设备和驱动匹配成功以后 probe 函数就会执行。 2. SPI设备驱动注册与注销 同样的 spi_driver 初始化完成以后需要向 Linux 内核注册 spi_driver 注册函数为spi_register_driver函数 函数原型如下 int spi_register_driver(struct spi_driver *sdrv) 函数参数和返回值含义如下 sdrv 要注册的 spi_driver 。 返回值 0 注册成功赋值注册失败。 注销 SPI 设备驱动以后也需要注销掉前面注册的 spi_driver 使用 spi_unregister_driver 函数完成 spi_driver 的注销函数原型如下 void spi_unregister_driver(struct spi_driver *sdrv) 函数参数和返回值含义如下 sdrv 要注销的 spi_driver。 返回值 无。 三. spi_driver 注册示例代码 SPI设备驱动的注册示例代码即spi_driver 注册示例程序如下 /*SPI设备驱动的注册示例代码*/
/* probe 函数 */
static int probe(struct spi_device* dev)
{//具体的函数内容return 0;
}/* remove 函数 */
static int remove(struct spi_device* dev)
{ //具体的函数内容return 0;
} /* 传统匹配方式 ID 列表 */
static struct spi_device_id xxx_id_table[] {{xxx, 0},{}
};/* 设备树匹配列表 */
static struct of_device_id xxx_of_match_table[] {{.compatible xxx},{}
};/* SPI 驱动结构体 */
static struct spi_driver xxx_spi_driver {.driver {.name xxx_spi,.owner THIS_MODULE,.of_match_table xxx_of_match_table,},.id_table xxx_id_table,.probe xxx_probe,.remove xxx_remove,
};/* 驱动入口函数 */
static int __init xxx_init(void)
{spi_register_driver(xxx_spi_driver); //SPI设备驱动的注册
}
/* 驱动出口函数 */
static void __exit xxx_exit(void)
{spi_unregister_driver(xxx_spi_driver); //SPI设备驱动的注销
}module_init(xx_init);
module_exit(); 第 1~38 行 spi_driver 结构体需要 SPI 设备驱动人员编写包括匹配表、 probe 函数等。 和 i2c_driver 、 platform_driver 一样就不详细讲解了。 第 41~44 行在驱动入口函数中调用 spi_register_driver 来注册 spi_driver 。 第 46~49 行在驱动出口函数中调用 spi_unregister_driver 来注销 spi_driver 。