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)

相关推荐
赵侃侃爱分享9 分钟前
学完Python第一次写程序写了这个简单的计算器
开发语言·python
五阿哥永琪11 分钟前
MySQL 中 VARCHAR、TEXT 与 JSON 类型:区别、场景与选型指南
数据库·mysql·json
a95114164214 分钟前
Go语言如何操作OSS_Go语言阿里云OSS上传教程【完整】
jvm·数据库·python
2401_8971905514 分钟前
MySQL中如何利用LIMIT配合函数分页_MySQL分页查询优化
jvm·数据库·python
断眉的派大星24 分钟前
# Python 魔术方法(魔法方法)超详细讲解
开发语言·python
2501_9333295528 分钟前
技术深度拆解:Infoseek舆情处置系统的全链路架构与核心实现
开发语言·人工智能·自然语言处理·架构
妮妮喔妮31 分钟前
supabase的webhook报错
开发语言·前端·javascript
我的xiaodoujiao32 分钟前
API 接口自动化测试详细图文教程学习系列11--Requests模块3--测试练习
开发语言·python·学习·测试工具·pytest
Polar__Star38 分钟前
C#怎么使用并发集合 C#ConcurrentDictionary和ConcurrentQueue线程安全集合怎么用【进阶】
jvm·数据库·python
xiaoshuaishuai843 分钟前
C# Codex 脚本编写
java·服务器·数据库·c#