裝置樹dts dtsi檔案

2021-09-29 16:46:06 字數 3035 閱讀 8913

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 表示留給自己使用的記憶體。即核心不能使用這部...