什么是RISCV中的内存映射部分

What is the memory map section in RISCV

我熟悉MIPS架构,知道MIPS有kseg0、kseg1等内存部分。这决定了该段是否可以被缓存或映射。例如,您应该将一些 I/O 设备(如 UART)定位到未缓存的段。

但是我没有在RISCV arch中找到任何相关的东西。那么 RISCV OS 是如何知道地址应该被映射的呢?

顺便说一句:我知道 satp CSR 中描述翻译模式的值。当 OS 为 运行 时,必须设置为 "Bare(disabled MMU)" 以外的值,以便 OS 可以支持虚拟内存。那么如果CPU访问UART地址,satp中的值仍然不是"Bare"?但应该是"Bare"?

RISC-V 是一个指令集家族,包括没有内存映射和内存保护机制(物理内存保护是可选的)的 MCU 风格处理器。

根据你的问题,我假设你是在谈论支持用户和主管级 ISA 的处理器,如 RISC-V 特权规范中所述。

听起来你想要一个描述哪些物理地址是可缓存的规范。查看 CSR 列表,我相信此信息不在 CSR 中,因为它是特定于平台的。在我使用过的系统中,它要么硬编码在平台驱动程序中,要么通过设备树传递。

对于Linux,设备树条目不是RISC-V特有的:设备树条目指定内存的物理地址范围。此外,每个 I/O 设备都有一个指定其物理地址范围的设备树条目。

您可以阅读 RISC-V 特权规范(The RISC-V Instruction Set Manual Volume II: Privileged Architecture 3.5 物理内存属性)。

"对于 RISC-V,我们将 PMA 的规范和检查分离到一个单独的硬件结构中,即 PMA 检查器。在许多情况下,每个物理地址区域的属性在系统设计时是已知的,并且可以是硬连线到 PMA 检查器。在属性是 运行 时间可配置的情况下,可以提供特定于平台的内存映射控制寄存器,以适合平台上每个区域的粒度指定这些属性(例如,对于 on -可以在可缓存和不可缓存用途之间灵活划分的芯片 SRAM)"

我想如果你想在RISCV中检查不可缓存或可缓存,你需要设计一个提供MMU的PMA单元来检查内存属性。