探索kernel3.18设备树读取过程以及driver的match过程3
通过前面两篇,根据log验证,基本上能看出来of的读取是通过of_platform_populate()
这个函数来的,不过前一篇有一个mark,就是需要验证是否就是这个函数创建的节点,所以在platform.c
文件的函数of_platform_bus_create
里面打了一些log,根据log的情况显示,在有一段进入__of_match_node
函数线里,是已经将所有节点都读取了的,其余的函数线都是child为null的。我现在把of_platform_bus_create
函数里面的bus->fullname打印出来,看是否有线索。
从log的打印顺序来看bus->fullname
是/soc
, 而 打印'mediatek,mtkfb'
的bus->fullname
是'/soc/mtkfb'
,所以可能是of_platform_populate
函数里面的of_node_get(root)
读取的
总的来说还是比较奇怪的,因为讲道理bus上的of节点(device_node节点)创建一次应该就够了,为什么还要不停的扫描呢?一定是有原因的,要么就是也在匹配,要么就是do_call_init
函数调用的fn有一定的顺序
通过这3篇的探索,大致上定位到of的init位置了。
由于边探索边写记录,会有一点措手不及,现在需要花时间复盘,重新组织文字,目的是读起来更流畅。te函数里面的
of_node_get(root)```读取的