KHO FDT

KHO 使用扁平设备树 (FDT) 容器格式和 libfdt 库来创建和解析内核之间传递的数据。 KHO FDT 中的属性以本机格式存储。 它包括描述所有保留内存区域的内存结构的物理地址,以及 KHO 用户自己的 FDT 的物理地址。 解释这些子 FDT 是 KHO 用户的责任。

KHO 节点和属性

属性 preserved-memory-map

KHO 在根节点下保存一个名为 preserved-memory-map 的特殊属性。 此节点包含 KHO 在 kexec 期间保留内存区域的内存结构的物理地址。

属性 compatible

compatible 属性确定创建 KHO FDT 的内核与尝试加载它的内核之间的兼容性。 如果加载 KHO FDT 的内核与其不兼容,则将绕过整个 KHO 过程。

属性 fdt

通常,KHO 用户将其状态序列化到自己的 FDT 中,并指示 KHO 保留底层内存,以便在 kexec 之后,新内核可以从保留的 FDT 中恢复其状态。

因此,KHO 用户可以在 KHO 根树中创建一个节点,并将其自身 FDT 的物理地址保存在该节点的 fdt 属性中。

示例

以下示例演示了 KHO FDT,它保留了使用 reserve_mem 内核命令行参数创建的两个内存区域

/dts-v1/;

/ {
      compatible = "kho-v1";

      preserved-memory-map = <0x40be16 0x1000000>;

      memblock {
              fdt = <0x1517 0x1000000>;
      };
};

其中 memblock 节点包含子系统 memblock 请求保留的 FDT。 FDT 包含以下序列化数据

/dts-v1/;

/ {
      compatible = "memblock-v1";

      n1 {
              compatible = "reserve-mem-v1";
              start = <0xc06b 0x4000000>;
              size = <0x04 0x00>;
      };

      n2 {
              compatible = "reserve-mem-v1";
              start = <0xc067 0x4000000>;
              size = <0x04 0x00>;
      };
};