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>;
};
};