编译riscv32-unknown-elf-gcc

最近在搭建一个基于Renode的裸机仿真Demo,基于RISC-V指令集,自定义硬件及软件,无操作系统,因此需要编译RISC-V的工具链。

1. 源码下载

工具链源码下载地址:https://github.com/riscv-collab/riscv-gnu-toolchain编译riscv32-unknown-elf-gcchttps://github.com/riscv-collab/riscv-gnu-toolchain

RISC-V GNU编译器工具链提供了两种构建模式,一种是通用的ELF/Newlib工具链,以及更加复杂的Linux-ELF/glibc工具链。本篇只针对我们自己使用的模式进行介绍。

2. 安装依赖项

在编译之前,我们需要安装一些依赖项,这些依赖项信息来自源码地址中的说明:

$ sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

3. 编译riscv32-unknown-elf-gcc

按照我们的仿真要求,我们只需要编译riscv32-unknown-elf-gcc即可,为了节省空间,其他的都不需编译。我们使用的是32bit指令,且只做整数运算,因此配置命令如下:

./configure --prefix=/opt/riscv --disable-linux --with-arch=rv32i

关于RISC-V指令集配置选项,可以参考下图:

编译riscv32-unknown-elf-gcc

上图来自*:https://en.wikipedia.org/wiki/RISC-V

更详细的说明可以参考RISC-V的标准文档,此处不赘述,主要本人也还在摸索期,等搞懂了再做分享:Specifications - RISC-V International  

完成以上配置后,别忘了把安装目录加入环境变量:

echo "PATH=$PATH:/opt/riscv/bin" >> ~/.bashrc
source ~/.bashrc

接下来,进行漫长的编译:

make -j4

耐心等待编译完成后,执行riscv32-unkown-elf-gcc -v命令查询编译信息,结果如下,从中可以看到详细的配置信息。

编译riscv32-unknown-elf-gcc

4. 测试

编译一段简单的代码(此处我们用了一个汇编文件baremetal.s进行编译)进行测试:

riscv32-unknown-elf-gcc baremetal.s -ggdb -O0 -o image -ffreestanding -nostdlib

编译成功:

编译riscv32-unknown-elf-gcc

 

上一篇:Linux GCC常用命令和ELF文件格式


下一篇:Golang Gin 框架入门介绍(一)