裝置資源以前都是用.c檔案,但是隨著時間的推移。冗餘**越來越多,所以用裝置樹來替代資源檔案的指定。
裝置樹在linux裡的檢視:
ls /sys/firmware/
devicetree fdt
#devicetree 目錄下是以目錄結構呈現的dtb檔案,根節點對應base目錄,每個節點對應乙個目錄,每個檔案對應乙個屬性
官方文件:
/dts-v1/
;#include
#include
"imx6ull.dtsi"
/;
dts檔案布局:
/dts-v1/
;//表示版本
[memory reservations]
//格式為: /meemreserve/ ;
/
裝置樹中的基本單元,被稱為"node",node節點的格式為:
[label:
] node-name[@unit-address]
;//label是標識,可以方便引用node
//node-name是節點的名字
//unit-address描述的是位於哪個位址
//其中用修飾的是可選項
properties格式
節點都會有properties屬性,它的格式一般是"name = value",但是value有多種取值方式
string:
bytestring:
也可以是各種值的組合,用逗號隔開
/;}
;
compatible的值,建議取這樣的格式:「manufacturer,model」,即「廠家名,模組名」。
led
;//核心就會按順序找驅動
model與compatible屬性有些類似,modle用來準確地定義這個硬體是什麼。
/
;
在dtsi中有很多裝置,但是在當前地板子上某些裝置是沒有地。這時候可以給裝置節點新增status屬性,設定為disabled。
status可以填寫的值:
&uart1
;
在裝置樹中描述一段空間。在arm總,暫存器和記憶體是統一編址的,在訪問上沒有區別。
/dts-v1/;/
;};
用來表示節點名字,在platform_driver匹配時使用,優先順序最低。
字串,用來表示節點型別。在platfrom_driver匹配時使用,優先順序為中。
dst中必須有乙個根節點。
/dts-v1/;/
;
一般不需要我們設定,在 dtsi 檔案中都定義好了
cpus
};
晶元廠家不可能事先確定你的板子使用多大的記憶體,所以 memory 節點需要板廠設定。
memory
;
可以通過裝置樹檔案給核心傳入一些引數,這要在 chosen 節點中設定 bootargs 屬性。
chosen
;
在核心中可以單獨編譯裝置樹
make dtbs v=1
手工編譯,除非熟練掌握
./scripts/dtc/dtc -i dts -o dtb -o tmp.dtb arch/arm/boot/dts/***.dts // 編譯 dts 為 dtb
./scripts/dtc/dtc -i dtb -o dts -o tmp.dts arch/arm/boot/dts/***.dtb // 反編譯 dtb 為 dts
#/sys/firmware/fdt 檔案,它就是 dtb 格式的裝置樹檔案
./scripts/dtc/dtc -i dtb -o dts /從板子上/複製出來的/fdt -o tmp.dts
rk3288中原始碼編譯在arch/arm/boot/dts/rk3288-firefly.dtb
,更換裝置樹目錄是/boot/rk3288-firefly.dtb
。 rk3288 裝置樹點燈
gpio常用系統呼叫函式 位於include linux gpio.h 1,申請gpio static inline int gpio request unsigned gpio,consr char label 2,設定gpio電平 static inline void gpio set valu...
markdown語法學習
markdown是純文字格式的語法,支援轉換為html,可以幫助整理知識 學習筆記 markdown的段落是由若干行文字組成,前後由空行隔開 普通段落不該用空格或製表符縮排 markdown支援兩種標題樣式 setext和atx setext風格的標題用符號 first level 和 second...
schema語法學習
xml schema 學習總結 簡單型別 1 簡單元素 指只能包含文字內容,不能夠包含子元素,也沒有屬性的元素。格式 例子 2 屬性 所有的元素屬性均被宣告為簡單型別。只有複雜型別的元素才可以擁 有屬性。格式 例子 所有的屬性預設都是可選的,我們可以通過使用use 關鍵字明確的指出是可選 或是必需 ...