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
    └── fw_payload.elf

Booting in QEMU

Important

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 so that you can list the target of the specified factory:

export FIOCTL_FACTORY=<factory>
  1. Make a directory for the artifacts and cd into it:

    mkdir -p lmp-qemu/riscv64
    cd lmp-qemu/riscv64
    
  2. Download the artifacts needed for riscv64. These can be found under the Targets tab for your Factory.

  3. Optional. Create and resize a qcow2 image:

    qemu-img create -f qcow2 -F raw -b lmp-factory-image-qemuriscv64-secureboot.wic qemuarm64-secureboot_device1.qcow2
    qemu-img resize -f qcow2 lmp-factory-image-qemuriscv64.wic.qcow2 8G
    

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

  4. 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
    
  5. 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

Use .qcow2 if you wish to change the QEMU disk size, or if you are looking to emulate multiple devices. Each image converted and subsequently run with QEMU will be recognized as a distinct device. 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

This section shows how to boot QEMU with an OpenGL capable virtual GPU—required for Wayland/Weston. To check the available options for your system, use the -display help flag:

$ qemu-system-aarch64 -display help
Available display backend types:
none
curses
cocoa
dbus

In general, adding the following flags to the QEMU CLI should work:

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

Note

You can also utilize the option -display default. This attempts to use the default display type corresponding to the operating system on which you are running the command.

Note

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

Important

Specifying display options in QEMU does not make console-only images graphical. It just opens a potential graphical output window. Interaction is mainly text-based. The images created with DISTRO=lmp-xwayland or DISTRO=lmp-wayland have graphical interfaces. For further information see: LmP Wayland and LmP XWayland.

If you are following Flashing Your Device and downloading the console image, it will not boot with a graphical interface. See Customizing the Distro to know how to build a new target image. Also, ensure that you download the image with the interface, which is usually prefixed with lmp-factory-image.

Important

Compatibility of the display options may vary, and not all options are supported on every host OS. Refer to the QEMU Documentation for more advanced configurations and options.

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.