riscv64

Necessary artifacts

└── riscv64
    ├── lmp-factory-image-qemuriscv64.wic.gz
    └── fw_payload.elf

Booting in QEMU

Warning

These instructions require QEMU 5.2 or later.

  1. List available Targets and decide on which to boot:

    fioctl targets list
    

Note

Make sure to set the FIOCTL_FACTORY environment variable:

export FIOCTL_FACTORY=<factory>

  1. Make a directory to store the artifacts and cd into it.

    mkdir -p lmp-qemu/riscv64
    cd lmp-qemu/riscv64
    
  2. Download the necessary artifacts for riscv64, replace <target_number> with the target you would like to boot

    # Download and extract the Factory image
    fioctl targets artifacts <target_number> qemuriscv64/lmp-factory-image-qemuriscv64.wic.gz | gunzip > lmp-factory-image-qemuriscv64.wic
    # Download OpenSBI Firmware
    fioctl targets artifacts <target_number> qemuriscv64/fw_payload.elf > fw_payload.elf
    
  3. The directory tree should now look like this

    lmp-qemu/
    └── riscv64
        ├── lmp-factory-image-qemuriscv64.wic
        └── fw_payload.elf
    
  4. Run the QEMU script below against the artifacts inside of lmp-qemu/. You may want to save this as run.sh inside the directory for convenience

Note

The QEMU CLI passes the necessary flags and parameters to the appropriate qemu-system command, such as image, CPU, network, and other device information. For specifics, consult QEMU’s Documentation.

Booting Graphically

In order to boot QEMU with an OpenGL capable virtual GPU inside (required for Wayland/Weston), the following flags need to be added to the QEMU CLI:

-display gtk,gl=on -device virtio-gpu-pci

The -nographic flag must also be removed from the QEMU CLI.

Warning

qemu-system-riscv64 does not currently support this functionality.

https://patchwork.kernel.org/project/qemu-devel/cover/cover.1538683492.git.alistair.francis@wdc.com/

QEMU CLI

qemu-system-riscv64 -machine virt -m 1024 \
    -device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon \
    -device virtio-net-device,netdev=usernet \
    -netdev user,id=usernet,hostfwd=tcp::22222-:22 \
    -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0 \
    -bios fw_payload.elf \
    -monitor null \
    -drive file=lmp-factory-image-qemuriscv64.wic,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
    -nographic

Tip

It is possible to access QEMU via SSH by appending these parameters to the QEMU CLI command above:

-netdev user,id=net0,hostfwd=tcp::2222-:22

Then, run SSH with:

ssh -p 2222 fio@localhost

Demo

Tip

You can register your device following the steps from Register your device.