Linux驱动--of_match_ptr 宏定义

本文探讨了Linux驱动中of_match_ptr宏的用法。该宏在设备驱动中常见,主要用于在设备树启用时匹配id_table。当配置启用CONFIG_OF时,of_match_ptr用于设备树匹配;否则,它将为空。
摘要由CSDN通过智能技术生成

在查看设备驱动时,经常看到如下结构。
在这里插入图片描述
为什么会有一个of_match_ptr呢?

查看源代码,在include/linux/of.h里面。

#ifdef CONFIG_OF
...
#define of_match_ptr(_ptr)	(_ptr)
...
#else /* CONFIG_OF */
...
of_match_ptr函数是一个用于比较设备树节点的函数,通常用于驱动程序的probe函数中,用于确定设备是否与驱动程序匹配。 of_match_ptr函数的原型如下: ```c const struct of_device_id *of_match_ptr(const struct of_device_id *matches, const struct device_node *node); ``` 其中,matches是一个由of_device_id结构体组成的数组,表示驱动程序支持的设备类型。node是一个指向设备树节点的指针,表示当前正在被检查的设备。 of_match_ptr函数会遍历matches数组中的每个元素,比较其compatible属性与node节点的compatible属性是否匹配。如果匹配成功,of_match_ptr函数将返回与之匹配的of_device_id结构体指针;否则返回NULL。 例如,以下代码片段演示了如何在probe函数中使用of_match_ptr函数来确定设备是否与驱动程序匹配: ```c static const struct of_device_id my_driver_of_match[] = { { .compatible = "my_device" }, { }, }; MODULE_DEVICE_TABLE(of, my_driver_of_match); static int my_driver_probe(struct platform_device *pdev) { const struct of_device_id *match; match = of_match_ptr(my_driver_of_match, pdev->dev.of_node); if (!match) return -ENODEV; // ... } ``` 上述代码定义了一个my_driver_of_match数组,表示驱动程序支持的设备类型。在probe函数中,调用of_match_ptr函数来比较pdev所对应的设备节点是否与my_driver_of_match数组中的任何一个元素匹配。如果匹配成功,probe函数将继续执行;否则返回-ENODEV,表示设备不匹配。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值