Documentation/Platforms/RISCV: Difference between revisions
mNo edit summary |
|||
Line 111: | Line 111: | ||
-bios path/to/hss.bin -sd path/to/sdcard.img \ | -bios path/to/hss.bin -sd path/to/sdcard.img \ | ||
-nic user,model=cadence_gem \ | -nic user,model=cadence_gem \ | ||
-nic tap,ifname=tap,model=cadence_gem \ | -nic tap,ifname=tap,model=cadence_gem,script=no \ | ||
-display none -serial stdio \ | -display none -serial stdio \ | ||
-chardev socket,id=serial1,path=serial1.sock,server,wait \ | -chardev socket,id=serial1,path=serial1.sock,server,wait \ |
Revision as of 08:04, 17 November 2020
Description
RISC-V is an open source instruction set. It is a modular with only a small set of mandatory instructions. Every other module might be implemented by vendors allowing RISC-V to be suitable for small embedded systems up to large supercomputers.
Build Directions
For RV64:
./configure --target-list=riscv64-softmmu && make
For RV32:
./configure --target-list=riscv32-softmmu && make
Booting Linux
Booting 64-bit Debian
Follow the instructions on the Debian wiki to boot Debian on QEMU: https://wiki.debian.org/RISC-V
Booting 64-bit Fedora
Download the Fedora prebuilt images from: https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/ You will want to download Fedora-Minimal-Rawhide-*-fw_payload-uboot-qemu-virt-smode.elf and Fedora-Minimal-Rawhide-*-sda.raw.xz images
Decompress the rootFS:
unxz Fedora-Minimal-Rawhide-*-sda.raw.xz
Boot linux using RV64GC qemu:
qemu-system-riscv64 \ -nographic \ -machine virt \ -smp 4 \ -m 2G \ -kernel Fedora-Minimal-Rawhide-*-fw_payload-uboot-qemu-virt-smode.elf \ -bios none \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-device,rng=rng0 \ -device virtio-blk-device,drive=hd0 \ -drive file=Fedora-Minimal-Rawhide-20200108.n.0-sda.raw,format=raw,id=hd0 \ -device virtio-net-device,netdev=usernet \ -netdev user,id=usernet,hostfwd=tcp::10000-:22
- Login: root
- Password: riscv
For more details on running Fedora see the Fedora Wiki: https://fedoraproject.org/wiki/Architectures/RISC-V/Installing
Booting 32-bit OpenEmbedded Images
Follow the usual OpenEmbedded build flow using meta-riscv to build for the qemuriscv32 machine.
MACHINE=qemuriscv32 bitbake core-image-minimal; runqemu qemuriscv32
More details on doing this can be found here: https://github.com/riscv/meta-riscv/#build-image
When using OpenEmbedded it is recommended to use the runqemu script to boot QEMU. It will dynamically handle display options as well as advanced networking.
Booting 64-bit OpenEmbedded Images
Follow the usual OpenEmbedded build flow using meta-riscv to build for the qemuriscv64 machine.
MACHINE=qemuriscv64 bitbake core-image-minimal; runqemu qemuriscv64
More details on doing this can be found here: https://github.com/riscv/meta-riscv/#build-image
When using OpenEmbedded it is recommended to use the runqemu script to boot QEMU. It will dynamically handle display options as well as advanced networking.
Booting 32-bit Buildroot Images
Clone the Buildroot source code and cd into the directory.
Generate the default config:
make qemu_riscv32_virt_defconfig
Build the images
make
Boot the images:
qemu-system-riscv32 \ -M virt -nographic \ -bios output/images/fw_jump.elf \ -kernel output/images/Image \ -append "root=/dev/vda ro" \ -drive file=output/images/rootfs.ext2,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -netdev user,id=net0 -device virtio-net-device,netdev=net0
Booting 64-bit Buildroot Images
Clone the Buildroot source code and cd into the directory.
Generate the default config:
make qemu_riscv64_virt_defconfig
Build the images
make
Boot the images:
qemu-system-riscv64 \ -M virt -nographic \ -bios output/images/fw_jump.elf \ -kernel output/images/Image \ -append "root=/dev/vda ro" \ -drive file=output/images/rootfs.ext2,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -netdev user,id=net0 -device virtio-net-device,netdev=net0
Microchip PolarFire SoC Icicle Kit
QEMU 5.2.0 supports a new machine: Microchip PolarFire SoC Icicle Kit. The Icicle Kit board integrates a PolarFire SoC, with one SiFive's E51 plus four U54 cores and many on-chip peripherals and an FPGA.
For more details about Microchip PolarFire Soc, please see: https://www.microsemi.com/product-directory/soc-fpgas/5498-polarfire-soc-fpga
The Icicle Kit board information can be found here: https://www.microsemi.com/existing-parts/parts/152514
Boot the images:
qemu-system-riscv64 -M microchip-icicle-kit -smp 5 \ -bios path/to/hss.bin -sd path/to/sdcard.img \ -nic user,model=cadence_gem \ -nic tap,ifname=tap,model=cadence_gem,script=no \ -display none -serial stdio \ -chardev socket,id=serial1,path=serial1.sock,server,wait \ -serial chardev:serial1
The BIOS image used by this machine is hss.bin, aka Hart Software Services, which can be built from: https://github.com/polarfire-soc/hart-software-services
QEMU does not support eMMC hence the SD configuration shall be used in the HSS and Yocto BSP build. The eMMC configuration is not supported.
Instructions to build HSS:
$ cp boards/icicle-kit-es/def_config.sdcard .config $ make BOARD=icicle-kit-es
The following commit of HSS was tested:
commit 078ce16d8cb3a89e4c3e93916621b816dbdaa274 Merge: 76b34dd 2cd45c9 Author: Cyril-Jean <cyril.jean@microchip.com> Date: Fri Oct 9 17:07:12 2020 +0100 Merge pull request #7 from avpatel/custom_boot_flow_v1 Custom boot flow for PolarFire boards
For Yocto build, "MACHINE=icicle-kit-es-sd" should be specified, otherwise when booting Linux kernel the rootfs cannot be mounted. The generated image is something like: mpfs-dev-cli-icicle-kit-es-sd.rootfs.wic. Resize the file with 'qemu-image' to a power of 2 before passing to QEMU '-sd' command line.
The following commands download the official SD card image released by Microchip and prepare it for QEMU usage:
$ wget ftp://ftpsoc.microsemi.com/outgoing/core-image-minimal-dev-icicle-kit-es-sd-20201009141623.rootfs.wic.gz $ gunzip core-image-minimal-dev-icicle-kit-es-sd-20201009141623.rootfs.wic.gz $ qemu-img resize core-image-minimal-dev-icicle-kit-es-sd-20201009141623.rootfs.wic 4G
The memory is set to 1537 MiB by default which is the minimum required high memory size by HSS. A sanity check on ram size is performed in the machine init routine to prompt user to increase the RAM size to > 1537 MiB when less than 1537 MiB ram is detected.
HSS output is on the first serial port (stdio) and U-Boot/Linux outputs on the 2nd serial port. OpenSBI outputs on a random serial port due to the lottery mechanism used during the multi-core boot.
Attaching GDB
To attach GDB to a QEMU RISC-V instance with only a single cluster (every machine except the sifive_u) run these commands from GDB:
target extended-remote :1234 info threads
To attach GDB to a QEMU RISC-V instance with multiple clusters (the sifive_u) run these commands from GDB:
target extended-remote :1234 add-inferior inferior 2 attach 2 set schedule-multiple info threads
The above commands assume the default GDB port exposed from QEMU of 1234. This will happen when you run QEMU with the '-s' command line argument.
If you would like QEMU to not run the guest until you have connected GDB, you can specify the '-S' command line argument as well.
Links
- Fedora RISC-V wiki
- OpenEmbedded meta-riscv
- Video: QEMU Support for the RISC-V Instruction Set Architecture
Contacts
Maintainers: