A template for playing rv32 clang/asm programming with qemu.
zry 3b07ed8b3a Bug Fix: "-I" arg for gcc missing | 2 年之前 | |
---|---|---|
asm | 2 年之前 | |
inc | 2 年之前 | |
out | 2 年之前 | |
src | 2 年之前 | |
tools | 2 年之前 | |
.gitignore | 2 年之前 | |
LICENSE | 2 年之前 | |
Makefile | 2 年之前 | |
README.md | 2 年之前 | |
linker-script.ld | 2 年之前 | |
startup.s | 2 年之前 |
./asm/
存放除startup以外的汇编源代码./inc/
存放C语言头文件./src/
存放C语言源代码./out/
临时存放编译中间文件./linker-script.ld
链接脚本./startup.s
启动汇编文件./tools/
存放额外的工具./tools/qemu-rv32-spike.dts
从QEMU中dump出来的spike机器的设备树,这个文件本身不被编译所需,但是可以给您参考./tools/qemu-rv32-virt.dts
从QEMU中dump出来的virt机器的设备树,这个文件本身不被编译所需,但是可以给您参考PREFIX
指向GCC工具链的路径CC
C编译器AS
汇编器LD
链接器OBJCOPY
objcopy程序SIZE
size程序QEMU_RV32
QEMU的RV32可执行文件RM_CMD
用于make clean
的删除命令,在Windows上保持原值 ./tools/rm4win.exe -rf
即可。 在Linux/Unix上修改为rm -rf
通常无需修改
各命令的附加参数,可根据需要修改
CC_ARGS
C编译器附加参数AS_ARGS
汇编器附加参数LD_ARGS
链接器附加参数OBJCOPY_ARGS
objcopy附加参数SIZE_ARGS
size附加参数QEMU_ARGS
QEMU附加参数QEMU_MACHINE
QEMU模拟的目标机器类型注:一般常用的机器类型会选择 virt
或者 spike
,virt和spike的区别可以参考tools
目录下的设备树文件。关于virt
机器,还可以参考https://mth.st/blog/riscv-qemu/。
在开始之前,您需要先安装GCC RISC-V工具链和QEMU。
先编辑Makefile,将Toolchain部分修改成您的工具链所在的位置。
make all
编译全部目标make clean
清理编译结果和中间产物make qemu
使用QEMU模拟器运行如果需要使用gdb调试,请在Makefile的QEMU附加参数变量QEMU_ARGS
中增加参数-s
,若希望QEMU启动后不运行CPU而是先等待gdb,还需要加-S
参数。