Jump toSuggest an edit

Understanding Elastic Metal RV1 usage

Reviewed on 15 March 2024Published on 15 March 2024

Boot process

EM-RV1 servers do not support standard UEFI or BIOS boot, therefore the boot process might slightly differ from other servers. At boot, the bootloader expects the eMMC to be partitioned as GPT, and will look for a boot.itb file in the first or second partition. The partition that contains this boot file must be formatted as FAT32.

This boot.itb file is in fact a FIT Image that must contain the following sections:

  • kernel: A Linux kernel image.
  • fdt: A device tree.
  • opensbi: The SBI as defined by RISC-V SBI specification.
  • env: A text-based environment file that defines the following keys:
    • usr_bootargs: Command-line arguments to pass to the kernel.
    • usr_has_ramdisk: Set to 1 if we should load the ramdisk from the FIT image.
  • ramdisk (optional): A ramdisk image.

The following section will explain in details how to create your own boot FIT image.

Boot a custom kernel

In this section, you will build a boot image based off a close-to-mainline Linux kernel.


Mainline Linux is not fully compatible with EM-RV1 servers yet.

Before you start

To complete the actions presented below, you must have:

  • Installed an EM-RV1 server with Ubuntu
  • Proficient knowledge of Linux systems
  • A few hours of availability to build a Linux kernel
  1. Connect to your EM-RV1 server using SSH.
  2. Install the build dependencies.
    sudo apt update
    sudo apt install -y \
    autoconf bc bison dwarves flex gawk git make \
    libelf-dev libssl-dev \
    u-boot-tools device-tree-compiler
  3. Clone the projects to build.
    git clone --depth=1 linux
    git clone opensbi
    git clone
  4. Build the Linux kernel.
    cd linux/
    make revyos_defconfig
    # This can take several hours.
    make -j
    sudo make modules_install
    cd ..
  5. Build OpenSBI.
    cd opensbi/
    make PLATFORM=generic -j
    cd ..
  6. Build and install the FIT image.
    cd em-rv1/fit/
    # Build the device tree
    cpp \
    -nostdinc \
    -I ../linux/arch/riscv/boot/dts/thead/ \
    -I ../linux/include/ \
    -undef \
    -x assembler-with-cpp \
    em-rv1-c4m16s128-a.dts \
    | dtc -o em-rv1-c4m16s128-a.dtb
    # Build the FIT image
    sudo mv /boot/boot.itb /boot/boot.itb.bak
    sudo mkimage -f em-rv1-c4m16s128-a-boot.its /boot/boot.itb
    cd -
  7. Reboot the server to load the new kernel.
Docs APIScaleway consoleDedibox consoleScaleway LearningScaleway.comPricingBlogCarreer
© 2023-2024 – Scaleway