Ubuntu 18.04.5 RISCV编译仿真环境搭建:riscv-gnu-toolchain和riscv-tools


前言

花了两天,搭建了RISCV编译仿真环境,网上的资料非常多,这里主要记录一下安装流程,以及安装过程中遇到的问题。


一、下载riscv-gnu-toolchain和riscv-tools

关于这点网上的资料非常多,这里只罗列几条关键的下载代码

1、下载Git依赖库

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev

2、下载riscv-fesvr

git clone https://github.com/riscv/riscv-fesvr.git  #克隆fesvr仓库

3、下载riscv-tools

git clone --recursive https://github.com/riscv/riscv-tools.git

4、下载riscv-gnu-toolchain

git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

5、riscv-gnu-toolchain和riscv-tools的关系

我在安装riscv-gnu-toolchain和riscv-tools这两个工具的时候,一直没搞清楚这两个工具之间的关系。这里根据我自己的理解,稍微说一下,其中,riscv-gnu-toolchain是编译环境,利用这个工具链对C文件进行编译,生成一个输出文件,riscv-tools是仿真工具,对前面的输出文件进行仿真。分别一前一后的安装这两个工具就好了,先装riscv-gnu-toolchain,再装riscv-tools。

6、下载riscv数据包

git clone --recursive https://github.com/AFEI1100/Cores-SweRV-EL2.git

二、设置环境变量

vim ~/.bashrc
export RISCV="/opt/riscv" #工具的安装链接
export PATH=$PATH:$RISCV/bin #该路径下为链接工具
:wq   #保存退出
source ~/.bashrc

三、编译环境

1、编译riscv-gnu-toolchain

cd riscv-gnu-toolchain  #克隆完成进入克隆下来的目录
mkdir build; cd build   #创建并进入build文件夹
../configure --prefix=$RISCV --enable-multilib  #检查环境并生成当前环境使用的Makefile
make   #注意是make而不是make linux, make编译得到是我们最常用的unknown-elf-gcc等工具链,而make linux则是unknown-linux-gnu-gcc,整个make大概需要一个小时

2、编译riscv-fesvr

cd riscv-fesvr  #克隆完成进入克隆下来的目录
mkdir build && cd build   #创建并进入build文件夹
../configure --prefix=$RISCV --target=riscv64-unknown-elf  #检查环境并生成当前环境使用的Makefile,如果需要指定编译链的输出目录,就可以把R I S C V 改 为 相 应 目 录 或 者 配 置 RISCV改为相应目录或者配置RISCV改为相应目录或者配置RISCV环境变量为相应的目录。如果没有配置就默认为/bin --target=为你的编译链的路径
[sudo] make install  #编译安装,[sudo]代表sudo可选,安装输出目录的读写全写的实际情况选择

3、编译riscv-tools(该工具依赖riscv-fesvr)

cd riscv-tools
./build.sh

一般教程上是这样的流程,但是因为我在之前make gnu-toolchain中开启了–enable-multilib的选项,所以在这里使用build.sh进行构建时会在编译benchmark/dhrystone这个file的时候出现ld链接重复的问题,如果你在riscv-gnu-toolchain中了其他选项,有可能不会出错。当然为了绕开这个东西,我选择执行另一个./build-spike-pk.sh

由于安装过程中遇到了写文件权限的问题,所以安装前面加入sudo,但又遇到了Please set the RISCV environment variable to your preferred install path问题,而echo $RISCV路径是存在的。

原因分析:echo $RISCV打印出来的是用户的环境变量,但是安装前加入sudo后,使用的root用户,而root用户没有设置RISCV这个环境变量。

解决的办法是:

su    #切换到root
export RISCV=/opt/riscv 
./build-spike-pk.sh

安装后的log如下所示:

Installing project riscv-pk
mkdir //opt/riscv/riscv64-unknown-elf/include/riscv-pk
mkdir //opt/riscv/riscv64-unknown-elf/lib/riscv-pk

RISC-V Toolchain installation completed!

至此,整个编译过程就结束了。

四、测试环境

退出root权限,另外建立一个文件夹用于测试。

1、创建hello.c文件

#include <stdio.h>

int main(void)
{
        printf("Hello RISC-V!\n");
        return 0;
}

2、编译执行

编译执行的命令如下:

riscv64-unknown-elf-gcc -fno-builtin -o hello hello.c
#riscv64-unknown-elf-gcc -O3 -o hello hello.c
spike pk hello

采用riscv64-unknown-elf-gcc -O3 -o hello hello.c命令进行编译的时候,执行时会报错std::runtime_error what(): bad syscall。
解决方法是在编译的时候加上-fno-builtin选项,参考如下文献。

std::runtime_error what(): bad syscall

3、执行结果

bbl loader
Hello World!

总结

本文分下载工具、设置环境变量、编译环境、测试环境这四个步骤,记录了RISC-V编译和仿真环境搭建的方法,以及过程中遇到的问题。

参考文献

下面列出来我认为比较好的几篇参考文献:

1、谨以此写下本人安装riscv的全过程 简单易懂!!(本人环境是在ubuntu18.04中)
2、Risc-V gcc 编译链编译安装,riscv-fesvr编译安装和spike的编译安装
3、RISCV编译环境搭建:riscv-gnu-toolchain和riscv-tools

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值