linuxデバイスツリーdtsおよびdtb仕様

1.dtsファイル形式の概要

1.コードの説明

/dts-v1/;                           /*版本号*、
/memreserve/ 0x33f00000 0x100000;   /*最高1M自己使用*/  
/ {
    
    
    /*属性名+值得方式*/
    /*根节点属性,定义使用compatible 的哪个版本*/     
	model = "SMDK24440";       
	compatible = "samsung,smdk2440";  
	/*通过compatible 这个名字找到内核中不同单板的初始化函数*/
	/*使用以下memory中的reg 1个32位代表地址 */
	/*#不表示屏蔽*/
	#address-cells = <1>;  
	/*使用以下memory中的reg 1个32位代表数据 */
	#size-cells = <1>;   
	/*byestring表示多个十六进制的数,必须两位来表示,空格可以省略*/
    #size-cells = [00 11 22]; 
	memory {
    
      /* /memory */
	    /*也可以用“”来表示字符串*/
		device_type = "memory";      //约定好的,不变 
		/*尖括号里面可以表示多个32位的数据,reg指定根节点的起始地址和大小
        0x30000000 0x4000000代表一段内存
        0 4096 代表一段内存
        */
		reg =  <0x30000000 0x4000000 0 4096>;		
	};	
	chosen {
    
    
	    /*内核启动时候的命令行参数*/
		bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc  console=ttySAC0,115200";
	};
	/*代表不同的cpu
	cpus {
		cpu {
			compatible = "arm,arm926ej-s";
		};
	};
*/	
	led {
    
        /*节点名字*/ 
	     /*通过compatible这个名字来找到驱动程序*/
		compatible = "jz2440_led";
		pin = <S3C2410_GPF(5)>;
	};
};

2.属性とデータの例

a。セルの配列:セルは32ビットのデータ
割り込み= <17 0xc>;

b。64ビットデータは2つのセルで表されます。clock
-frequency= <0x00000001 0x00000000>;

c。nullで終了する文字列(ターミネータ付きの文字列):
compatible =“ simple-bus”;

d。バイト文字列(バイトシーケンス):
local-mac-address = [00 00 12 34 56 78]; //各バイトは2つの16進数を使用して
local-mac-address = [000012345678]; / /各バイトは2つの16進数で表されます

e。これは、コンマで区切ったさまざまな値の組み合わせにすることができます。
互換性=“ ns16550”、“ ns8250”;
例= <0xf00f0000 19>、“奇妙なプロパティ形式”;

3.xxx.dtsにはxxx.dtsiファイルが含まれます

dtsiファイルは、変更されないままのファイルです。
次のように、xxx.dtsiファイルをxxx.dtsに含めます。
#include“ xxx.dtsi”

4.xxx.dtsファイルの例

(1)xxx.dtsのノード属性は、xxx.dtsiのノード属性をオーバーライドできます。

/*xxx.dtsi*/
/dts-v1/;

/ {
    
    
	model = "SMDK24440";
	compatible = "samsung,smdk2440";
	/*#不表示屏蔽*/
	#address-cells = <1>;  
	/*使用以下memory中的reg 1个32位代表数据 */
	#size-cells = <1>;   
	/*byestring表示多个十六进制的数,必须两位来表示,空格可以省略*/
    #size-cells = [00 11 22]; 
    memory {
    
      /* /memory */
		device_type = "memory";
		reg =  <0x30000000 0x4000000 0 4096>;		
	};
	chosen {
    
    
		bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";
	};
	led {
    
    
		compatible = "jz2440_led";
		pin = <S3C2410_GPF(5)>;
	};
};
/*xxx.dts*/
/dts-v1/;
#include "xxx.dtsi"
/*
将xxx.dtsi中的led覆盖了
括号前面的/为jz2440.dtsi里面的根节点
*/
/ {
    
      
    led {
    
    
		pin = <S3C2410_GPF(6)>;
	};
};

(2)xxx.dtsのノード属性は、xxx.dtsiのノード属性を参照できます。

/*xxx.dtsi*/
/dts-v1/;

/ {
    
    
	model = "SMDK24440";
	compatible = "samsung,smdk2440";
	/*#不表示屏蔽*/
	#address-cells = <1>;  
	/*使用以下memory中的reg 1个32位代表数据 */
	#size-cells = <1>;   
	/*byestring表示多个十六进制的数,必须两位来表示,空格可以省略*/
    #size-cells = [00 11 22]; 
	memory {
    
      /* /memory */
		device_type = "memory";
		reg =  <0x30000000 0x4000000 0 4096>;		
	};
	chosen {
    
    
		bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";
	};
	LED: led {
    
    
		compatible = "jz2440_led";
		pin = <S3C2410_GPF(5)>;
	};
};
/*xxx.dts*/
/dts-v1/;
#include "xxx.dtsi"
/*
可以通过&来引用xxx.dtsi里面的LED
*/
&LED {
    
    
   pin = <S3C2410_GPF(7)>;
};

2、dtbファイル形式の紹介

1.dtbファイルの概要

dtbファイルは、dtsファイルからコンパイルされたバイナリファイルです。
dtbファイルは、逆アセンブルされたアセンブリファイルを介してdtsファイルが正しいかどうかを確認できます。

2.dtbファイルの分布図

ここに写真の説明を挿入

2.dtbファイルノードの分布図

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/qq_18077275/article/details/108848060