A template for playing rv32 clang/asm programming with qemu.

zry 3b07ed8b3a Bug Fix: "-I" arg for gcc missing 2 years ago
asm 86e20f9520 OK. 2021-10-03 19:39 2 years ago
inc 86e20f9520 OK. 2021-10-03 19:39 2 years ago
out 86e20f9520 OK. 2021-10-03 19:39 2 years ago
src 86e20f9520 OK. 2021-10-03 19:39 2 years ago
tools 86e20f9520 OK. 2021-10-03 19:39 2 years ago
.gitignore 86e20f9520 OK. 2021-10-03 19:39 2 years ago
LICENSE 889561849a Initial commit 2 years ago
Makefile 3b07ed8b3a Bug Fix: "-I" arg for gcc missing 2 years ago
README.md 86e20f9520 OK. 2021-10-03 19:39 2 years ago
linker-script.ld 86e20f9520 OK. 2021-10-03 19:39 2 years ago
startup.s 86e20f9520 OK. 2021-10-03 19:39 2 years ago

README.md

文档

目录说明

  • ./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机器的设备树,这个文件本身不被编译所需,但是可以给您参考

Makefile变量说明

Toolchain Configure部分

  • 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

Path Configure部分

通常无需修改

Other Arugments

各命令的附加参数,可根据需要修改

  • 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参数。