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

1. 源码下载

工具链源码下载地址:https://github.com/riscv-collab/riscv-gnu-toolchainhttps://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指令集配置选项,可以参考下图:

上图来自维基百科: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命令查询编译信息,结果如下,从中可以看到详细的配置信息。

进入工具链安装目录/opt/riscv/bin,可以看到有如下riscv32-unknown-elf-*系列组件: 

4. 测试

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

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

编译成功:

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐