DTS
格式
语法
Devicetree node格式:
[label:] node-name[@unit-address] {
[properties definitions]
[child nodes]
};
Property格式
[label:] property-name = value;
[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>;
clock-frequency = <0x00000001 0x00000000>;
compatible = "simple-bus";
local-mac-address = [00 00 12 34 56 78]; // 每个byte使用2个16进制数来表示
local-mac-address = [000012345678]; // 每个byte使用2个
16进制数来表示
compatible = "ns16550", "ns8250";
example = <0xf00f0000 19>, "a strange property format";
DTS文件布局(layout):
/dts-v1/; //DTS的版本
[memory reservations] // 格式为: /memreserve/ <address> <length>;
/ {
[property definitions] //描述硬件信息
[child nodes]
};
特殊的、默认的属性:
#address-cells // 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address)
#size-cells // 在它的子节点的reg属性中, 使用多少个u32整数来描述大小(size)
compatible // 定义一系列的字符串, 用来指定内核中哪个machine_desc可以支持本设备
// 即这个板子兼容哪些平台
// uImage : smdk2410 smdk2440 mini2440 ==> machine_desc
model // 咱这个板子是什么
// 比如有2款板子配置基本一致, 它们的compatible是一样的
// 那么就通过model来分辨这2款板子
device_type = "memory";
reg // 用来指定内存的地址、大小
bootargs // 内核command line参数, 跟u-boot中设置的bootargs作
用一样
/cpus节点下有1个或多个cpu子节点, cpu子节点中用reg属性用来标明自己是哪一个cpu
所以 /cpus 中有以下2个属性:
#address-cells // 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address)
#size-cells // 在它的子节点的reg属性中, 使用多少个u32整数来描述大小(size)
// 必须设置为0
device_type = "cpu";
reg // 表明自己是哪一个cpu
引用其他节点:
pic@10000000 {
phandle = <1>;
interrupt-controller;
};
another-device-node {
interrupt-parent = <1>; // 使用phandle值为1来引用上述节点
};
b. label:
PIC: pic@10000000 {
interrupt-controller;
};
another-device-node {
interrupt-parent = <&PIC>; // 使用label来引用上述节点,
// 使用lable时实际上也是使用phandle来引用,
// 在编译dts文件为dtb文件时, 编译器dtc会在dtb中插入phandle属性
};
DTB文件布局:
------------------------------
base -> | struct boot_param_header |
------------------------------
| (alignment gap) (*) |
------------------------------
| memory reserve map |
------------------------------
| (alignment gap) |
------------------------------
| |
| device-tree structure |
| |
------------------------------
| (alignment gap) |
------------------------------
| |
| device-tree strings |
| |
-----> ------------------------------
|
|
--- (base + totalsize)
发表评论