我正在研究Linux对RISC-V 32位的支持,并遇到了以下编译指令:
make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- -j $(nproc)
问题是riscv32没有明确说明是只需要基本CPU指令集(RV 32 I)还是需要额外的扩展/可切换(RV32IMAC似乎是一个常见的目标)。这给我留下了以下问题:
riscv32
RV32IMAC
m3eecexj1#
从我在Linux内核v5.19中看到的情况来看,RISC-V的Makefile(arch/riscv/Makefile)如下所示:
Makefile
arch/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来启用f、d和c扩展(适用于fd)和CONFIG_RISCV_ISA_C(对于c)。默认情况下,这两个都设置为y,因此您有rv32imafdc,但是,如果运行menuconfig(或类似程序)并设置CONFIG_FPU=n和CONFIG_RISCV_ISA_C=n,则可以禁用fdc。注意:这是针对Linux v5.19的。如果您有不同的版本,您必须通过检查内核的Makefile来确保自己。是否可以添加可选参数以支持RV 32 I?不,看起来不是这样的,rv32ima是RISC-V 32位时选择的最小扩展集。但是同样,如果你有一个低于v5.19的不同内核版本,你必须检查你的Makefile以确保(也许一些旧的内核只使用rv32i就可以了)。
rv32ima
CONFIG_FPU
f
d
c
fd
CONFIG_RISCV_ISA_C
y
rv32imafdc
menuconfig
CONFIG_FPU=n
CONFIG_RISCV_ISA_C=n
fdc
rv32i
1条答案
按热度按时间m3eecexj1#
从我在Linux内核v5.19中看到的情况来看,RISC-V的
Makefile
(arch/riscv/Makefile
)如下所示:使用的伊萨是用于32位RISC-V内核的
rv32ima
。此外,还可以通过配置CONFIG_FPU
来启用f
、d
和c
扩展(适用于fd
)和CONFIG_RISCV_ISA_C
(对于c
)。默认情况下,这两个都设置为y
,因此您有rv32imafdc
,但是,如果运行menuconfig
(或类似程序)并设置CONFIG_FPU=n
和CONFIG_RISCV_ISA_C=n
,则可以禁用fdc
。注意:这是针对Linux v5.19的。如果您有不同的版本,您必须通过检查内核的
Makefile
来确保自己。是否可以添加可选参数以支持RV 32 I?
不,看起来不是这样的,
rv32ima
是RISC-V 32位时选择的最小扩展集。但是同样,如果你有一个低于v5.19的不同内核版本,你必须检查你的Makefile
以确保(也许一些旧的内核只使用rv32i
就可以了)。