设备树加载及与驱动的匹配过程
一开时,uboot将dtb文件的地址传给内核,由内核去读取设备树的信息。
1.start_kernel() --> setup_arch(0 --> unflatten_device_tree() --> __unflatten_device_tree()函数中扫描dtb,并转换成节点是device_node的树状结构。(展开设备树)
2.of_platform_device_create_pdata() —> of_device_add() 注册设备并添加到对应的链表中。(注册设备树)
3.driver_register()->driver_match_device() 注册驱动调用match ,配对成功运行probe,配对所用的名字就是compatible属性的值。
传入probe参数的值是strcut device *dev,通过struct device_node *node=pdev->dev.of_node,由此可以获取到设备的节点信息
设备树源码
最近看了一下设备树知识,读个源码,加深一下理解
/dts-v1/;
#include <dt-bindings/pwm/pwm.h> //GPIO的宏定义
#include <dt-bindings/sound/samsung-i2s.h>
#include "exynos4412-itop-scp-core.dtsi"
//对于一些相同的dts配置可以抽象到dtsi文件中,include到dts文件中,对于同一个节点的设置情况,在在dts中对dtsi中的配置进行覆盖
/ {
model = "TOPEET iTop 4412 Elite board base