设备树规则-dts

DTS文件布局(layout):

/dts-v1/;                   
[ memory reservations ]                                                       
/ {                              
      [ property definetions ]                                                  
      [ child nodes ]   
};              

/dts-v1/;                                   :dts的版本信息

[ memory reservations ]          :保留的内存区域,假如一块区域不想给内核使用,而是自己使用,如果让内核使用全部的空                                                              间,此选项就省略。格式为:/memreserve/

/ {                                             :/表示根,设备树真正的起点。

      [ property definetions ]       :属性用来描述硬件信息。

                                                       property格式1:[ label: ] property-name = value;

                                                       property格式2:[ label: ] property-name;

                                                       value格式1:< ... > 括号内是一个或者多个32位数据,例如interrupt = < 1 0x03 0x123 >

                                                       value格式2:" ... "引号内是字符串,例如compatible = "arm,arm926ej-s"

                                                       value格式3:[ ... ]括号内是16进制表示的一个或者多个字节,例如local-mac-address = [ 00                                                                                    11  22  34 56 78 ]

                                                       value格式4:也可以3种组合使用,中间用,分开。example = <0xf00f0000  19>, " a strang                                                                                     property format"

                                                                              compatible = "ns16550","ns8250";

      [ child nodes ]                     :节点名字和属性

                                                        devicetree node格式:  [ label: ] node-name[ @unit-address ] {

                                                                                             [ properties definitions ]

                                                                                             [ child nodes ]

                                                                                             };

                                                        其中@unit-address是为了区别节点名字不重复,假如有两个memory节点,一个memory{};

                                                        另一个memory@0x30000000{};

默认属性:

/dts-v1/;
/{
  model = "SMDK2440";
  compatible = "samsung,smdk2440";
  #address-cells = <1>;
  #size-cells = <1>;
};
  • model :这个板子是什么板子,假如有两款板子的配置基本一致,它们的compatible是一样的,那么就通过model来分辨这两款板子。
  • compatible :定义一系列的字符串,用来指定内核中哪个machine_desc可以支持本设备,也就是这个板子兼容哪些平台。
  • address-cells:在它的子节点的reg属性中,使用多少个u32整数来描述地址(address)。
  • size-cells:在它的子节点的reg属性中,使用多少个u32整数来描述大小(size)。

引用其他节点:

  • phandle:节点中的phandle属性,它的取值必须是唯一的(不能跟其他的phandle值一样)
pic@10000000{
    phandle = <1>;  //使用phandle来标明自己
    interrupt-controller;
};

another-device-node{
    interrupt-parent = <1>; //使用phandle的值为1来引用上述节点
};
  • label:使用label来引用上述节点,使用label时实际上也是使用phandle来引用,在编译dts文件为dtb文件时,编译器dtc会在dtb中插入phandle属性。
PIC:pic@10000000{
    interrupt-controller;
};

another-device-node{
    interrupt-parent = < &PIC >;
};

example:

            dts文件中会把公用的部分写为dtsi文件,在dts中#include dtsi。

//假如dtsi中已经定义的引脚需要修改,可以直接在dts文件中重写,就会覆盖
例如覆盖之前dtsi文件中已经定义过的led节点
dts
#include"xxxx.dtsi"
/{
    led{
        pin = ;
    };
};


//如果之前的节点定义了label为LED,则可以简写
&LED{
    pin = ;
};

怎么查看已经编译好的dtb文件:

       ./scripts/dtc/dtc -I dtb -O dts -o tmp.dts arch/arm/boot/dts/jz2440.dtb

 

你可能感兴趣的:(DTS)