Platform总线设备驱动中非常重要的结构体`platform_driver`的详细介绍【以及如何查看系统中存在的`platform_driver`结构体的记录文件】

后期补充说明:

2025-03-20 19:55:13 :关于 Platform总线不错的视频总结回顾讲解,请百度网盘搜索“1-3_03_SPI总线设备驱动”,然后从头开始看。

引言

阅读本篇博文前可先阅读下
Platform总线设备驱动是如何把设备资源描述结构体(platform_device)与驱动结构体(platform_driver)匹配起来的

platform_driver 是 Linux 平台总线设备驱动模型中的一个结构体,用于定义和管理与平台设备(platform device)相关的驱动程序。平台总线设备是 Linux 中一个特殊的设备类型,它们通常表示那些没有在传统总线(如 PCI 或 USB)上找到的设备,而是直接与系统的硬件相关(如 SoC 上的某些外设)。这个结构体提供了平台设备驱动程序的基本功能接口和配置选项。

platform_driver 结构体的详细介绍

下面是 platform_driver 结构体的详细介绍:

1. int (*probe)(struct platform_device *);

  • 功能: probe 是平台设备驱动的核心函数,当一个platform_device结构体被匹配到时,probe 函数会被调用。probe 函数用于初始化设备相关资源、配置设备、注册设备相关的文件操作等。
  • 参数: platform_device 是描述硬件资源的结构体。这是Platform总线设备驱动的设备部分非常重要的结构体。

2. int (*remove)(struct platform_device *);

  • 功能: remove 函数在设备被卸载或驱动程序不再需要时调用。它负责释放在 probe 中分配的资源、注销设备、关闭文件操作等。这个函数通常在设备被移除时调用,例如模块卸载时。
  • 参数: platform_device 是描述硬件资源的结构体。这是Platform总线设备驱动的设备部分非常重要的结构体。

3. void (*shutdown)(struct platform_device *);

  • 功能: shutdown 函数在系统关机或重启时调用。它通常用于设备的清理工作,释放资源,关闭硬件等操作。与 remove 不同,shutdown 主要在系统关机时被调用。
  • 参数: platform_device 是指向需要关闭的设备的指针。

4. int (*suspend)(struct platform_device *, pm_message_t state);

  • 功能: suspend 函数用于在系统进入睡眠模式或设备被暂停时调用。它负责设备的电源管理工作,包括保存设备状态、暂停设备操作等。这个函数通常在系统进入 suspend 状态时被调用。
  • 参数:
    • platform_device: 需要暂停的设备指针。
    • pm_message_t state: 当前电源管理的状态,通常用于控制设备的电源管理行为。

5. int (*resume)(struct platform_device *);

  • 功能: resume 函数在设备从休眠状态恢复或系统从 suspend 状态恢复时调用。它负责恢复设备的操作,恢复设备状态等。
  • 参数: platform_device 是指向需要恢复的设备的指针。

6. struct device_driver driver;

  • 功能: 这是一个 device_driver 结构体,包含了驱动的基本信息,如驱动名称、驱动的属性等。platform_driverdriver 字段继承了 device_driver 的属性,因此驱动程序也可以设置设备的属性、匹配设备的 ID 等。
  • 主要字段:
    • name: 驱动程序的名称,用于与设备进行匹配。具体的匹配机制见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145023181
    • bus: 驱动所在的总线类型,平台驱动对应的是 platform_bus
    • owner: 指向驱动模块的指针,表示该驱动的拥有者。
    • proberemove 等字段:这些字段也继承自 device_driver,因此可以通过 device_driver 对象访问它们。

7. const struct platform_device_id *id_table;

  • 功能: id_table 是一个指向 platform_device_id 结构体的指针,platform_device_id 是一个设备 ID 列表,用于设备与驱动的匹配。这个字段用于告诉内核哪些平台设备与该驱动匹配。每个 platform_device_id 结构体表示一个支持的设备的 ID。具体的匹配机制见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145023181
  • 示例:
    static const struct platform_device_id my_driver_ids[] = {
        { .name = "device_name", .driver_data = 0 },
        { }
    };
    
    这通常用于设备驱动的匹配,系统会根据设备的名称等字段与 id_table 中的条目进行匹配。

8. bool prevent_deferred_probe;

  • 功能: 这个布尔值用于控制是否允许设备驱动的延迟探测(deferred probe)。如果设置为 true,则内核会禁止对该驱动进行延迟探测。通常,当某些设备的初始化需要等待其他设备或资源准备好时,可以使用延迟探测,而这个字段可以防止这种延迟。
  • :
    • true: 禁用延迟探测。
    • false: 允许延迟探测。

9. 小结

platform_driver 是平台设备驱动的核心结构体之一,它封装了与设备驱动生命周期相关的函数指针,包括设备的初始化、移除、睡眠和恢复操作等。通过这个结构体,内核能够有效地管理和操作平台设备,使得平台总线设备的驱动程序能够与硬件平台进行交互。

在实际应用中,编写一个平台驱动通常需要定义一个 platform_driver 结构体,指定上述函数,并通过 platform_driver_register() 将其注册到内核中,内核会自动根据设备的匹配情况调用 proberemove 等函数。

如何查看系统中存在的platform_driver结构体的记录文件

请浏览博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145056170
【搜索“其实系统中存放”】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值