Running U-Boot & Linux Kernel in QEMU

Donotalo
20.6K views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

Pre-requisites

The build system of Linux kernel for RISC-V requires ARCH environment variable to be set to riscv. Let's set it first. From the root working directory, run the following commands:

echo "export ARCH=riscv" >> tech.io-env.sh
source tech.io-env.sh

Build Linux Kernel

Let's download and build Linux kernel from source code. Linux kernel v6.2 will be used for this tutorial. Run the following from the root working directory:

# Download Linux kernel source code
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

# Checkout appropriate version
cd linux
git checkout v6.2

Linux kernel will be built for RISC-V architecture. The default configurations for several targets can be obtained by the command below:

make help | grep defconfig --color=always

The default configutation, defconfig, is good enough so let's build it:

# Generate .config file
make defconfig

make -j$(nproc)

Did it Compile for RISC-V?

Search the .config file for the presence of RISC-V:

grep --color=always -ni 'riscv' .config
  • n = Mention line number
  • i = Ignore case
  • 'riscv' = Pattern to search for
  • .config = Name of the file to search

Observe that the RISC-V configuration option is enabled:

CONFIG_RISCV=y

This happens because of the environment variable ARCH is set to riscv. It is used when the .config file was generated. The details can be found by opening the Makefile:

editor ./Makefile

and searching for ARCH and CROSS_COMPILE.

Output Files

List the output files:

ls arch/riscv/boot -lSh
  • l = List details
  • S = Sort by file size in descending order
  • h = Print the sizes in easily readable format (using K/M/G for Kilo/Mega/Giga when appropriate)

The files Image and Image.gz are the build files. Image.gz is the compressed form of Image.

Open Source Your Knowledge: become a Contributor and help others learn. Create New Content