文章目录
一、设备树节点转化为platform_device的过程
1、dts文件转化过程
dts文件编译成为dtb文件之后供给内核解析,设备树中的每个节点都会转化为device_node节点,其中满足某些条件的节点将会被转化为platform_device节点
2、dts中的节点转化为platform_device节点的条件
只需包含下面的任意一个条件就能转化为platform_device节点
(1)根节点下的含有compatible属性的子节点,compatible属性是用于匹配驱动
如:节点key1和节点led将会被转回为platform_device节点
(2)如果节点中的compatible属性包含了"simple-bus"或者"simple-mdf"或者"isa"或者"arm,amba-bus",并且该节点的子节点包含compatible属性,那么该子节点就能转化为platform_device节点(IIC、SPI节点下的子节点即使满足条件也不应被转化为platform_device节点,应该交由对应的总线驱动程序去处理,而不是platform总线)
二、设备树节点转化为platform_device后匹配驱动的过程
1、转化之后节点信息的保存
设备树节点在转化为platform_device 节点之后
信息保存在 patform_device -> dev -> of_note节点中
of_node是一个device_node结构体,里面存放着节点的name、type和properties(属性链表)
2、匹配驱动
在platform_driver->driver中,有一个of_match_table成员,是一个of_device_id的结构体数组,每一个数组元素都存放着name、type和compatible用于匹配设备树节点生成的platform_device
匹配时:
(1)匹配patform_device -> dev -> of_note->properties(属性)->compatible属性的值 与platform_driver->driver->of_match_table中每一个节点->compatible成员的值 ,成功则关联
(2)匹配patform_device -> dev -> of_note->type 与platform_driver->driver->of_match_table中每一个节点->type成员的值 ,成功则关联
(3)匹配patform_device -> dev -> of_note->name 与 platform_driver->driver->of_match_table中每一个节点->name成员的值 ,成功则关联