/ { // 根, 描述CPU总线和主板, 名字一定为'/'
name = <value ...> // 属性, name为名字,<value ...>为属性值
name = "string", ... // 属性, name为名字, "string", ...为属性值
node { // 节点, 描述设备或总线, 名字可以使用全名
name = "string", ... // 属性
由'a'-'z'、'0'-'9'、','、'.'、'+'、'_'、'#'、'?'和'-'字符组成
如果某类设备存在多个设备,可以增加扩展名,以避免名字重复,
扩展名只能用于设备结点名, 一般为设备在总线上的地址
compatible = "SOC名"; // 必选,用于匹配BSP中的支持的SOC列表,以判断内核是否支持该主板
#address-cells = <A>; // 必选, 地址位数,单位(cell)为32bit, A = 地址位数 / 32
#size-cells = <S>; // 必选, 大小位数,单位(cell)为32bit, S = 大小位数 / 32
device_type = "memory"; // device_type值一定为"memory"
reg = <address size ... ...> // 必选, 描述地址范围
(1) 地址和大小成对出现, 描述内存范围, 地址的位数决定于A,大小位数决定于S
(2) 地址或大小的位数超过32位时,需要用多个32bit数表示,采用大端模式
reg = <0x00000000 0x400000000 0x00000000 0x400000000>
表示内存范围为0x400000000 - 0x800000000
bootargs = "内核启动参数"; // 必选
linux,stdout-path= "console" // 可选
标号: 设备类型@地址 { // 设备名字, 基本名通常为设备类型, 扩展名通常为设备在总线上的地址 name = "设备(总线)类型"; // 可选,name属性值必须和基本名一致 device_type = "芯片名"; // 可选,设备采用芯片名 compatible = "兼容芯片1", "兼容产品2"; // 必选, 用于匹配驱动 #address-cells = <A>; // 可选, 同"根和内存"相同名称属性 #size-cells = <S>; // 可选, 同"根和内存"相同名称属性 reg = <地址(端口号) 大小 ... ...>; // 可选, 同"根和内存"相同名称属性 // 中断(详细参考Documentation/devicetree/bindings/interrupt-controller/interrupts.txt内核文档) interrupt-parent = <&父设备标号>; interrupts = <irqno trigger>, <... ...>; interrupts-extended = <&父设备标号 irqno trigger>, <... ... ...>; type device_type 驱动存在type属性
促发条件,目前只用到32bit中的[0:3]bit
1 = low-to-high edge triggered
2 = high-to-low edge triggered
4 = active high level-sensitive
8 = active low level-sensitive
interrupt-controller; // 必选
interrupt-parent = <&父设备标号>; // 必选
#interrupt-cells = <1>; // 必选
interrupts = <irqno>, <...>; // 必选
#interrupt-cells = <2>; // 必选
interrupts = <irqno trigger>, <... ...>; // 必选