platform_device结构体中为什么没有设备号?
时间: 2023-04-11 17:02:01 浏览: 123
platform_device结构体中没有设备号是因为它是一种抽象的设备,它不需要一个唯一的设备号来标识自己。相反,它是通过platform_driver来识别和管理的。在platform_driver中,可以使用platform_device_id结构体来匹配特定的platform_device。
相关问题
platform_device结构体中的id怎么使用
在 platform_device 结构体中,id 字段是用来标识设备的唯一 ID。在 Linux 内核中,每个 platform_device 都必须有一个唯一的 ID,以便能够在系统中正确地识别和区分不同的设备。
在设备驱动程序中,可以通过 platform_device 结构体中的 id 字段来识别和匹配特定的设备。通常情况下,设备驱动程序会以某种方式注册自己,例如使用 platform_driver_register() 函数注册一个 platform_driver。当系统探测到一个匹配的 platform_device 时,内核会调用设备驱动程序中的 probe() 函数,从而让设备驱动程序可以初始化和使用该设备。
因此,设备驱动程序中的 probe() 函数通常会使用 platform_device 结构体中的 id 字段来判断是否匹配了特定的设备。例如,可以将 id 字段与设备树中的某个属性进行匹配,从而确定该设备是否适合使用当前的设备驱动程序。
platform_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 宏或者模块卸载来完成。
阅读全文