| Spike Simulator Platform | |
| ======================== | |
| The **Spike** is a RISC-V ISA simulator which implements a functional model | |
| of one or more RISC-V harts. The **Spike** compatible virtual platform is | |
| also available on QEMU. In fact, we can use same OpenSBI firmware binaries | |
| on **Spike** simulator and QEMU Spike machine. | |
| For more details, refer [Spike on GitHub](https://github.com/riscv/riscv-isa-sim) | |
| To build the platform-specific library and firmware images, provide the | |
| *PLATFORM=generic* parameter to the top level `make` command. | |
| Platform Options | |
| ---------------- | |
| The *Spike* platform does not have any platform-specific options. | |
| Execution on Spike Simulator | |
| ---------------------------- | |
| **No Payload Case** | |
| Build: | |
| ``` | |
| make PLATFORM=generic | |
| ``` | |
| Run: | |
| ``` | |
| spike build/platform/generic/firmware/fw_payload.elf | |
| ``` | |
| **Linux Kernel Payload** | |
| Note: We assume that the Linux kernel is compiled using | |
| *arch/riscv/configs/defconfig*. | |
| Build: | |
| ``` | |
| make PLATFORM=generic FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image | |
| ``` | |
| Run: | |
| ``` | |
| spike -m256 \ | |
| --initrd <path_to_cpio_ramdisk> \ | |
| --bootargs 'root=/dev/ram rw console=hvc0 earlycon=sbi' \ | |
| build/platform/generic/firmware/fw_payload.elf | |
| ``` | |
| or | |
| ``` | |
| spike -m256 \ | |
| --kernel <linux_build_directory>/arch/riscv/boot/Image \ | |
| --initrd <path_to_cpio_ramdisk> \ | |
| --bootargs 'root=/dev/ram rw console=hvc0 earlycon=sbi' \ | |
| build/platform/generic/firmware/fw_jump.elf | |
| ``` | |
| Execution on QEMU RISC-V 64-bit | |
| ------------------------------- | |
| **No Payload Case** | |
| Build: | |
| ``` | |
| make PLATFORM=generic | |
| ``` | |
| Run: | |
| ``` | |
| qemu-system-riscv64 -M spike -m 256M -nographic \ | |
| -bios build/platform/generic/firmware/fw_payload.elf | |
| ``` | |
| **Linux Kernel Payload** | |
| Note: We assume that the Linux kernel is compiled using | |
| *arch/riscv/configs/defconfig*. | |
| Build: | |
| ``` | |
| make PLATFORM=generic FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image | |
| ``` | |
| Run: | |
| ``` | |
| qemu-system-riscv64 -M spike -m 256M -nographic \ | |
| -bios build/platform/generic/firmware/fw_payload.elf \ | |
| -initrd <path_to_cpio_ramdisk> \ | |
| -append "root=/dev/ram rw console=hvc0 earlycon=sbi" | |
| ``` | |
| or | |
| ``` | |
| qemu-system-riscv64 -M spike -m 256M -nographic \ | |
| -bios build/platform/generic/firmware/fw_jump.elf \ | |
| -kernel <linux_build_directory>/arch/riscv/boot/Image \ | |
| -initrd <path_to_cpio_ramdisk> \ | |
| -append "root=/dev/ram rw console=hvc0 earlycon=sbi" | |
| ``` |