裝置樹基本知識

2021-10-11 22:19:50 字數 2532 閱讀 5449

裝置樹是用於描述硬體的資料結構;在系統啟動時將這些描述硬體的資料傳遞給作業系統解析

the devicetree is used byopenfirmware, openpower abstraction layer (opal), power architecture platform requirements (papr) and in the standalone flattened device tree (fdt) form.(這就是為什麼linux核心中提供用來解析裝置樹節點的api都是以」of"開頭的!

dts device tree source 裝置樹原始檔

dtb device tree binary  裝置樹原始檔編譯出來的二進位制檔案

dtc device tree  compiler 裝置樹編譯器,將裝置樹原始檔編譯為二進位制檔案

dtsi  裝置樹標頭檔案(為了復用,類似於c語言的標頭檔案)

dto:device tree overlay     //裝置樹覆蓋

參看下面**:

核心文件手冊(各種sample):

下面的這個檔案定義了節點、屬性對應的結構體及常用的解析api:

的具體實現;在專案中,這些api常會被封裝後進行使用;)

1.在引用乙個節點前,需要先(#include "apollo-audio-overlay.dtsi")include定義了已經宣告了該節點的dtsi檔案(想想c語言標頭檔案的使用),否則編譯報錯;

2.可以在乙個node中通過「解析屬性的值」來控制**流程(在驅動程式中被用爛了);

3.裝置樹檔案是可以overlay的(在已經定義現有節點的基礎上新增、修改),需要注意「第1點」提到的問題;

4.dtbo檔案是可以反編譯為.dts檔案的,可以通過這種方式檢視自己的修改是否生效;

反編譯方法:

摘自「devicetree-specification-v0.3」(官網文件)

可以用linux下的命令工具檢視dtb的資料結構;

free space可能有也可能無;一般都是有的,為了位元組對齊;

struct fdt_header(必要資訊)

memory reservation block(物理記憶體中保留的區域列表,不可用於常規的記憶體分配):

fdt_begin_node 該token描述了乙個node的開始位置

fdt_end_node   該token描述了乙個node的結束位置

fdt_prop  該token描述了乙個property的開始位置,該token之後是兩個u32的資料,分別是length(屬性值的大小)和name offset(屬性字串的偏移)

fdt_nop   該token描述了乙個property為空

fdt_end    該token表示乙個dtb結束

strings block:

字串塊包含表示樹中使用的所有屬性名稱的字串。

這些空終止的字串(null terminated strings)在本節中簡單地連線在一起,並通過結構塊中的偏移量引用到字串塊中。

字串塊沒有對齊約束,並且可能出現在距devicetree blob開頭的任何偏移處。

核心是如何獲取dtb位址並匹配相應的machine的?記錄板子資訊的結構體:核心解析dtb時會將根節點的compatible屬性與核心中預先定義machine_desc結構體的dt_compat成員做匹配,得到最匹配的乙個machine_desc

ARM Linux 裝置樹基本知識

關於linux 裝置樹 0.dts dtc和dtb dts,位於arch arm boot dts dtc,將.dts編譯為.dtb的工具,原始碼位於scripts dtc dtb device tree big large object dts的被dtc編譯後得二進位制檔案。1.相容屬性 具體 抽...

樹 基本知識

自由樹 自由樹是乙個連通,無迴路的無向圖.顯然樹是圖的一種.如果乙個無向圖雖然無迴路,但是可能非聯通,那麼這個圖成為森林.森林可以調整為一顆二叉樹 左兒子,右兄弟 森林是m m 0 棵互不相交的樹的集合。令g v,e 為乙個無向圖.則以下6點是等價的.1 g是自由樹 2 g中任意兩個頂點由唯一一條簡...

樹的基本知識

表示法 1.樹形 2.文氏圖 3.凹入 4.括號 結點的度與樹的度 m次樹 結點子樹的個數 非終端節點,分支結點,葉節點 路徑與路徑長度 ki,ki1,ki2,kj,結點數目減1 分支數目 孩子結點,雙親結點,兄弟結點 結點的層次和樹的高度 根節點為第一層,樹的高度。森林 n n 0 個互不相交的樹...