分类: LINUX
2012-05-02 14:18:04
Open Firmware 之Device Tree
1. DeviceTree简介
DeviceTree 源于 PowerPC 架构下的device配置,后merge到Linux的主分支。DeviceTree 使用Device Tree source(dts)的文本方式对系统设备树进行描述。Device Tree Compiler(dtc)将dts文件转换成二进制文件binary device tree blob(dtb)。Dtb文件在kernelboot时,由解析程序解析成memory数据,然后依据不同ARCH的不同需求,可以根据这些内存中的数据创建相应设备的设备节点(通用类型设备,kernel于of中已提供相应的设备节点创建API)。这样就可以在不改动kernel的情况下,对不同的平台实现无差异的支持,只需更换相应的dts文件,即可满足。
2. Device Tree Source的描述
DTS的描述格式如下:
{//root node
An empty property
A child node {
Array-prop = <>;
String-prop= “Hello”;
};
Another child node {
Binary-prop = <>;
String-list = “yes”, “no”;
};
};
Root node 是 device tree的起点。由mode &
compatible 属性描述,格式为
Chosen node: 此节点并不代表真正的设备节点,而是一些虚拟的由bootloader传递给内核一些参数(??)
3. 相关node简介
Cpus node
PowerPC,8641@0 {
device_type = "cpu";
reg =
<0>;
d-cache-line-size = <20>; // 32 bytes
i-cache-line-size = <20>; // 32 bytes
d-cache-size = <8000>; // L1,
32K
i-cache-size = <8000>; // L1,
32K
timebase-frequency = <0>; // 33 MHz, from uboot
bus-frequency = <0>; // From
uboot
clock-frequency = <0>; // From
uboot
32-bit;
linux,boot-cpu;
};
PowerPC为节点的alias,8641@0 为节点名。
System memory
描述系统内存节点,为root节点子节点,通常只用一个memory节点描述系统所有的内存,reg属性用来定义当前可用的各个memory范围。
Memory {
Device_type = “memory”;
Reg = <0x00000000, 0x8000000>; // Range of valid memory
};
设备节点名:memory
Interrupts的表示,还需整理。。。。。