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

一、platform总线

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

  • 设备(Device) :描述硬件设备的资源信息,如寄存器地址、GPIO 编号等,通常由设备树定义,内核启动时将.compatible自动转换为 platform_device 结构。
  • 总线(Bus):负责设备与驱动的匹配,platform 总线内置匹配规则,自动将合适的驱动与设备绑定。
  • 驱动(Driver) :包含对设备的操作方法,如 proberemove 等回调函数,实现具体硬件控制逻辑,对应 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数组下标
相关推荐
Echo_cy_1 天前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
sukalot3 天前
windows网络适配器驱动开发-为多个 Windows 版本生成 WiFiCx 驱动程序
windows·驱动开发
TE-茶叶蛋3 天前
Spec-Driven Development(规范驱动开发)
驱动开发
云栖梦泽4 天前
Camera驱动开发与应用开发中的零拷贝与DMA
linux·驱动开发·嵌入式硬件
脱胎换骨-军哥5 天前
C++ 嵌入式编程实例:从寄存器操作到底层驱动开发
开发语言·c++·驱动开发
智者知已应修善业5 天前
【使用D触发器74HC175实现0001 0011 0111 1111 1110 1100 1000的循环彩灯电路。】2025-4-28
驱动开发·经验分享·笔记·硬件架构·硬件工程
新元代码5 天前
SDD+TDD 双驱动开发模式实战指南
驱动开发
mk0156 天前
20V输入,12V 3A输出 效率96%DCDC降压芯片
驱动开发·单片机·硬件工程·智能硬件·pcb工艺
mounter6256 天前
跨越鸿沟:从内核驱动开发到超大规模云端生产环境的思考
linux·驱动开发·linux kernel·kernel
Saniffer_SH7 天前
NAND技术(二):从 Channel、Die/LUN、P/E Cycle 到 LDPC,一次讲透 NAND 里那些最容易误解的概念
人工智能·驱动开发·嵌入式硬件·测试工具·fpga开发·计算机外设·压力测试