设备树
本文最后更新于:2022年8月17日 下午
设备树语法
设备树示例:
节点格式
label: node-name@unit-address
lable: 标号(可省略,其作用方便引用node,类似汇编中的label)
node-name: 节点名字
unit-address: 单元地址
属性格式
name=value
value有多种取值方式。
一个32位的数据,用尖括号包围起来,如
1
interrupts = <17>
一个64位数据(使用2个32位数据表示),用尖括号围起来,如:
1
clock-frequency = <0x00000001 0x00000000>
一个有结束字符的字符串”disabled”,如
1
status = "disabled"
字节序列,用中括号包起来
1
local-man-address = [1a 2b 3c 4d 5e 6f] //每个byte使用2个16进制数来表示
也可以是各种值的组合,用
,
隔开1
compatible = "samsung,smart210", "samsung,s5pv210";
一些标准属性
compatiable 属性
其本意为“兼容”,对于某个LED,内核中有三个驱动A、B、C支持它。
1 |
|
内核启动时,就会为这个LED按照A-B-C顺序为它寻找驱动程序。
model 属性
model属性与compatiable
有些相似,但又不同。
compilable是一个字符串序列,表示兼容什么,model指明这个硬件具体是什么。比如:
单板兼容samsung的smart210和s5pv210,这个板子是基于s5pv210的smart210
1 |
|
status 属性
status 属性是和设备状态有关的,属性值也是字符串,字符串是设备的状态信息
#address-cells 和 #size-cells属性
1 |
|
比如一段内存,怎么描述它的起始地址和大小?
以下示例中,address-cells
为1,表示用1个32位数表示地址,即用0x80000000
表示起始地址
size-cells
为1,表示用1个32位数表示大小,即用0x20000000
表示大小
1 |
|
reg 属性
reg本意是register,用来表示寄存器地址。但在设备树中,用来描述一段空间。对于ARM系统,寄存器和内存是统一编址的,访问寄存器时用某块地址,访问内存时用某块地址,在访问方法上没有区别。
reg属性的值,是一系列的”address size”,用多少个32位的数来表示address和size,是由#address-cells 和 #size-cells决定的。
name 属性
过时了,建议不用。值是字符串,用来表示节点的名字。在跟platform_driver匹配时,优先级最低。compiable属性在匹配过程中,优先级最高。
常用的节点
根节点
用/标识根节点,如:
1 |
|
CPU 节点
一般不需要我们设置,在dtsi中都设置好了。
memmory 节点
厂商不知道板子要用多大的内存,所以此处需要自行设定
1 |
|
关于设备树更详细的语法,参考 devicetree-specification-v0.4-rc1.pdf
和 Power_ePAPR_APPROVED_v1.1.pdf