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)

相关推荐
不会敲代码的XW8 分钟前
对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,其各自的优势
开发语言·php
WSSWWWSSW24 分钟前
DevOps 所需的行为
运维·数据库·devops
关关钧27 分钟前
【R语言】t检验
开发语言·r语言
真想骂*30 分钟前
Python中是否有类似R语言中rds的功能,可将对象保存为文件?
开发语言·python·r语言
zjkzjk771131 分钟前
函数指针(Function Pointer)与 typedef int (*FuncPtr)(int, int);typedef与using(更推荐)
开发语言·c++·算法
一匹电信狗37 分钟前
C++引用深度详解
c语言·开发语言·c++·visual studio
静西子43 分钟前
Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
数据库·redis·缓存
祝星阑1 小时前
Elixir语言的数据库交互
开发语言·后端·golang
旅行的橘子汽水1 小时前
C语言之扫雷
c语言·开发语言
Source.Liu1 小时前
1.1 CXX-Qt入门指南
开发语言·qt