在设备树(Device Tree Source, DTS)中定义的设备最终会出现在 /sys/bus/platform 还是 /sys/bus/amba 目录下,取决于设备节点的 compatible 属性以及驱动程序如何处理这些设备。下面是确定设备属于哪个总线的一些步骤和方法:
- 1. 检查 compatible 属性
Platform Bus:如果设备节点没有明确指定一个具体的总线类型,或者其 compatible 属性指向的是平台设备驱动程序支持的设备,那么该设备通常会被添加到平台总线,并在 /sys/bus/platform/devices/ 下出现。平台总线是一种虚拟的、通用的总线类型,用于表示那些直接挂载在 CPU 或 SoC 上的设备。这些设备通常不通过标准的 PCI、USB 或其他硬件总线连接,而是通过内存映射 I/O 或者特定的控制器接口进行通信。
AMBA Bus:如果设备节点的 compatible 属性指定了 AMBA 总线上的设备,例如 compatible = "arm,pl011" 或者 compatible = "arm,amba-bus",那么该设备将被添加到 AMBA 总线,并在 /sys/bus/amba/devices/ 下出现。
- 2. 设备树解析
当内核启动时,它会解析设备树并根据每个节点的 compatible 属性来查找匹配的驱动程序。
Platform Devices:对于平台设备,内核中的 platform_bus_type 会处理那些没有明确总线类型的设备。如果设备节点没有明确指出它属于哪种总线,它通常会被当作平台设备处理。
AMBA Devices:对于 AMBA 总线上的设备,内核中的 amba_bus_type 会处理这些设备。如果有 compatible = "arm,amba-bus" 的节点,内核会创建 AMBA 总线实例,并将相关的设备挂载到这个总线上。
- 3. 驱动程序注册
Platform Drivers:平台设备驱动程序通过 platform_driver_register() 函数注册。一旦注册,它们就会尝试绑定到所有兼容的平台设备上。
AMBA Drivers:AMBA 设备驱动程序通过 driver_register() 函数注册,并且通常会在 of_match_table 中包含 compatible 字符串,以便与设备树中的设备节点匹配。
- 4. sysfs
Platform Bus:一旦平台设备被正确识别并绑定到平台驱动程序,设备信息将会出现在 /sys/bus/platform/devices/ 目录下。
AMBA Bus:同样地,一旦 AMBA 设备被正确识别并绑定到 AMBA 驱动程序,设备信息将会出现在 /sys/bus/amba/devices/ 目录下。
记录点滴,欢迎点赞关注收藏,共同进步 !