platform总线是一个虚拟的总线,该模块的出现实现了资源与驱动的隔离。一般没有驱动程序
仅实现platform-driver,该模型一般用于各具体的设备驱动模块(如i2c、spi、pcie、gpio、watchdog等),这样即可通过platform-device将各具体设备驱动相关的资源信息(如中断号、寄存器地址等)从驱动中抽离出来,使得驱动模块更通用。
如我们实现一个I/O引脚模拟jtag引脚的字符驱动程序,在不使用platform模块时,那我们在
该字符驱动文件中定义使用的具体I/O值,这就使得该字符设备驱动不通用了(若下一个硬件版本修改了I/O引脚值,是否需要修改该字符设备驱动呢?)。若借助platform模块实现该字符设备驱动,则可以达到字符设备驱动的通用性,我们将引脚信息通过platform-device传递,而在platform-driver的probe接口中,我们进行字符设备驱动的创建,并传递I/O引脚的信息。通过platform-driver、cdev-add这两个模块,就使我们的I/O模拟jtag引脚的字符设备驱动更加通用,不需要依赖硬件开发板的改变而更新驱动。
platform模块与linux设备树的结合,真的是linux内核的一大特点,将之前linux板级文件更改
需要重新编译内核的步骤彻底摆除了。在linux系统内核中,只需要在内核启动时解析设备树文件,并调用platform的接口,为设备树中的节点创建platform设备,然后在具体的platform设备驱动加载时,解析注册的platform-device设备的资源信息,获取这些资源信息,并进行具体模块驱动的注册(misc_register、i2c_add_numbered_adapter、input_register_device、pci_register_driver等)