設備樹1-設備樹文件.DTS文件格式


  將描述板級硬件信息的內容從Linux分離出來,用一個專屬的文件來描述,這個專屬文件叫做設備樹,文件擴展名.dts。而一個SOC可以做出很多不同的板子,這些板子都有共同的信息,將這些共同的信息提取出來作為一個通用的文件,其他.dts文件直接引用這個通用文件即可,這個通用文件就是.dtsi文件。

1、存放路徑

使用設備樹之前ARM架構的板級信息存放在:

  /arch/arm/mach-xxx

  /arch/arm/plat-xxx

使用設備樹之后ARM架構的板級信息存放在:

  /arch/arm/boot/dts

dts工具源碼存放在:

  scripts/dtc/Makefile

2、DTS語法

2.1. 文件引用

  像c語言那樣可以使用#include引用.dtsi、.dts、.h文件。

#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"
#include "imx6ull-14x14-evk.dts"

2.2. 文件布局

/dts-v1/;          #dts文件的版本號
[memory reservations]    #可以不寫,表示內核使用全部的內存;使用,表示留下一部分內存給自己使用
/{             #根節點
  [property]
  [child nodes]
  [child nodes]
  ......
};

2.3. nodes節點格式

[label:] node-name [@unit-address]{
  [property]
  [child nodes]
  [child nodes]
  ......
};

[]:表示該項可以省略

[label]:標簽,為了方便訪問節點,后面可以直接通過&label來訪問該節點。

node-name:節點名稱。

[@unit-address]:通常表示設備的地址或寄存器首地址,為了多增加一個信息區分同一個node-name(同一級別下)。

cpu0: cpu@0 {
  compatible = "arm,cortex-a7";
  device_type = "cpu";
  reg = <0>;
  ......
};

cpu1: cpu@1 {
  compatible = "arm,cortex-a8";
  device_type = "cpu";
  ......
};

2.4. property屬性格式

[label:] prooerty-name = value;  //有值

[label:]property-name;      //沒有值

2.4.1 value:屬性的鍵值

a.字符串

  compatible = "arm,cortex-a7";

b.32位無符號整數

  reg = <1 0x123456 100>

c.16盡職字節序列

  reg = [00 11 22 33]  //每個數據必須是2位

d.字符串列表

  compatible = "fsl,imx6ull-gpmi-nand", "fsl,imx6ul-gpmi-nand";

2.4.2 標准屬性

1. compatible

  兼容性屬性,用於將設備和驅動綁定起來。格式如下:

compatible = "manufacturer, model"  //manufacturer:廠商,  model:模塊對應的驅動名字

例如某開發板音頻設備節點的compatible屬性:

compatible = "fsl, imx6ul-evk-wm8960", "fsl, imx-audio-wm8960"

  這個設備首先使用第一個compatible值在內核查找與之匹配的驅動文件,如果找不到就使用第二個人compatible值。

2. model

  描述設備模塊信息,比如名字、詳細版本號。用於區分compatible相同時。

model = "wm8960-audio-V1.0"
3. status

  描述設備狀態信息

 

4. reg
#address-cells = <1>  //表示reg里面的數據address占用一個字長
#size-cells = <1>    //表示reg里面的數據size占用一個字長
   gpio-spi: gpio_spi@0{   
  compatible = ".spi"    
  reg = <address1 length1 address2 length2 ......> //address一般用來表示寄存器起始地址,length一般表示寄存器長度
}

2.4.3 根節點compatible屬性

  每個節點都有compatible屬性,根節點“/”也不例外。

設備節點的compatible屬性:是為了匹配Linux內核中的驅動程序。

根節點的compatible屬性:是為了確認Linux內核是否支持次設備,一般,第一個值描述所使用的硬件設備名字,比如:imx6ull-14x14-evk
;第二個值描述設備所使用的SOC,比如imx6ull。

/ {
     model = "Freescale i.MX6 ULL 14x14 EVK Board";
     compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull"; 
......
}

2.5 向節點追加或修改內容

  由於.dtsi文件是設備樹的頭文件,其他所有使用相同SOC的板子都會使用,因此我們可以在.dts文件#include相關.dtsi文件,然后在.dts文件追加或者修改內容。

例如:

imx6ull.dtsi文件:
LED:gpio_ led{
  compatible = "imx6ull_led"
  pin = <imx6ull_GPA(0)>
}
在imx6ull_evk.dts文件往gpio_led追加內容:
#include "imx6ull.dtsi"

&LED{  //使用&訪問之前定義的的節點
  pin = <imx6ull_GPA(1)>  //修改內容
  reg = <......>  //追加內容
}

/{  //根節點
......
}

3 使用設備樹以后設備匹配方法

arch/arm/mach-imx/mach-imx6ul.c 文件

 

   代碼中設置.dt_compat = imx6ul_dt_compat,imx6ul_dt_compat表里面有"fsl,imx6ul"和“fsl,imx6ull”兩個兼容值。只要某個設備(板子)根節點“/”的compatible屬性值與imx6ul_dt_compat表中的任何一個值相等,那么就表示Linux內核支持此設備。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM