当前位置: 首页> 娱乐> 明星 > Linux驱动开发基础(匹配详解)

Linux驱动开发基础(匹配详解)

时间:2025/7/11 18:42:40来源:https://blog.csdn.net/weixin_62822414/article/details/141281079 浏览次数:0次

所学来自百问网

目录

1. 简介

2. 函数路径

3. driver_override

4. 设备树匹配

5. id_table

6. name

7. 比较顺序


1. 简介

platform_device 与 platform_driver是挂载在platform_bus_type总线下的两条链表,通过分离的思想负责不同的功能实现,两者需要通过匹配规则构成的一个完整的程序,本篇文章对platform_match函数的匹配规则进行分析,除了ACPI style match

2. 函数路径

函数在platfrom.c文件下的platform_bus_type结构体下的platform_match,通过ctrl + 鼠标点击即可看到源码

以下是函数源码:

通过前两行代码可知,该函数获取了platform_device和platform_driver的结构体的信息

3. driver_override

图解:当platform_device中有定义driver_override属性,则函数通过调用的platform_device结构体的driver_override去匹配platform_driver的name,若匹配成功直接返回1,否则返回0

示例:

4. 设备树匹配

 

图解:通过of_driver_match_device函数中的of_match_device函数,该函数根据drv->of_match_table和dev去匹配,of_match_table是of_device_id的指针变量,而of_device_id是device_driver结构体的属性,of_device_id结构体包含name、type、compatible等属性

而设备树的节点的属性从以下获取

图解:在of_match_device函数中,通过dev->of_node去获取设备树节点的属性信息,of_node是device_node的指针变量,device_node包含着设备树节点的name、type,properties,在property中含有compatible属性

比较规则:

1.首先,如果of_match_table中含有compatible值,就跟dev的compatile 属性比较,若一致则成功,否则返回失败;

2.其次,如果of_match_table中含有type值,就跟dev的device_type属性比较,若一致则成功,否则返回失败;

3.最后,如果of_match_table中含有name值,就跟dev的name属性比较,若一致则成功,否则返回失败。

而设备树中建议不再使用devcie_type和name属性,所以基本上只使用设备节点的compatible属性来寻找匹配的platform_driver。

示例:

设备树节点:

5. id_table

图解:在platform_match_id函数中,通过pdrv->id_table和pdev进行比较,在pdrv->id_table中,platform_device_id是platform_driver的属性,id_table是platform_device_id的指针变量,platform_device_id中含有name属性,进入platform_match_id函数可知两者通过name属性比较

示例:

6. name

图解:通过两者设置的name属性进行匹配

示例:

7. 比较顺序

系统会根据以下顺序进行匹配

比较顺序:driver_override - > 设备树 -> ACPI -> id_table -> name

关键字:Linux驱动开发基础(匹配详解)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: