GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator

GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator

操作手册

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

$ mkdir build

$ cd build

../configure --prefix=RISCV

$ make

$ [sudo] make install

具体安装

安装依赖

复制代码
sudo apt-get install device-tree-compiler libboost-regex-dev libboost-system-dev

安装gcc编译器

复制代码
sudo apt install gcc-riscv64-unknown-elf

git clone下载源码

复制代码
git clone https://githubfast.com/riscv-software-src/riscv-isa-sim

编译

复制代码
cd riscv-isa-sim
mkdir build
cd build
../configure --prefix=$RISCV
make -j 12
sudo make install

安装完成:

复制代码
mkdir /include/softfloat
../scripts/mk-install-dirs.sh /include
for dir in fesvr       ; \
  do \
        ../scripts/mk-install-dirs.sh /include/$dir; \
    /usr/bin/install -c -m 644 config.h /include/$dir; \
  done
make: Circular libriscv.so <- libriscv.so dependency dropped.
make: Circular libcustomext.so <- libcustomext.so dependency dropped.
make: Circular libsoftfloat.so <- libsoftfloat.so dependency dropped.
../scripts/mk-install-dirs.sh /lib
for file in libfesvr.a libriscv.so libdisasm.a libcustomext.so libsoftfloat.so; \
  do \
    /usr/bin/install -c -m 644 $file /lib; \
  done
../scripts/mk-install-dirs.sh /bin
for file in elf2hex spike spike-log-parser xspike termios-xspike spike-dasm; \
  do \
    /usr/bin/install -c -m 755 $file /bin; \
  done
../scripts/mk-install-dirs.sh /lib/pkgconfig/
mkdir /lib/pkgconfig
for file in riscv-fesvr.pc riscv-riscv.pc riscv-disasm.pc; \
  do \
    /usr/bin/install -c -m 644 $file /lib/pkgconfig/; \
  done

Compiling and Running a Simple C Program

Install spike (see Build Steps), riscv-gnu-toolchain, and riscv-pk.

Write a short C program and name it hello.c. Then, compile it into a RISC-V ELF binary named hello:

复制代码
$ riscv64-unknown-elf-gcc -o hello hello.c

Now you can simulate the program atop the proxy kernel:

复制代码
$ spike pk hello

Simulating a New Instruction

Adding an instruction to the simulator requires two steps:

  1. Describe the instruction's functional behavior in the file riscv/insns/<new_instruction_name>.h. Examine other instructions in that directory as a starting point.

  2. Add the opcode and opcode mask to riscv/opcodes.h. Alternatively, add it to the riscv-opcodes package, and it will do so for you:

    复制代码
     $ cd ../riscv-opcodes
     $ vi opcodes       // add a line for the new instruction
     $ make install
  3. Add the instruction to riscv/riscv.mk.in. Otherwise, the instruction will not be included in the build and will be treated as an illegal instruction.

  4. Rebuild the simulator.

调试

编译报错fatal error: stdio.h: No such file or directory

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

hello.c:1:10: fatal error: stdio.h: No such file or directory

1 | #include <stdio.h>

| ^~~~~~~~~

compilation terminated.

没有解决

安装gcc-riscv64-linux-gnu试试

复制代码
sudo apt install gcc-riscv64-linux-gnu

然后用这条命令:

复制代码
riscv64-linux-gnu-gcc -o hello hello.c
skywalk@DESKTOP-9C5AU01:~/work$ file hello
hello: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=2fbc3940bdd6f61378b1a8629c6bac6f89b9aa41, for GNU/Linux 4.15.0, not stripped

编译成功!

运行spike pk hello报错could not open pk; searched paths:

spike pk hello

terminate called after throwing an instance of 'std::runtime_error'

what(): could not open pk; searched paths:

. (current directory)

/riscv64-unknown-elf/bin/ (based on configured --prefix and --with-target)

相关推荐
CoderCodingNo几秒前
【GESP】C++六级考试大纲知识点梳理, (1) 树的概念与遍历
开发语言·c++
A星空1231 分钟前
3519Hisidv500的QT配置
开发语言·qt
阿里嘎多学长3 分钟前
2026-01-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
KeLin&10 分钟前
讯为iTOP4412-Qt5.7环境搭建
开发语言·arm开发·qt·arm
星火开发设计10 分钟前
C++ multimap 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
superman超哥13 分钟前
Rust 异步并发基石:异步锁(Mutex、RwLock)的设计与深度实践
开发语言·后端·rust·编程语言·rust异步并发·rust异步锁·rust mutex
码农水水14 分钟前
阿里Java面试被问:RocketMQ的消息轨迹追踪实现
java·开发语言·windows·算法·面试·rocketmq·java-rocketmq
步步为营DotNet16 分钟前
深度解析.NET 中IAsyncEnumerable:异步迭代的高效实现与应用】
服务器·数据库·.net
APIshop16 分钟前
实战解析电商api:1688item_search-按关键字搜索商品数据
开发语言·python