获取主内存布局,不特定于仅单个 riscv 实现

Obtain the main memory layout, not specific to only a single riscv implementation

我正在为 riscv isa 开发操作系统内核,主要使用汇编语言。我喜欢参考riscv规范和SiFive FU540规范

我需要让内核知道哪些地址范围没有为其他组件保留,因此可用于内核及其进程。这必须以某种方式发生,适用于尽可能多的未来 riscv 实现。但是,我只能找到特定于 SiFive FU540 实现的内存映射。

privileged architecture version 1.10 riscv specification chapter 8 中,它说有一个设备树可以将平台信息传递给内核,但我找不到足够的信息来了解它是如何工作的。

To reduce porting effort for OS boots, we have reverted back to using Device Trees to communicateplatform information to the kernel, so this chapter is out of date. Cong string was designedfor other uses in addition, but for now, we are staying with a standard device tree model.

现在我的问题:

  1. 有深入讲riscv ISA的device tree的文档吗?

  2. 设备树模型是临时解决方案吗,所以我应该等到它被替换了?

设备树主要是Linux内核概念。然后,对于 Risc-V 设备树文档,我认为您应该查看 kernel documentation here。 所有属于 Risc-V 的代码都可以在 arch/riscv/ directory.

上找到

设备树标准本身有点奇怪:devicetree.org maintains a device tree standard,但它更侧重于二进制编码,而不是节点的实际含义。

设备树节点的定义特定于特定的兼容字符串,并且在 Documentation/devicetree/bindings 中的 Linux 源代码旁边提供了这些生命的最佳文档。您最好的选择是只在其中查找兼容的字符串。文档相当不错,但我们当然很乐意听到您遇到的任何问题——或者更好的补丁:)。

Linux 存储库中的设备树绑定是通用的(即,不特定于 Linux),但因为它们与 Linux 在同一个存储库中他们往往会在源代码中混入一些 Linux 主义。在 RISC-V 领域,我们试图让我们的设备树条目在所有操作系统之间兼容,但这是一项正在进行的工作。我知道我们的 Zephyr 端口也使用设备树,虽然它大部分与 Linux 设备树兼容,但仍有一些差异。

我们计划在可预见的未来使用设备树作为 RISC-V Linux 端口的一部分。我们的意图是设备树将像我们所有其他的一样被视为稳定的 ABI。换句话说:一旦绑定在 Linux 源代码树中,我们就不会以二进制不兼容的方式更改它。这个计划的效果如何还有待观察。