macOS: compila y ejecuta en risc-v (spike)


1. Descripción

Este artículo fue adaptado del siguiente artículo:


Enlaces relacionados:


2. Pasos de instalación

1. Utilice Brew para instalar dependencias relacionadas.

brew install dtc gawk gnu-sed gmp mpfr libmpc isl zlib expat texinfo flock

brew tap riscv/riscv
brew install riscv-tools  
brew install riscv-isa-sim  
brew install qemu
 

El paquete instalado por Brew generalmente se encuentra /usr/local/Cellaren :


2. Descargue la cadena de herramientas RISC-V precompilada
riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-apple-darwin.tar.gz
https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-apple-darwin.tar.gz

Después de la descompresión, agregue el directorio bin a la variable de entorno


Puede obtener los siguientes archivos ejecutables, etc.:

riscv64-desconocido-elf-addr2line

  • riscv64-elfo-desconocido-gcc-ar
  • riscv64-elfo-desconocido-ld.bfd
  • riscv64-elfo-desconocido-ar
  • riscv64-elfo-desconocido-gcc-nm
  • riscv64-elfo-desconocido-nm
  • riscv64-elfo-desconocido
  • riscv64-elf-desconocido-gcc-ranlib
  • riscv64-objcopy-elfo-desconocido
  • riscv64-elfo-desconocido-c++
  • riscv64-elfo-desconocido-gcov
  • riscv64-objdump-elfo-desconocido
  • riscv64-elf-desconocido-c++filt
  • riscv64-desconocido-elf-gcov-volcado
  • riscv64-desconocido-elf-ranlib
  • riscv64-elf-cpp-desconocido
  • riscv64-desconocido-elf-gcov-herramienta
  • riscv64-elf-desconocido-readelf
  • riscv64-elfo-desconocido-elfedit
  • riscv64-elf-desconocido-gdb
  • riscv64-tamaño-elfo-desconocido
  • riscv64-elfo-desconocido-g++
  • riscv64-desconocido-elf-gdb-agregar-índice
  • riscv64-cadenas-elfos-desconocidas
  • riscv64-elfo-desconocido-gcc
  • riscv64-elfo-desconocido-gprof
  • riscv64-tira-elfo-desconocida
  • riscv64-elfo-desconocido-gcc-8.3.0
  • riscv64-elfo-desconocido-ld

3. Descargue el paquete binario precompilado de Spike.

spike-pk-prebuilt-x86_64-apple-darwin.tar.gz
https://cloud.tsinghua.edu.cn/f/6246e90c407b4a508816/


Después de la descompresión, cree un enlace suave pk

ln xxx/software/spike-pk-prebuilt-x86_64-apple-darwin/pk  /usr/local/bin/pk

De lo contrario, el programa de ejecución puede informar un error:

libc++abi: terminando debido a una excepción no detectada de tipo std::runtime_error: no se pudo abrir /usr/local/bin/pk (¿lo escribiste mal? Si es VCS, ¿olvidaste +permisivo/+permisivo-off?)


3. Prueba

Realizar las siguientes funciones:

  • Generar ensamblaje RISC-V
  • Utilice gcc para convertir el ensamblaje RISC-V en ejecutable RISC-V
  • Ejecute el ejecutable RISC-V con Spike.
                  你的编译器                gcc            qemu/spike
MiniDecaf 源文件 ------------> RISC-V 汇编 -----> 可执行文件 --------> 输出

1. Escribe el archivoinput.c

int main(){
    
    return 233;}

2. Compile en input.s

riscv64-unknown-elf-gcc -march=rv32im -mabi=ilp32 -O3 -S input.c

get cat input.s, puedes ver su contenido

cat input.s

conseguir:

	.file	"input.c"
	.option nopic
	.attribute arch, "rv32i2p1_m2p0"
	.attribute unaligned_access, 0
	.attribute stack_align, 16
	.text
	.section	.text.startup,"ax",@progbits
	.align	2
	.globl	main
	.type	main, @function
main:
	li	a0,122
	ret
	.size	main, .-main
	.ident	"GCC: (g2ee5e430018-dirty) 12.2.0"

3. Compile en un archivo ejecutable.

riscv64-unknown-elf-gcc -march=rv32im -mabi=ilp32 input.s

generar a.outarchivo


También puedes saltar -sdirectamente para generar el archivo ejecutable.

riscv64-unknown-elf-gcc -march=rv32im -mabi=ilp32 -O3 test.c

Ver a.outpropiedades del archivo

file a.out

conseguir:

a.out: ejecutable ELF LSB de 32 bits, UCB RISC-V, ABI de flotación suave, versión 1 (SYSV), vinculado estáticamente, no eliminado


4. Ejecucióna.out

spike --isa=RV32G /usr/local/bin/pk a.out

imprimir

bbl loader

Continúe
imprimiendo $?, este es el código de retorno de Spike, que es el valor devuelto por el método principal de nuestro archivo .c.

echo $?

Iori 2023-08-21

Supongo que te gusta

Origin blog.csdn.net/lovechris00/article/details/132417820
Recomendado
Clasificación