riscv64

Artifacts:

Important

If you are using a prebuilt Target, your artifacts may begin with lmp-base-console-image instead.

└── riscv64
    ├── lmp-factory-image-qemuriscv64.wic.gz
    ├── other
    │   └── lmp-factory-image-qemuriscv64.wic.qcow2 # optional
    └── fw_payload.elf

Note

You can fetch either the compressed .wic.gz or the .qcow2 artifact, you do not need both. Use the .qcow2 artifact if you wish to change the QEMU disk size.

Booting in QEMU

Important

These instructions require QEMU 5.2 or later.

Note

Make sure to set the FIOCTL_FACTORY environment variable:
export FIOCTL_FACTORY=<factory>
  1. List available Targets and decide on which to boot:

    fioctl targets list
    
  2. Make a directory for the artifacts and cd into it:

    mkdir -p lmp-qemu/riscv64
    cd lmp-qemu/riscv64
    
  3. Download the artifacts needed for riscv64. These can be found under the Targets tab for your Factory. Resizable qcow2 images are located in the other folder.

  4. Optional. Resize the qcow2 image:

    qemu-img resize -f qcow2 lmp-factory-image-qemuriscv64.wic.qcow2 8G
    

    The above example resizes to 8G—set to meet your needs.

    Tip

    If you already have the wic file, you can use it to create a qcow image:

    qemu-img create -f qcow2 -F raw -b lmp-factory-image-qemuriscv64.wic lmp-factory-image-qemuriscv64.wic.qcow2
    

    You can then use qemu-img resize as above.

  5. The directory tree should now look like this:

    lmp-qemu/
    └── riscv64
        ├── lmp-factory-image-qemuriscv64.wic
        ├── lmp-factory-image-qemuriscv64.wic.qcow2 # optional, needed if resizing is required
        └── fw_payload.elf
    
  6. Run the QEMU script below against the artifacts inside of lmp-qemu/. You can save this as run.sh inside the directory for convenience.

Important

If you are using the qcow2 image, change the script so that:

  • file= is set as the qcow2 image name, i.e., lmp-factory-image-qemuriscv64.wic.qcow2
  • format=raw is replaced with format=qcow2.

For example:

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.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,dri  ve=hd0 \
-nographic

Note

The QEMU CLI passes the necessary flags and parameters to the appropriate qemu-system command. This includes path to the 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 (required for Wayland/Weston), add the following flags to the QEMU CLI:

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

Do not copy the -nographic flag at the end of the QEMU CLI below.

Attention

qemu-system-riscv64 does not currently support connecting to a PCIe host for graphics support

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

Hint

To access QEMU via SSH, append 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

Tip

You can register your device following the steps from Registering Your Device.