RISC-V是精简指令集架构,由于开源,其学术研究比较丰富。体系结构研究者基本都会使用该架构进行设计,并基于它进行系统性能功耗等的分析。
本系列想利用gem5模拟器进行全系统模拟RISC-V,并进行系统的设计空间探索。本章是第一步:toolchain的编译安装,即交叉编译器(交叉编译器的作用:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码)
#下载riscv-gnu-toolchain
git clone https://github.com/riscv/riscv-gnu-toolchain
#更新子模块
git submodule update --init --recursive
如果下载不了,可以使用2022/3/13下载的版本:(包含gcc和quma)
链接:https://pan.baidu.com/s/1GgJ4Xo7tb_DYJB3Wjsataw
提取码:b8cr
需要大概6.65GB的磁盘
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
进入到riscv-gnu-toolchain的文件目录下,执行
cd riscv-gnu-toolchian
./configure --prefix=/opt/riscv
#--prefix后面是你想要安装的位置,opt文件夹下默认是应用程序
sudo make -jN #考虑到opt文件夹创建文件和删除文件需要用root权限
编译大概40min。
扩展内容:
上述编译会默认生成riscv64-unknown-linux-gnu-gcc版本的交叉编译器,但我们需要riscv64-unknown-elf-gcc。
riscv gcc可以编译成以下几个版本:
#riscv32-unknown-elf-gcc
#这是Newlib交叉编译器,针对riscv32架构
./configure --prefix=/opt/riscv32 --with-arch=rv32imc --with-abi=xxx
make
#--mabi可以选择如下:
#ilp32
#ilp32f
#ilp32d
#riscv64-unknown-elf-gcc
#这是Newlib交叉编译器,针对riscv64架构,编译riscv-tools需要用到
#默认64位 因此可以不要后面的内容
./configure --prefix=/opt/riscv64
make
#riscv32-unknown-linux-gnu-gcc
#这是Linux交叉编译器,使用的C运行库为linux中的标准glibc
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
make linux
#riscv64-unknown-linux-gnu-gcc
#riscv64-multilib-elf-gcc
#riscv64-liunx-multilib-gcc
#进入~/.bashrc
vim ~/.bashrc
#然后添加语句
export PATH=/opt/riscv/bin:$PATH
#保存并更新环境
:wq
source ~/.bashrc
方法一:
riscv64-unknown-elf-gcc --version
方法二:
去到一个不重要的路径新建c程序,使用交叉编译器编译
echo -e '#include <stdio.h>\n int main(void) { printf("Helloworld!\\n"); return 0; }' > hello.c
riscv64-unknown-elf-gcc -o hello hello.c
#或者riscv64-unknown-linux-gnu-gcc -o hello hello.c
如果出现hello可执行文件即为成功。
注意 此时还不能执行./hello或者spike pk hello。下一篇介绍如何运行,我们需要一个RSIC-V模拟器,也是riscv-tools的编译安装。