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数组下标
相关推荐
mg66817 小时前
安卓玩机工具----告别面具!SukiSU Ultra 内核级 Root 与终极隐藏实战指南
驱动开发·root系统
女神下凡1 天前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
cynicism??2 天前
Linux 与 ZXISOS 驱动开发架构对比
linux·驱动开发·架构
女神下凡2 天前
芯参谋(83):AliOS Things_驱动开发指南
arm开发·驱动开发·单片机·嵌入式硬件·设计规范·1024程序员节
万物智能信息科技2 天前
指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙
女神下凡2 天前
芯参谋(84):Linux eMMC 驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件
硅基手札3 天前
CAN 技术系列 08 · CAN 控制器寄存器与 IP 架构
驱动开发·架构·嵌入式开发·通信协议·can总线
硅基手札3 天前
CAN 技术系列 09 · CAN 传输模式:轮询 / 中断 / DMA
驱动开发·bsp·嵌入式开发·通信协议·can总线
ccbw163 天前
CH9444X多芯片组合的通道扩展架构与损耗叠加分析
驱动开发·架构·带宽·采集
AI模型调用笔记5 天前
Copilot Fusion:用 Python 跑通模型级联
人工智能·驱动开发·语言模型·copilot