platform总线的匹配规则是什么?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
在 Linux 内核中,Platform 总线是一种非常通用的机制,用于处理不通过标准总线(如 PCI、USB)连接的设备。Platform 总线和设备主要通过名字来匹配,依赖于简单的字符串比对来连接设备和其驱动程序。
Platform 总线的匹配规则
Platform 总线使用设备和驱动的名字来进行匹配。当一个 Platform 设备和驱动被注册到内核时,内核会检查:
- 设备的名字(
name
字段在struct platform_device
中定义) - 驱动的名字(
name
字段在struct platform_driver
中定义)
如果这两个名字相匹配,内核就会将这个驱动与设备关联起来。这种机制使得匹配过程非常简单和直接。
先后顺序问题
在实际应用中,是否需要先注册驱动还是先注册设备通常取决于具体的应用场景和系统启动的流程。不过,从理论和实践上讲:
- 驱动先注册:
- 如果先注册驱动,当相应的设备注册时,内核立即知道有一个已注册的驱动可以处理这个设备。这种方式可以在设备注册后立即初始化设备。
- 这通常适用于模块化设计,驱动作为模块加载时已经准备好处理任何随后注册的设备。
- 设备先注册:
- 如果先注册设备,设备将在设备列表中等待相应的驱动出现。一旦合适的驱动注册,内核则会立刻进行匹配和初始化。
- 这种情况适用于设备信息已在系统启动时由引导加载器或固件提供,而驱动可能稍后加载。
实践建议
虽然从技术上讲注册的先后顺序不会影响系统的最终功能,但推荐的做法是先注册驱动,后注册设备。这样做的优点包括:
- 驱动已准备好处理设备,一旦设备注册,可以立即进行设备的初始化。
- 避免了设备注册后需要等待驱动加载的延迟,特别是在设备需要尽快在线并开始工作的场景中。
总之,Platform 总线的设计允许了高度的灵活性和简单性,使其成为连接各种板载或专用设备的理想选择。在实际开发中,考虑到系统启动和模块加载的顺序,合理规划驱动和设备的注册顺序是非常重要的。