1.dts檔案布局(layout):
/dts-v1/;
[memory reservations] //格式為:memreserve /;保留的記憶體區域,定義一部分記憶體留給自己用
[property definitions]
[child nodes]
property格式1:
[label:] property-name = value;
property格式2(沒有值):
[label:] property-name;
property取值只有3種:
arrays of cells(1個或多個32位資料, 64位資料使用2個32位資料表示),
string(字串),
bytestring(1個或多個位元組)
示例:a.arrays of cells:cell就是乙個32位的資料
interrupts = <17 0xc>;
b.64bit資料使用2個cell來表示
clock-frequency = <0x00000001 0x00000000>;
c.a null-terminated string(有結束符的字串):
compatible = "******-bus"
d.a bytestring(位元組序列):
local-mac-address = [00 00 12 34 56 78];//每個byte使用2個16進製制來表示
local-mac-address =[000012345678];//每個byte之間可以不用空格表示
e. 可以是各種值的組合, 用逗號隔開:
compatible = "ns16550", "ns8250";
example = <0xf00f0000 19>, "a strange property format";
(2)
dts檔案布局(layout):
/dts-v1/;
[memory reservations] // 格式為: /memreserve/ ;
/ ;(3) 特殊的、預設的屬性:
a. 根節點:
#address-cells // 在它的子節點的reg屬性中, 使用多少個u32整數來描述位址(address)
#size-cells // 在它的子節點的reg屬性中, 使用多少個u32整數來描述大小(size)
如#address-cells = <1>;表示在子節點裡面這個reg屬性裡用1個32位的資料來代表位址
#size-cells = <1>;表示在子節點裡面這個reg屬性裡用1個32位的資料來表示大小
compatible // 定義一系列的字串, 用來指定核心中哪個machine_desc可以支援本裝置
// 即這個板子相容哪些平台
// uimage : smdk2410 smdk2440 mini2440 ==> machine_desc
eg: compatible = "samsung,smdk2440","samsung,s3c24xx" //定義一系列的字串,核心先匹配前面的的字串,匹配不到就匹配後面的字串
model // 咱這個板子是什麼
// 比如有2款板子配置基本一致, 它們的compatible是一樣的
// 那麼就通過model來分辨這2款板子
b. /memory
device_type = "memory";
reg // 用來指定記憶體的位址、大小
c. /chosen
bootargs // 核心command line引數, 跟u-boot中設定的bootargs作用一樣
核心啟動時命令列引數
d. /cpus
/cpus節點下有1個或多個cpu子節點, cpu子節點中用reg屬性用來標明自己是哪乙個cpu
所以 /cpus 中有以下2個屬性:
#address-cells // 在它的子節點的reg屬性中, 使用多少個u32整數來描述位址(address)
#size-cells // 在它的子節點的reg屬性中, 使用多少個u32整數來描述大小(size)
// 必須設定為0
e. /cpus/cpu*
device_type = "cpu";
reg // 表明自己是哪乙個cpu
(4) 引用其他節點:
a. phandle : // 節點中的phandle屬性, 它的取值必須是唯一的(不要跟其他的phandle值一樣)
pic@10000000 ;
another-device-node ;
b.指明 label:
pic: pic@10000000 ;
another-device-node ;
示例:dtsi檔案
/dts-v1/;
/memreserve/ 0x33f00000 0x100000;
/ ;/*
cpus ;
};*/
chosen ;
led:led ;
};dts檔案:包含dtsi檔案
示例1:覆蓋dtsi的屬性
/dts-v1/;
led{
pin = ;
示例2:直接加標號引用
&led{
pin = ;
編譯:make dtbs
反彙編:./scripts/dtc/dtc - i dtb - o dts -o tmp.dts arch/arm/boot/dts/***.dtb
./scripts/dtc/dtc -i dtb -o dts -o output.dts ./arch/arm/boot/dts/stm32mp157c-dk2.dtb
核心檢視:/documentation/devicetree/usage-model.txt
對應驅動的裝置文件裝置樹寫法:/documentation/devetree/bindings
linux裝置樹檔案 dtb
linux 自核心3.x之後引入裝置樹的概念.而不像2.6時代在arch arm mach s2440.c新增修改裝置資訊。推薦一下宋寶華的 linux裝置驅動開發詳解 基於最新的linux 4.0核心 奉勸各位正學習嵌入式linux的在校學生也要與時俱進 我使用的裝置是beagleboard x1...
linux裝置樹(裝置驅動)
一 裝置樹的簡單概念 裝置樹 由一系列的節點,屬性組成,節點本身包含子節點 屬性 成對出現的名稱和值 裝置樹可描述的資訊 原先大多數被編碼在核心中 它是電路板上cpu,匯流排,裝置組成的樹,bootloader會將這棵樹傳遞給核心,並根據它展開linux核心中的platform device等裝置。...
裝置樹學習(二)(裝置樹的規範)
dts v1 memory reservations 格式為 memreserve 從上面檔案布局我們能看到大概分為以下幾部分,我們依次介紹 1 dts v1 表示dts檔案的版本 2 memory reservations 格式為 memreserve 表示留給自己使用的記憶體。即核心不能使用這部...