static int platform_match(struct device *dev, struct device_driver *drv)
{
struct platform_device *pdev = to_platform_device(dev);
struct platform_driver *pdrv = to_platform_driver(drv);
/* When driver_override is set, only bind to the matching driver */
if (pdev->driver_override)
return !strcmp(pdev->driver_override, drv->name);
/* Attempt an OF style match first */
if (of_driver_match_device(dev, drv))//第一种匹配方式,OF类型匹配,设备树采用的匹配方式
return 1;
/* Then try ACPI style match */
if (acpi_driver_match_device(dev, drv))//第二种匹配方式,ACPI匹配
return 1;
/* Then try to match against the id table */
if (pdrv->id_table)
return platform_match_id(pdrv->id_table, pdev) != NULL;//第三种匹配方式,id_table匹配
/* fall-back to driver name match */
return (strcmp(pdev->name, drv->name) == 0);//第四种匹配方式,直接比较驱动和设备的name字段
}
可以看到,platform_match可以使用四种匹配方式
- OF类型匹配,设备树采用的匹配方式
- ACPI匹配
- id_table匹配
- 直接比较驱动和设备的name字段
- 参考https://blog.csdn.net/a568713197/article/details/103069325
本文深入解析了Linux中platform_match函数的四种驱动匹配方式:OF类型匹配(设备树)、ACPI匹配、id_table匹配及直接比较驱动和设备的name字段。通过对核心代码的解读,帮助读者理解平台设备与驱动之间的绑定过程。
1716

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



