SPIKE源码编译与使用(一)


后文,可参考 《SPIKE源码编译与使用(二)》

1 SPIKE介绍

一个专门为RISC-V设计的指令集模拟器,由RISC-V基金会开发,其主要聚焦于RISC-V ISA的完整性测试,是golden model simulator,可用来检查RISCV的规范一致性。

它实现了一个较为简洁的模拟环境,通常用来运行和调试RISC-V汇编程序或C程序。相比qemu,spike的实现相对简单,它的主要目的是提供一个轻量级的RISC-V核心模拟,通常不包括周边设备的模拟。在进行系统集成时,可能需要额外的工具来模拟外围设备。

SPIKE仓库:https://github.com/riscv-software-src/riscv-isa-sim/tree/master

2 编译SPIKE

安装依赖

apt-get install device-tree-compiler libboost-regex-dev

创建目录

mkdir build

进入目录

cd build

配置

../configure --prefix=$RISCV

执行编译

make -j32

如果报错: error_code.hpp:686: undefined reference to boost::system::generic_category()
解决办法:

  1. sudo apt-get install libboost-all-dev
  2. vim ../Makefile
  3. 链接选项末尾,添加 -lboost_system,如下:
    LIBS := -lpthread -ldl -lboost_regex -lpthread -lboost_regex -lboost_system

编译成功,在riscv-isa-sim-master/build目录下,生成了可执行文件spike。

执行./spike -h,查看模拟器帮助信息。
在这里插入图片描述

安装(可选)

make install

3 SPIKE运行应用程序hello world

目前所知的SPIKE模拟器,可以有,如下2种运行方式:

  • spike+pk+应用程序
    pk为代理内核,可以理解为OS,因此可以直接在pk上,运行应用程序(用户态)。
  • spike+bbl
    bbl包装了linux kernel,因此,spike可以运行linux kernel。

无论是pk还是bbl,都是由riscv-pk编译生成的。
RISC-V Proxy Kernel(riscv-pk)是RISC-V的一个轻量级应用程序执行环境,可以托管静态链接的RISC-V ELF二进制文件。
riscv-pk仓库:https://github.com/riscv/riscv-pk

我们这里,以spike+pk+hello为例,进行说明。
接下来,我们要编译riscv-pk和hello.c。

3.1 编译riscv-pk

下载源码

git clone https://github.com/riscv-software-src/riscv-pk.git

进入目录

cd riscv-pk

创建目录

mkdir build

进入目录

cd build

配置交叉编译器

../configure --prefix=$RISCV --host=riscv64-unknown-elf

这里下载riscv64-unknown-elf交叉编译器。
安装过程,可参考《TinyEMU之Linux Kernel编译》

执行编译

make

在riscv-pk/build目录下,生成了bbl和pk可执行文件,但是我们这里只关心pk

把pk拷贝至spike可执行程序,所在目录

cp pk ../../riscv-isa-sim-master/build/

3.2 编译hello.c

hello.c代码,如下:

#include <stdio.h>
int main()
{
    printf("hello world\n");
}

编译hello.c

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

注意:

在pk上运行的应用程序,必须是静态编译,也就是说,必须使用elf版本的交叉编译器,来编译hello.c。

将hello拷贝至spike可执行程序,所在目录

cp hello ../riscv-isa-sim-master/build/

3.3 运行hello

我们运行应用程序hello

./spike pk hello

运行结果:
在这里插入图片描述
打印出“hello world”。


参考链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值