Bringing Up Linux on a New Platform: A Minimal RISC-V Emulator

How to bring up the Linux Kernel on a new platform

Bringing Up Linux on a New Platform: A Minimal RISC-V Emulator

WerWolv details the process of getting Linux to boot on a custom platform, using a minimal RISC-V emulator written in C++ as an example. The post covers the essential hardware requirements (CPU with MMU, RAM, timer), compiling a cross-toolchain with crosstool-ng, configuring and building the Linux kernel for RV32IMA, creating a static init program and initramfs, and writing a device tree to describe the emulated hardware. The result is a bootable Linux system in about 2000 lines of code.

Even though Linux is a very complex piece of software, it doesn’t actually have that many requirements to run.
  1. Neywiny

    I've done this for a cortex-m in qemu (meaning I wrote the chip and peripheral emulation code too for the timer, uart, sd controller with dma, and rcc). But I used buildroot. So much easier to keep track of everything and it's very easy to start with (unlike yocto). I recommend taking a look at buildroot.

    You also don't need an MMU to run Linux. Just helps compatibility.

    Good work

  2. csdreamer7

    Excellent post. Your file format RE looks like an additional one to add to the reading queue as well: https://werwolv.net/posts/file_format_reverse_engineering/

  3. elevation

    Great post, so neat to see it running in the browser! One question: why not thin the config a little? USB, SOUND, VGA, etc. are all slowing down the boot but don't have hardware to control.

More from this day

2026-09-07