[Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)
自己总结platform_device与platform_driver的匹配分为如下三种情况基于设备树风格的匹配platform_driver.device_driver.of_device_id-compatible 和 设备树中的compatible属性进行比较匹配 id 表id_table)即 platform_device 设备名是否出现在 platform_driver 的 id_table 中匹配 platform_device 设备名 与驱动的名字即 platform_device-name 与 platform_driver-namei2c_client 与 i2c_driver 的匹配先匹配设备树后匹配id表即先匹配dts中的compatible属性与驱动i2c_driver中的 .of_match_table 指向的 of_device_id 中的compatible属性后匹配 i2c_client 的name来源于dts的compatible与i2c_driver中的id_table指向的i2c_device_id中的name属性。一、platform_device 跟 platform_driver 的匹配当我们把设备树文件转换为 dev 时就能进行 drv 的匹配。比较的有限顺序比较 platform_dev.driver_override 和 paltform_driver.drv-name比较 platform_dev.dev.of_node 的 compatible 属性 和 platform_driver.drv-of_match_table比较 platform_dev.name 和 platform_driver.id_table比较 platform_dev.name 和 platform_driver.drv-name扩展Linux内核还约定设备树节点名应写成形如name[unit_address]的形式其中name就是设备名platform_device-name最长可以是31个字符长度。unit_address一般是设备地址用来唯一标识一个节点。二、在跟文件系统查看设备树有助于调试a、/sys/firmware/fdt 原始 dtb 文件对这个文件使用命令hexdump -C /sys/firmware/fdt可以查看原始的 dtb 文件b、/sys/firmware/devicetree以目录结构呈现的 dtb 文件根节点对应 base 目录每一个节点对应一个目录每一个属性对应一个文件。同样用命令hexdump -C ./led进行查看c、/sys/devices/platform系统中所有的 platform_device有来自设备树的也有 .c 文件中注册的对于来自设备树的 platform_device可以进入 /sys/devices/platform/设备名/of_node 查看它的设备树属性。d、/proc/device-tree/proc/device-tree 是链接文件指向 /sys/firmware/。