PowerPC OpenFirmware

参考:Documentation/devicetree/booting-without-of.txt


OF 是在 PowerPC 上,用于在系统加点或者重启时,初始化设备的,这些都是为操作系统的启动做准备工作。bootloader 会把系统中某些设备组织在一个树形表中,然后会把这个表传给内核。参数的传递是通过寄存器完成的,其中:

  •  r3:指向 device-tree block 的物理指针
  •  r4:指向内核所在的物理地址的指针。


device-tree block 的结构如下图:
PowerPC OpenFirmware_第1张图片


device-tree node 的信息就存放在 device-tree structure 和 device-tree strings 机构中。书中的每个节点都包含多个属性。
structure 部分是一个线性的结构,以 "OF_DT_BEGIN_NODE" 标识节点的开始,以 "OF_DT_END_NODE" 标识节点的结束。节点可以嵌套定义,这也就构成了节点间的父子关系。在树的结尾,必须以标识 "OF_DT_END" 表示结束。对于节点中的每个属性,都以 "OF_DT_PROP" 进行标识。所有的标识都是一个 32 位的数字。
string 部分存储的是一些冗余信息,如属性的名称等。这里存放的全是一些字符串,每个字符串都以 0 表示结尾。

device tree 中要求必须有的一些内容:
1)设备的 cells 和 address
一般的,一个设备的地址是由父总线类型来决定的,这依赖于 #address-cells 和 #size-cells 属性。内核要求根节点具有这样的地址定义,以使得内核可以直接将设备映射到处理器的总线上。
这两个属性定义了 cells 这个东西来代表其地址和大小。一个 cell 是一个 32 位的数。#addrss-cells 和 #size-cells 属性的值就代表了 address 和 size 分别由几个 cell 组成。


reg 属性是一个 "address size" 的元组。其中的 address 和 size 的大小由 #address-cells 和 #size-cells 确定。


2) compatible 属性
这是可选的,但是最好在设备节点和根节点中有这个属性。属性的值是一个或多个字符串。如果设备兼容,即使设备节点的名字不同,也可以使用这个节点的描述。


3) name 属性
就是一个名字而已,内核也不太关心这个属性。另一个是 unit name,通常是跟在 "@" 符号之后。


4) 必须有的节点和属性
  a) 根节点
    - model 这是开发板的名称
    - #address-cells "root" 设备的地址
    - #size-cells "root" 设备的大小?
    - compatible 与之兼容的设备
  b) /cpus 节点
  这是所有 CPU 节点的父节点。
  c) /cpus/* 节点
  对每个 CPU 节点的名字没有特别的要求,但通常是 <architecture>,<core>,如“PowerPC,970FX”。
    - device_type 这里它的值必须是 "cpu"
    - reg 是 cpu 的物理编号,是一个 32 位的 cell
    - d-cache-block-size 一个 cell,L1 数据缓存一条 cache line 的大小,单位字节
    - i-cache-block-size 一个 cell,L1 指令缓存一条 cache line 的大小,单位字节
    - d-cache-size 一个 cell,L1 数据缓存的大小,单位字节
    - i-cache-size 一个 cell,L1 指令缓存的大小,单位字节
  d) /memory 节点
  定义内存的布局。
    - device_type 这里它的值必须是 "memory"
    - reg 包含所有的内存范围,是一个 address/size 组成的结构。address 和 size 的大小由根节点的 #address-cells 和 #size-cells 确定。如果 #address-cells 和 #size-cells 的值都为 2,且有 reg 的值为:
00000000 00000000 00000000 80000000
00000001 00000000 00000001 00000000
就表示:0x0 开始的一个大小为 0x80000000 (2GB) 的范围,和一个 0x100000000 开始的大小为 0x100000000 (4GB) 的范围。
  e) /chosen 节点
  这里通常是 OF 用于存放一些参数或者是输入输出设备的地方。
    - bootargs 将要传递给内核命令行的字符串
    - linux,stdout-path 这是终端设备的路径。

你可能感兴趣的:(linux,String,cache,tree,终端,structure)