dt(device tree):是一種描述硬體的資料結構,由一系列被命名的結點(node)和屬性(property)組成
dts:裝置樹源
1:裝置樹的由來
在linux核心原始碼的arm體系結構引入裝置樹之前,相關的bsp**充斥了大量的平台裝置(platformdevice)**,而這些**大多都是重複的、雜亂的。之前的核心移植工作有很大一部分就是在複製乙份bsp**,並修改bsp**中和目標板中與特定硬體相關的平台裝置資訊。這使得arm體系結構的**維護者和核心維護者在發布乙個新版本核心的一段時間內有大量的工作要做。於是裝置樹被arm社群採用。
裝置樹最初是由開放韌體(openfirmware)使用的,用來向乙個客戶程式(通常是乙個作業系統)傳送資料的通訊方法中的一部分內容。在執行時,客戶程式通過裝置樹發現裝置的拓撲結構,這樣就不需要把硬體資訊硬編碼到程式中。
2:裝置樹的目的
裝置樹是乙個描述硬體的資料結構,它並沒有什麼神奇的地方,也不能把所有硬體配置的問題都解決掉。它只是提供了一種語言,將硬體配置從linux核心原始碼中提取出來。裝置樹使得目標板和裝置變成資料驅動的,它們必須基於傳遞給核心的資料進行初始化,而不是像以前一樣採用硬編碼的方式。理論上,這種方式可以帶來較少的**重複率,使單個核心映象能夠支援很多硬體平台。
linux使用裝置樹有以下三個原因
(1)平台識別
這點是最為重要的,核心使用裝置樹中的資料去識別特定機器(目標板,在核心中稱為machine)。最完美的情況是,核心應該與特定硬體平台無關,因為所有硬體平台的細節都是由裝置樹來描述的。然而,硬體平台並不是完美的,所以核心必須在早期初始化階段識別機器,這樣核心才有機會執行與特定機器相關的初始化序列。
(2)實時配置
在大多數情況下,裝置樹是韌體與核心之間進行資料通訊的唯一方式,所以也用於傳遞實時或配置資料給核心,比如核心引數、initrd映象的位址等。
大多數這種資料被包含在裝置樹的/chosen 節點,形如:
chosen ;
bootargs屬性包含核心引數,initrd-*屬性定義了initrd檔案的首位址和大小。chosen節點也有可能包含任意數量的描述平台特殊配置的屬性。
(3)裝置植入
經過板子識別和早期配置資料解析之後,核心進一步進行初始化。期間,unflatten_device_tree函式被呼叫,將裝置樹的資料轉換成一種更有效的實時形式。
3.裝置樹的使用
(1)基本資料格式
在linux中,裝置樹檔案的型別 有.dts、 .dtsi 和 .dtb。其中, .dtsi是被包含的裝置樹原始檔,類似於c語言中的標頭檔案;.dts是裝置樹原始檔,可以包含其他 .dtsi 檔案, 由dtc編譯生成 .dtb檔案
裝置樹是乙個包含節點和屬性的簡單樹狀結構。屬性就是鍵值對,而節點可以同時包含屬性和節點。下面就是乙個.dts格式的簡單裝置樹:
/;
child-node2 ;
};node2 ;
};};
該裝置樹包含了下面的內容
①:乙個單獨的根節點:/
②:兩個子節點:node1 和 node2
③:兩個node1的子節點:child-node1 和 child-node2
④:一堆分散在裝置樹中的屬性
其中,屬性是簡單的鍵值對,它的值可以為空或包含乙個任意位元組流。在裝置樹原始檔有以下幾個基本的資料表示形式。
文字字串(無結束符):可以用雙引號表示,如a-string-property = "a string"。
cells:32位無符號整數,用角括號限定,如second-child-property = <1>。
二進位制資料:用方括號限定,如a-byte-data-property = [0x01 0x23 0x34 0x56]。
混合表示:使用逗號連在一起,如mixed-property = "a string",[0x01 0x23 0x45 0x67],<0x12345678>。
字串列表:使用逗號連在一起,如string-list = "red fish","bule fish"。
Graphviz 一些簡單的例子(未完待續)
digraph g digraph g 這條語句一次連了兩條線 init make string edge color red so is this 把邊的預設顏色設為了red main printf style bold,label 100 times label就是在邊上寫了一行字 make s...
關於響應式布局的一些筆記 未完待續
今天在練習寫專案,一些總結記下。css3 查詢表示式 media all and min width 800px and orientation landscape media 是宣告這是 查詢 all是 型別,當然也可以用 screen 或者 print 來表示,螢幕或列印的 型別。and 是邏輯...
對於MySql分割槽的理解 未完待續)
注意點 摘自 高新能mysql 1.mysql實現分割槽表的方式是對底層表的封裝,意味著索引也是按照分割槽表定義的,而沒有全域性索引 2.null值會使分割槽過濾無效 第乙個分割槽是特殊分割槽所有值為null或者非法值的時候,記錄都會被存放到第乙個分割槽,實際上mysql會檢查倆個區,第乙個分割槽和...