本章内容用来对设备树相关的内容进行一个全局的总结
平台总线驱动的匹配过程
b. 如何确定platform_device和platform_driver是否匹配?
b.1 platform_device含有name
b.2 platform_driver.id_table”可能”指向一个数组, 每个数组项都有name, 表示该platform_driver所能支持的platform_device
b.3 platform_driver.driver含有name, 表示该platform_driver所能支持的platform_device
b.4 优先比较b.1, b.2两者的name, 若相同则表示互相匹配
b.5 如果platform_driver.id_table为NULL, 则比较b.1, b.3两者的name, 若相同则表示互相匹配
整体流程如下图所示

使用设备树时对应的驱动编程
a. 使用”总线设备驱动模型”编写的驱动程序分为platform_device和platform_driver两部分
platform_device : 指定硬件资源, 来自.c文件
platform_driver : 根据与之匹配的platform_device获得硬件资源, 并分配/设置/注册file_operations
b. 实际上platform_device也可以来自设备树文件.dts
dts文件被编译为dtb文件,
dtb文件会传给内核,
内核会解析dtb文件, 构造出一系列的device_node结构体,
device_node结构体会转换为platform_device结构体
所以: 我们可以在dts文件中指定资源, 不再需要在.c文件中设置platform_device结构体
c. “来自dts的platform_device结构体” 与 “我们写的platform_driver” 的匹配过程:
“来自dts的platform_device结构体”里面有成员”.dev.of_node”, 它里面含有各种属性, 比如 compatible, reg, pin
“我们写的platform_driver”里面有成员”.driver.of_match_table”, 它表示能支持哪些来自于dts的platform_device
如果"of_node中的compatible" 跟 "of_match_table中的compatible" 一致, 就表示匹配成功, 则调用 platform_driver中的probe函数;
在probe函数中, 可以继续从of_node中获得各种属性来确定硬件资源
整体流程如下图所示

