Bringing Up Linux on a New Platform: A Minimal RISC-V Emulator
How to bring up the Linux Kernel on a new platform

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.
- 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
- 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/
- 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.