请选择 进入手机版 | 继续访问电脑版

悍铭论坛

 找回密码
 立即注册
查看: 334|回复: 0

驱动开发基本流程详解

[复制链接]

2

主题

4

帖子

20

积分

LV1

Rank: 1

积分
20
发表于 2022-11-8 17:00:17 | 显示全部楼层 |阅读模式
一、修改设备树
1、在pinctrl子系统对应节点添加子节点,即在 iomuxc 、iomuxc_snvs 节点添加新的子节点,即添加设备对应的 IO 。示例:
pinctrl_i2c1: i2c1grp {
  fsl,pins = <
   MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
   MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
  >;
};
节点标签:节点名{
        引脚属性字符串 = <
            使用的引脚_引脚复用功能 电气特性(IO 的上/下拉、驱动能力和速度等)
        >;
}
注意:节点标签,节点名可自定义,但节点标签前缀一定要为 pinctrl_

2、在 I2C 、SPI 等节点下添加子节点,杂项驱动(MISC)在根节点下添加节点,配置设备相关属性信息:示例:
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1>;
status = "okay";
AP3216C@1e {
  compatible = "iot,ap3216c";
  reg = <0x1e>;
};

};
&节点标签 {
属性 = 值;
pinctrl-names = "default";    //设备的状态(state),default(默认状态)和sleep(休眠状态)。
pinctrl-0 = <&节点标签>;        //"default"状态,对应的引脚在pinctrl-0定义
pinctrl-1 = <&节点标签>;     //"sleep"状态,对应的引脚在pinctrl-1定义
status = "okay";               //状态值
        /*追加子节点-i2c1上的设备*/
子节点名@地址 {
        兼容性属性 = 匹配字符串;
  reg = <0x1e>;    //地址
};
};

3、编译设备树
make dtbs

二、编写设备驱动、应用程序
1、编写设备驱动程序
/* 驱动的probe函数 */
static int xxx_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
/* 具体实现 */
}
/* 驱动的reMOVe函数 */
static int xxx_remove(struct i2c_client *client)
{
/* 具体实现 */
}
/* 传统匹配方式ID列表 */
static const struct i2c_device_id xxx_id[] = {
{"xxx,xxx", 0},  //匹配在设备树对应xxx节点下定义的compatible
{}
};
/* 设备树匹配列表 */
static const struct of_device_id ap3216c_of_match[] = {
{ .compatible = "iot,xxx" },    //匹配在设备树对应xxx节点下定义的compatible
{ /* Sentinel */ }
};
......
(1)根据结构体需要编写对应的 probe函数、remove函数、设备树匹配表、ID匹配表等。
-platform 有对应的 platform_driver 结构体。
-I2C 有对应的 i2c_driver 结构体。
-SPI 有对应的 spi_driver 结构体。
(2)指定驱动入口函数和出口函数。
-platform 使用 platform_driver_register(注册)函数、platform_driver_unregister(注销)函数。
-I2C 使用 i2c_add_driver(注册)函数、i2c_del_driver (注销)函数。
-SPI 使用 spi_register_driver(注册)函数、spi_unregister_driver(注销)函数。
2、编写应用程序
3、编写Makefile

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|悍铭论坛 ( 滇ICP备19004051号-1 )

GMT+8, 2023-6-5 21:31 , Processed in 0.052063 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表