code style

2017年7月17日 星期一

Device Tree(4)Device Node Requirements

一個device tree最少要由一個root node,cpus node, memory node組成。

Root Node
Root node表示符號為"/",下表是它的屬性

Aliases Node
這個屬性在root的位置,node name為aliases。必須要為小寫字元開頭,長度為1~31字元,主要是用來減少冗長的路徑名稱。
可用字元如下圖:






例:
aliases {
  serial0 = "/simple-bus@fe000000/serial@llc500";
  ethernet0 = "/simple-bus@fe000000/ethernet@31c000";
}

就可用serial0來代表/simple-bus@fe000000/serial@llc500

Memory Node
表示實際系統上的memory layout,屬性見下圖:














例:
一個 64-bit Power system 的 physical memory layout:
RAM: starting address 0x0, length 0x80000000 (2GB)
RAM: starting address 0x100000000, length 0x100000000 (4GB)

在root node定義address and size,這裡表示reg 屬性需要2個32-bit cells
#address-cells = <2>;
#size-cells = <2>;

可用下面兩種方式表示這兩段記憶體

(1)
memory@0 {
   device_type = "memory";
   reg = <0x000000000 0x00000000 0x00000000 0x80000000
              0x000000001 0x00000000  0x00000001 0x00000000>;
};

(2)
memory@0 {
device_type = "memory";
reg = <0x000000000 0x00000000 0x00000000 0x80000000>;
};

memory@100000000 {
device_type = "memory";
reg = <0x000000001 0x00000000 0x00000001 0x00000000>;
};

Chosen Node
用來描述由系統firmware指定的runtime parameter。會放在root node底下。原本通過tag list傳遞的一些 kernel的運行時參數可以通過Device Tree傳遞。例如command line可以通過bootargs這個property這個屬性傳遞,node屬性如下圖:















例:
chosen {
   bootargs = “root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200”;
};

CPUS Node
表示實際系統上的CPU,因為可能不只一個CPU又或是多核心,cpus node包含cpu node,等下會說到。cpus node屬性如下圖:



CPU Node
表示實際系統上的CPU,屬性如下圖:














































沒有留言:

張貼留言