platform_driver 结构体使用说明
时间: 2024-09-11 17:07:57 浏览: 46
adc_driver.rar_adc_driver
platform_driver 结构体是 Linux 内核中用于设备驱动程序的一种抽象,它允许驱动程序开发者更容易地与 Linux 的 platform device 框架集成。platform_driver 结构体中包含了驱动程序的注册和注销函数,以及与平台设备匹配所需的信息。
一个典型的 platform_driver 结构体定义如下:
```c
#include <linux/platform_device.h>
static int my_driver_probe(struct platform_device *pdev)
{
// 设备探测逻辑
return 0;
}
static int my_driver_remove(struct platform_device *pdev)
{
// 设备移除逻辑
return 0;
}
static const struct of_device_id my_driver_dt_ids[] = {
{ .compatible = "vendor,my-driver", },
{ /* sentinel */ }
};
static struct platform_driver my_driver = {
.probe = my_driver_probe,
.remove = my_driver_remove,
.driver = {
.name = "my_driver",
.owner = THIS_MODULE,
.of_match_table = my_driver_dt_ids,
},
};
module_platform_driver(my_driver);
```
使用说明:
1. 注册驱动:首先定义一个 platform_driver 结构体,其中包含 probe 和 remove 函数指针,这些函数将由内核在设备匹配成功时调用。同时定义一个 driver 成员,它是一个 device_driver 结构体,其中包含 driver_name、owner 和 of_match_table 等成员,用于指定驱动名称、拥有者和设备树兼容性表。
2. 设备匹配:内核使用 of_match_table 中的兼容性字符串来匹配设备树中的 platform_device 设备节点。如果匹配成功,probe 函数将被调用。
3. 探测和移除函数:probe 函数负责初始化驱动和设备,remove 函数负责清理在 probe 期间分配的资源。这些函数会在设备添加或移除时被内核调用。
4. 注销驱动:通过调用 platform_driver_register 函数来注册驱动,或者使用 module_platform_driver 宏来简化注册过程。注销驱动可以通过调用 platform_driver_unregister 宏或者模块卸载来完成。
阅读全文