platform总线的匹配规则是什么?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
参考回答
平台总线的匹配规则是根据设备的设备树(Device Tree)或者设备的ID信息,结合驱动的匹配条件来确定的。一般来说,平台驱动会通过设备ID或设备树中的节点来匹配到相应的设备。具体匹配的顺序是:首先驱动会通过 platform_driver
结构体中的 match
函数来匹配设备和驱动。如果匹配成功,设备就会绑定到相应的驱动。
在实际应用中,通常是先注册驱动,再注册设备。驱动注册时,内核会把设备的驱动信息提前保存到驱动匹配表中,这样设备注册时就可以很快找到合适的驱动进行绑定。一般来说没有严格的先后顺序,但为了确保驱动能够在设备注册时及时匹配,建议先注册驱动。
详细讲解与拓展
平台总线的匹配机制
平台总线(Platform Bus)是一种常用于嵌入式设备的总线类型,它的设备不需要依赖于总线协议,如 PCI 或 I2C,而是直接通过平台设备和驱动进行匹配。平台设备(platform_device
)和平台驱动(platform_driver
)通过一个匹配机制来实现绑定。这个匹配通常基于设备ID和驱动支持的设备ID进行。
- 设备匹配:设备通过设备ID(
platform_device_id
)与驱动中的设备ID进行匹配,通常这种ID是通过编译时指定的设备信息(如设备树或者ACPI表)来传递的。 -
驱动匹配:驱动通过驱动结构体中的
platform_driver
的match
函数来进行匹配,该函数会比较驱动支持的设备ID和设备的ID,决定是否将该设备和驱动绑定。如果匹配成功,内核会调用驱动的probe
函数。
驱动注册与设备注册的先后顺序
在平台设备和驱动的绑定过程中,通常是先注册驱动,再注册设备。原因如下:
- 驱动优先注册:当驱动被注册时,内核会把驱动注册到驱动框架中,并保存到设备驱动表里。当设备注册时,内核会根据设备的设备ID去寻找合适的驱动。如果驱动提前注册,设备注册时就能快速找到合适的驱动。
-
设备依赖驱动:设备的注册本质上是在设备驱动框架内声明了一个设备对象。当设备注册时,内核会查看是否有驱动可以匹配该设备。如果驱动已经注册并且可以匹配,设备就会立即绑定到驱动上。如果设备注册在驱动注册之前,设备会被放到设备队列中,等到驱动注册后再进行匹配和绑定。
-
动态加载驱动:在某些情况下,设备和驱动的注册是动态的(例如通过热插拔或插件的方式),此时内核会尝试在设备注册时动态加载相应的驱动,尽管在这些情况下,内核依然会首先完成驱动的注册。
实际应用中的建议
虽然内核可以在一定程度上动态加载驱动,但为了确保设备和驱动的绑定尽可能顺利,建议在实际开发中遵循先注册驱动后注册设备的顺序。这能够确保驱动能够在设备注册时及时进行匹配,避免了匹配失败或设备驱动无法加载的风险。
总结:
– 平台总线的匹配规则:通过设备ID或设备树与驱动的匹配函数来确定设备和驱动的绑定。
– 先注册驱动再注册设备:为了确保设备注册时能够快速匹配到合适的驱动,推荐先注册驱动。