1.节点格式
label:node-name@unit-address
label:标号
node-name:节点名字
unit-address:单元地址
2.属性
3.关键字意义
1)compatible:一个设备内核中哪些驱动支持它。比如一个led:
led{
compatible="A","B","C";
};
就代表这个led在内核中A,B,C三个驱动都支持它,那么内核启动时,就会按A->B->C的顺序为led找到它的驱动程序
2)model:和compatible类似,表明这个硬件是什么,例如:
/{
compatible="samsung,smdk2440","samsung,mini2440";
model="jz2440_v3";
};
它表示这个板子,兼容内核中的smdk2440驱动,也兼容mini2440的板子驱动。
而model这里则定义了它是什么板,是jz2440_v3
3)status ,就是状态,设备的状态
okay就是可操作的;
disabled就是不可操作的
fail就是尝试了但因有错误导致失败,不可操作了
fail-sss就是失败了,sss是失败原因
4)reg就是属性值,用数字来表示地址和大小
address-cells:address需要多少个32位数来表示
size-cells:size需要多少个32位数来表示
/{
# address-cells = <1>; 地址
# size-cells = <1>; 大小
memory {
reg = <0x80000000 0x20000000>;
//一段内存的起始地址0x80000000 ,大小0x20000000
};
};
5)name和device_type
分别表示节点的名字和类型,在跟platform_driver匹配时,优先级很低,优先级最高的是compatible
3.节点
根节点 / {
}
CPU节点 cpu {
}
memory节点 memory {
}
chosen节点 (通过设备树文件给内核传入一些参数)
chosen {
bootargs=" ";
};
4.操作设备树的函数
一般以of开头:
1)of_find_node_by_name函数通过节点名字查找制定节点
2)of_find_node_by_type 通过device_type查找指定节点
3)of_find_compatible_node根据device_type和compatible查找
4)of_find_matching_node_and_match通过of_device_id
5)of_find_node_by_path通过路径
6)of_find_property查找指定的属性