NJU-ProjectN / nemu

NJU EMUlator, a full system x86/mips32/riscv32/riscv64 emulator for teaching
Other
900 stars 195 forks source link

am-kernels/kernels/nemu在使用riscv32e时出错 #99

Open YorigamiChitose opened 5 months ago

YorigamiChitose commented 5 months ago

NEMU貌似没有为riscv32e单独配置一个完整的环境

  1. nemu缺少configs/riscv32e-am_defconfig
  2. menuconfig配置RVE选项,编译结果依然为riscv32-nemu-interpreter,在riscv32e情况下会使am-kernels/kernels/nemu编译出riscv32-nemu-interpreter-riscv32e-nemu然后出现如下报错
    Can not open '/***/ysyx-workbench/nemu/build/riscv32e-nemu-interpreter-riscv32e-nemu.bin'

临时解决方法

  1. 添加configs/riscv32e-am_defconfig
    CONFIG_RVE=y
    CONFIG_TARGET_AM=y
    # CONFIG_TRACE is not set
    CONFIG_MSIZE=0x2000000
    CONFIG_DEVICE=y
  2. am-kernels/kernels/nemu/Makefile中添加
    ifeq ($(ISA), riscv32e)
    ISA_NEMU = riscv32
    else
    ISA_NEMU = $(ISA)
    endif

    并修改16行IMG=$(NEMU_HOME)/build/$(ISA)-nemu-interpreter-$(ARCH).binIMG=$(NEMU_HOME)/build/$(ISA_NEMU)-nemu-interpreter-$(ARCH).bin

    另一个小问题/建议

    nemu中有可能会使用64位数的位移运算,编译成rv32版本时会出现找不到__lshrdi3__ashldi3的错误。感觉可以把这两个函数实现放到klib里,防止有人跟我一样踩这个坑。要是本来就是个坑当我没说(doge)

sashimi-yzh commented 2 months ago

我有时间再修复这个问题, 先让issue保留打开状态