一、总线分离Platform虚拟总线如何工作对于那些不依附于I2C、SPI等真实物理总线的设备如SoC内部的GPIO、UART、看门狗等Linux发明了platform总线这条“虚拟总线”来统一管理它们。它的工作模型可以概括为三个角色设备 (Platform Device)负责描述硬件资源。它会声明自己叫什么名字以及它占用的内存地址、中断号等。在现代Linux中这些信息通常写在设备树Device Tree文件里内核启动时自动解析并注册到总线上。驱动 (Platform Driver)负责提供硬件操作逻辑。它定义了一个probe函数匹配成功后的初始化入口和一个匹配表说明自己能驱动什么样的设备。总线 (Platform Bus)核心工作是匹配。当系统中注册了一个新设备或新驱动时总线会调用它的.match函数按照一定顺序如设备树匹配、ID表匹配、名字直接匹配来寻找“另一半”。一旦匹配成功总线就会调用驱动的probe函数驱动此时就能从设备那里获得具体的硬件资源正式开始工作。从代码角度看驱动和设备的注册是分开的但它们的匹配是自动的。无论谁先注册到系统总线都会触发一次匹配尝试这得益于platform_device_register()和platform_driver_register()内部机制。注册后.mach匹配匹配成功调用driver中的probe函数。