設備樹快速入門【轉】

轉自:http://www.pianshen.com/article/274236825/;jsessionid=D90FC6B215155680E0B89A6D060892D4html

A devicetree is a data structure for describing hardware.

一個用於描述硬件的數據結構。

https://www.devicetree.org/node

基本概念

Dtsi——相似於c語言的頭文件數組

Dts——相似於c語言的源文件session

Dtb——相似於c語言的編譯產物、二進制文件數據結構

使用device tree,用戶須要瞭解本身的硬件配置和系統運行參數,並把這些信息組織成device tree source file。DT是描述系統中的硬件信息,那些能夠被動態探測到的硬件設備不須要描述。經過dtc(device tree compiler),能夠將dts變成適合機器處理的dtb(device tree blob)。spa

Linux內核從3.x開始引入設備樹的概念,用於實現驅動代碼與設備信息相分離。在設備樹出現之前,全部關於設備的具體信息都要寫在驅動裏,一旦外圍設備變化,驅動代碼就要重寫。.net

設備樹主要有三個做用:htm

一、識別平臺單板 二、運行參數配置 三、設備構建blog

語法

一、設備樹語法格式ci

DT的基本單元是node(節點),這些node被組織成樹狀結構。每一個node包含了若干個property/value,描述node的一些特性。一個設備樹只能有一個root node(根節點),其名字必須是‘/’。引用設備樹某個節點,可使用全路徑,也可使用句柄等方式。

一個Node被定義爲以下形式:

[label:] node-name[@unit-address] { 

[properties [= value] ] 

[child nodes] 

}

A.[]——表示可選項

B.label:——標籤,方便dts文件的引用,經過符號‘&’進行引用

C.node-name——節點名字

D.@unit-addresss——若是node沒有reg屬性,不須要該選項;若是有就必須和reg第 一個地址相等(The unit-address must match the first address specified in the

reg property of the node——摘自Devicetree Specification Release v0.2,章節2.2.1 Node Names)。Unit-address具體格式和設備掛在哪一個bus上相關。好比:對於cpu, 其unit-address就是從0開始編址;若是是串口控制器,其就是寄存器地址。

E.property——設備屬性

非標準的屬性名字應該以該公司或者組織名稱開頭,好比:fsl,channel-fifo-len=<?>; zrevmm,vdev = "proxy";

也定義了一些標準的屬性:「compatible」,「model」,"device_type"都是用來表示 節點基本信息的,compatible = "virtio,mmio";

F.= value——屬性的定義是多種多樣的,能夠是空值、整型或者字符串。

G.child nodes——和Node格式同樣

二、常見屬性實例

「compatible」屬性是用來匹配驅動的,他的類型是字符串數組,每一個字符串表示一種設備的類型,從具體到通常。舉個例子就比較清楚了,好比某個串口控制器節點的屬性」compatible = 「fsl,mpc8641-uart」, 「ns16550"「。第一個字符串「fsl,mpc8641-uart」前邊部分是廠商(推測是frescale),後邊部分是控制器具體型號,這個形式也是規範建議的標準寫法。第二個字符串ns16550表示一類符合同一標準的串口控制器,比第一個字符串表示的範圍更大。內核匹配驅動時首先看是否有匹配第一個字符串的驅動,若是沒有的話再匹配第二個(若是有更多的,依次類推,因此優先匹配前邊的)。

"model"屬性用來表示設備的型號,用字符串表示,不像"compatible"用多個字符串,只需一個就夠了。

"device_type"屬性用來表示設備類型,用字符串表示。

@後地址和reg後第一個地址關係說明。它兩數值必須得一致。

 

下面舉一個實例節點分析:

對應的dts源碼

/{

  cpus{

    cpu@0{

    };

    cpu@1{

    };

  };

  memory@0{

  };

  uart@fe001000{

  };

  ethernet@fe002000{

  };

  ethernet@fe003000{

  };

};

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: https://blog.csdn.net/jqh_111/article/details/83212323
相關文章
相關標籤/搜索