需要哪些CPU指令集扩展来支持Linux/GCC的目标“riscv 32”?

n6lpvg4x  于 2023-02-19  发布在  Linux
关注(0)|答案(1)|浏览(181)

我正在研究Linux对RISC-V 32位的支持,并遇到了以下编译指令:

make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- -j $(nproc)

问题是riscv32没有明确说明是只需要基本CPU指令集(RV 32 I)还是需要额外的扩展/可切换(RV32IMAC似乎是一个常见的目标)。
这给我留下了以下问题:

  • 以上命令中隐含了什么CPU指令集?
  • 如果不是RV 32 I,是否可以添加可选参数以支持RV 32 I?
m3eecexj

m3eecexj1#

从我在Linux内核v5.19中看到的情况来看,RISC-V的Makefilearch/riscv/Makefile)如下所示:

# ISA string setting
riscv-march-$(CONFIG_ARCH_RV32I)    := rv32ima
riscv-march-$(CONFIG_ARCH_RV64I)    := rv64ima
riscv-march-$(CONFIG_FPU)           := $(riscv-march-y)fd
riscv-march-$(CONFIG_RISCV_ISA_C)   := $(riscv-march-y)c

使用的伊萨是用于32位RISC-V内核的rv32ima。此外,还可以通过配置CONFIG_FPU来启用fdc扩展(适用于fd)和CONFIG_RISCV_ISA_C(对于c)。默认情况下,这两个都设置为y,因此您有rv32imafdc,但是,如果运行menuconfig(或类似程序)并设置CONFIG_FPU=nCONFIG_RISCV_ISA_C=n,则可以禁用fdc
注意:这是针对Linux v5.19的。如果您有不同的版本,您必须通过检查内核的Makefile来确保自己。
是否可以添加可选参数以支持RV 32 I?
不,看起来不是这样的,rv32ima是RISC-V 32位时选择的最小扩展集。但是同样,如果你有一个低于v5.19的不同内核版本,你必须检查你的Makefile以确保(也许一些旧的内核只使用rv32i就可以了)。

相关问题