Devicetree SpecificationRelease 之(3)DEVICE NODE REQUIREMENTS

本文详细介绍了设备树的规范,包括根节点、别名节点、内存节点、选定节点和CPU节点的属性。根节点包含至少一个`/cpus`和`/memory`节点,别名节点提供设备路径的简化引用。内存节点描述系统物理内存布局,而CPU节点则包含关于处理器的信息,如缓存和频率。此外,还提到了多级缓存节点的表示。
摘要由CSDN通过智能技术生成

3.1 Base Device Node Types
 

下面的部分指定了符合dtspec的设备树中所需的基本设备节点集的要求。

所有设备树都应该有一个根节点,以下节点应该出现在所有设备树的根节点上:

• One /cpus node
• At least one /memory node
 

3.2 Root node


设备树有一个根节点,所有其他设备节点都是它的后代。根节点的全路径为“/”。

3.3 /aliases node
 

设备树可能有一个别名节点(/aliases),该节点定义一个或多个别名属性。别名节点应位于设备树的根,并具有节点名/别名。

/aliases节点的每个属性定义了一个别名。属性名指定别名。属性值指定设备树中节点的完整路径。例如,属性serial0 = "/simple-bus@fe000000/ serial@llc500"定义了别名serial0。

别名值是一个设备路径,并被编码为字符串。该值表示节点的完整路径,但该路径不需要引用叶节点。

客户端程序可以使用别名属性名将完整的设备路径作为其字符串值的全部或部分来引用。一个客户端程序,当考虑一个字符串作为一个设备路径时,应该检测并使用别名。

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

3.4 /memory node
 

所有设备树都需要一个内存设备节点,它描述了系统的物理内存布局。如果系统有多个内存范围,可以创建多个内存节点,或者可以在单个内存节点的reg属性中指定这些范围。

例子:

给定一个64位的Power系统,其物理内存布局如下:
•RAM:起始地址0x0,长度0x80000000 (2 GB)
•RAM:起始地址0x100000000,长度0x100000000 (4 GB)

可以这样定义内存节点,假设#address-cells = <2>和#size-cells = <2>。

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

或者

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

3.5 /chosen Node


所选节点并不代表系统中的实际设备,而是描述系统固件在运行时选择或指定的参数。它应该是根节点的一个子节点。

chosen {
bootargs = "root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200";
};

3.6 /cpus Node Properties


所有设备树都需要有一个/cpu节点。它并不代表系统中的一个真实设备,而是作为表示系统cpu的子cpu节点的容器。

3.7 /cpus/cpu* Node Properties

cpu节点代表一个硬件执行块,该执行块足够独立,能够运行一个操作系统,而不干扰可能运行其他操作系统的其他cpu。

共享一个MMU的硬件线程通常在一个cpu节点下表示。如果设计了其他更复杂的CPU拓扑,那么CPU的绑定必须描述该拓扑(例如,不共享MMU的线程)

cpu和线程通过一个统一的数字空间进行编号,这个数字空间应该尽可能接近中断控制器的cpu /线程编号。

在cpu节点之间具有相同值的属性可以放在/cpu节点中。客户端程序必须首先检查一个特定的cpu节点,但是如果没有找到预期的属性,那么它应该查看父节点/cpu节点。
这将减少所有cpu之间相同的属性的详细表示。

每个CPU节点的节点名都应该是CPU。

3.7.1 General Properties of /cpus/cpu* nodes

cpu节点的基本属性如下表所示。表3.6中描述的一些属性是具有特定适用细节的选择标准属性

表格太长,不列出来,详见源文档。

3.7.2 TLB Properties

cpu节点的以下属性描述了处理器MMU中的翻译后备缓冲区。

3.7.3 Internal (L1) Cache Properties

3.7.4 Example

cpus {
    #address-cells = <1>;
    #size-cells = <0>;
    cpu@0 {
    device_type = "cpu";
    reg = <0>;
    d-cache-block-size = <32>; // L1 - 32 bytes
    i-cache-block-size = <32>; // L1 - 32 bytes
    d-cache-size = <0x8000>; // L1, 32K
    i-cache-size = <0x8000>; // L1, 32K
    timebase-frequency = <82500000>; // 82.5 MHz
    clock-frequency = <825000000>; // 825 MHz
    };
};

3.8 Multi-level and Shared Cache Nodes (/cpus/cpu*/l?-cache)

未完待续
 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值