devicetree 文档官网
设备树的属性取值
<1 0x5> 32位整数
"string" 字符串
[44 cc] 字节序列
#address-cells = <1> 在它的子节点 reg属性中,使用了多少个32整数来描述地址
#size-cells= <1> 在它的子节点 reg属性中,使用了多少个32整数来描述长度
reg = <0x100 0x200>
#address-cells = <2> 在它的子节点 reg属性中,使用了多少个32整数来描述地址#size-cells= <1> 在它的子节点 reg属性中,使用了多少个32整数来描述长度
reg = <0x100 0x400 0x200>
soc {
#address-cells = <1>;
#size-cells = <1>;
serial@4600 {
compatible = "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0xA 0x8>;
interrupt-parent = <&ipic>;
};
};
节点的#address-cells数和#size-cells属性都设置为 1。此设置指定需要一个单元来表示地址,并且需要一个单元来表示此节点的子节点大小。串行设备 reg 属性必须遵循父 (soc) 节点中的此规范,地址由1个单元格 (0x4600) 表示,大小由1个单元格 (0x100) 表示。
bootargs
/memreserve/ 0x33f00000 0x100000;
/ {
name = "sample"
model = "SMDK24440";
compatible = "samsung,smdk2440";
#address-cells = <1>;
#size-cells = <1>;
memory { /* /memory */
device_type = "memory";
reg = <0x30000000 0x4000000 0 4096>;
};
/*
cpus {
cpu {
compatible = "arm,arm926ej-s";
};
};
*/
chosen {
bootargs = "mem=512M noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";
};
};
bootargs参数说明
1、root
指定根文件系统的位置,比如:root=/dev/mtdblock3 , mtdblock3 代表mtdparts的第4分区 (第一个分区为mtdblock0) 如果指定 root=/dev/nfs,还需要指定nfsroot=serverip:nfs_dir2、console
设置控制台参数,比如:console=ttySAC0,115200 , 使用串口0作为控制台,波特率为115200 。串口设备要根据实际的设备名称来设置。3、mem
指定内存的大小,比如:mem=64M ,指定内存大小为64M4、rootfstype
指定根文件系统的类型,这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区。
5、ramdisk_size
指定创建的ramdisk的大小,ramdisk是将内存中的一块区域作为物理磁盘使用的一种技术。6、init
指定内核启动后第一个执行的脚本,比如:init=/linuxrc7、initrd
指定ramdisk在内存中的位置和大小,比如:initrd=0x32000000,0xa000008、noinitrd
没有使用ramdisk启动系统时需要使用该参数9、ip
指定系统启动后的ip地址,使用nfs时必须设置。
reserved memory
Devicetree 提供了两种方式预留内存: reserved-memory和memreserve
memreserve示例
/memreserve/ 0x40000000 0x01000000
reserved-memory示例
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
ipu_cma@90000000 {
compatible = "shared-dma-pool";
reg = <0x90000000 0x4000000>;
reusable;
status = "okay";
};
phandle 属性
phandle属性为devicetree中唯一的节点指定一个数字标识符,节点中的phandle属性,它的取值必须是唯一的(不要跟其他的phandle值一样),例如:
pic@10000000 {
phandle = <1>;
interrupt-controller;
};
another-device-node {
interrupt-parent = <1>; // 使用phandle值为1来引用上述节点
};
注:DTS中的大多数设备树将不包含显式的phandle属性,当DTS被编译成二进制DTB格式时,DTC工具会自动插入phandle属性。