RISC-V ISA-Simulator Spike安装

       最近想研究一下体系结构,准备基于模拟器来进行性能、面积、功耗的分析,首先想到的是RISC-V官方发布的模拟器Spike,可选的还有TinyEmu、GEM-5、SimpleScalar等,一个个来吧,估计后面的主力还是GEM-5,但那玩意儿太笨重了,慢慢来吧。

【1】VMWare虚拟机(版本16pro),发行版选Ubuntu 22.04 LTS

上述工具基本上都是在Linux下使用的,所以首先选择平台,我用虚拟机VMWare安装了Ubuntu22.04 LTS版,内存选了8GB,硬盘配了80GB,暂时应该是够了。安装虚拟机及操作系统的过程无难点,就不详述了。

【2】安装riscv-gnu-toolchain

Spike安装运行需要很多依赖,包括运行的程序需要用RISC-V的交叉编译链工具,所以先安装riscv-gnu-toolchain比较好。

实在没想到,这一步是最麻烦的。首先按照网上的攻略,采用源码安装的方式:

①更新软件包列表

sudo apt update

②安装编译所需的依赖包

sudo apt 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 libnewlib-dev device-tree-compiler

③下载riscv-gnu-toolchain源码

mkdir -p ~/riscv-gnu-toolchain

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

cd riscv-gnu-toolchain

git submodule update --init --recursive

这里噩梦开始了,首先是git clone这一步,由于国内网络访问github.com网速问题,这一步无法顺利进行,好在可以换个源,于是改成

git clone https://githubfast.com/riscv/riscv-gnu-toolchain.git

下载之后,git submodule update这一步,同样需要自动从网上下载子仓库的代码,包括gcc、gdb、glibc、newlib等等,相关信息可以在代码目录的.gitmodules文件里看到。我尝试更换源,不成功。手动下载子仓库编译不成功。而且即使开VPN,虚拟机也不能享用,几乎要绝望了。后来在GQ同志的帮助下,意外发现WSL下可以享用windows的VPN通道,这下终于柳暗花明,成功把所有的代码都下载成功了,下载后的代码总共有11.37GB。拷贝到虚拟机里去,就可以进行下一步了(我放在了~/packages下并解压)。

【2】编译与安装riscv-gnu-toolchain

在编译之前,创建一个专门的构建目录来避免污染源码目录:

mkdir build

配置

cd build

../configure --prefix=/opt/riscv64

sudo make linux -j$(nproc)

要真按这个编译,后面就发现有问题了,因为make linux这个命令会导致生成的工具链是riscv64-unkown-linux-gnu-gcc,这是用来编译用户程序的,也就是说在某64位RISC-V处理器上运行linux,我有个程序要在这个linux下运行,那么就用riscv64-unkown-linux-gnu-gcc即可,但是后面要用到的pk本质上是个裸机程序,因此只能用riscv64-unknown-elf-gcc来编译,所以这里需要改成下面的命令:

cd build

../configure --prefix=/opt/riscv --with-newlib  --without-headers  --disable-shared  --disable-threads --enable-languages=c,c++

sudo make -j$(nproc)

我的电脑上编译大概两三个小时(i5-7500 CPU @ 3.40GHz ,16GB DDR4 2400,虚拟机配置2核CPU,8GB内存)。

编译完成后,使用make install命令将riscv-gnu-toolchain安装到之前指定的目录:

sudo make install

bin目录加入环境变量$PATH:

在~/.bashrc文件里加入一行:

export PATH="$PATH:/opt/riscv/bin"

更新环境变量:

source ~/.bashrc

【3】编译与安装Spike

上一步下载的riscv-gnu-toolchain里有spike源码,可以用来编译安装:

cd ~/packages/riscv-gnu-toolchain/spike

mkdir build

cd build

../configure --prefix=/opt/riscv  

make -j$(nproc)

sudo make install

由于spike安装到了与riscv-gnu-toolchain同一目录,可执行的spike程序位于bin目录下,已在上一步加入$PATH,因此不用更新。

【4】编译与安装pk

riscv-gnu-toolchain包里同样有pk源码,可以用来编译安装:

cd ~/packages/riscv-gnu-toolchain/pk

mkdir build

cd build

../configure --prefix=/opt/riscv  --host=riscv64-unknown-elf

make -j$(nproc)

sudo make install

bin目录加入环境变量$PATH:

在~/.bashrc文件里加入一行:

export PATH="$PATH:/opt/riscv/riscv64-unknown-elf/bin"

更新环境变量:

source ~/.bashrc

【5】用hello程序验证

首先编写hello.c程序:

#include <stdio.h>

int main() {

    printf("Hello, RISC-V!/n");

return 0;

}

编译:

riscv64-unknown-elf-gcc -o hello hello.c

使用spike执行:

spike pk hello

预期结果为:

Hello, RISC-V!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容