Linux驱动开发(4)——总线驱动

一、platform总线

Platform:虚拟总线平台,Linux专门用来管理外设(LED、按键、GPIO、I2C、SPI 等)。platform 总线架构将驱动系统抽象为以下三部分:

  • 设备(Device) :描述硬件设备的资源信息,如寄存器地址、GPIO 编号等,通常由设备树定义,内核启动时将.compatible自动转换为 platform_device 结构。
  • 总线(Bus):负责设备与驱动的匹配,platform 总线内置匹配规则,自动将合适的驱动与设备绑定。
  • 驱动(Driver) :包含对设备的操作方法,如 probe、remove 等回调函数,实现具体硬件控制逻辑,对应 platform_driver 结构。

1、设备(device):设备树节点

cs 复制代码
设备节点{
    .compatible = "标识,设备名称";
};

platform_device{  //内核启动后将设备节点转换为此结构体
    struct device dev; //设备信息,eg:of_node存放设备节点
};

2、驱动(driver):platfrom_deriver结构

cs 复制代码
struct platform_driver drvname{
    .probe = probe,    //驱动与设备匹配成功执行
    .remove = remove,  //驱动与设备分离执行
    .driver = {        //驱动核心信息
        .name =  "设备名",
        .of_match_table =  ,//可多个设备匹配一个驱动
    },
    id_table = ,
};


int probe(struct platform_device *);
int remove(struct platform_device *);
struct device_driver driver;
struct of_device_id of_match_table[] = {
    {.compatible = "标签,设备名"},      //与设备节点中的compatible匹配
    {},         //空结尾,防越界
};
struct platform_driver_id id_table[]={
    {.name = "设备名"},
    {},
};

3、总线(bus):platform_bus_type匹配结构

.match = 设备与驱动匹配规则:

  • platform_device中的override与驱动名一致
  • 设备节点中的.compatible选项与驱动of_match_table一致
  • 设备树中的设备名与驱动中的id_tables一致
  • 设备名和驱动名一致

二、platform常用API函数

1).函数:platform_driver_register(&drv);

  • 功能:向内核注册一个平台驱动,将其绑定到platform虚拟总线上,并触发匹配设备的功能。
  • 参数:@drv --- 驱动platform_driver结构体

2).函数:platform_driver_unregister(&drv);

  • 功能:分离驱动与设备

2).函数:int of_get_named_gpio(struct device_node *np, const char *propname, int index);

  • 功能:获得设备树中的gpio节点
  • 参数:@np --- 设备树节点(pdevice->dev.of_node),@propname --- 属性名,@index --- reg数组下标
相关推荐
盛世宏博智慧档案7 小时前
智慧档案平台驱动开发实战:恒湿消毒净化一体机 Modbus-RTU 协议解析
驱动开发·恒湿机
Herbert_hwt8 小时前
OpenSpec 实战演练:从“猜数字”到“暗黑模式”的规范驱动开发之旅
驱动开发
码农小旋风9 小时前
SDD规范驱动开发:AI时代的软件工程新范式
人工智能·驱动开发·软件工程
幼儿园蛋小黑14 小时前
DHT11 温湿度传感器驱动与 I2C 子系统驱动开发详解
驱动开发
zbyyd14 小时前
Linux 驱动开发实战:从手写 LED 字符设备驱动到设备树
linux·驱动开发
昌原的儿子LEO14 小时前
嵌入式 Linux I2C 驱动开发核心知识总结:设备树与 platform 架构全解析
linux·驱动开发·架构
gwf21615 小时前
常见驱动问题定位与解决:设备识别、性能不达预期、CQ错误码 —— 资深RDMA驱动调试排错指南
驱动开发·linux内核·性能调优·rdma·故障排查·mlx5·irdma
万物智能信息科技16 小时前
气体传感器MQ-2芯片驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·嵌入式硬件·华为·开源·harmonyos
硅基手札18 小时前
【I2C 技术系列 11】I2C Linux 驱动框架
linux·驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
碧海银沙音频科技研究院18 小时前
炬芯ATS3089智能手表烧录方法
人工智能·驱动开发·嵌入式硬件·算法