后期补充说明:
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_driver的driver字段继承了device_driver的属性,因此驱动程序也可以设置设备的属性、匹配设备的 ID 等。 - 主要字段:
name: 驱动程序的名称,用于与设备进行匹配。具体的匹配机制见 https://blog.youkuaiyun.com/wenhao_ir/article/details/145023181bus: 驱动所在的总线类型,平台驱动对应的是platform_bus。owner: 指向驱动模块的指针,表示该驱动的拥有者。probe、remove等字段:这些字段也继承自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() 将其注册到内核中,内核会自动根据设备的匹配情况调用 probe 和 remove 等函数。
如何查看系统中存在的platform_driver结构体的记录文件
请浏览博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145056170
【搜索“其实系统中存放”】

321

被折叠的 条评论
为什么被折叠?



