The LinuxBoot project allows you to replace your server's firmware with Linux.
Supported server mainboards
- qemu emulated Q35 systems
- Intel S2600WF
- Dell R630
- Winterfell Open Compute node (works well)
- Leopard Open Compute node (works well)
- Tioga Pass Open Compute node (works well)
- Monolake Open Compute node (not tested)
You need to provide:
- The vendor UEFI firmware for the mainboard
- A Linux kernel built with the
initrd.cpiofile with enough tools to
kexecthe rest of the system.
For everything except qemu, you'll need to copy the vendor ROM dump
boards/$(BOARD)/$(BOARD).rom. Due to copyright restrictions, we can't
bundle the ROM images in this tree and you must supply your own ROM from
your own machine. qemu can built its own ROM from the
so this is not necessary.
Configure the build system:
cp path/to/s2600wf.rom boards/s2600wf/ make \ BOARD=s2600wf \ KERNEL=../path/to/bzImage \ INITRD=../path/to/initrd.cpio.xz \ config make
This will write the values into the
.config file so that you don't
need to specify them each time. If all goes well you will end up with
a file in
build/$(BOARD)/linuxboot.rom that can be flashed to your machine.
It will take a while since it also clones the LinuxBoot patched version
tianocore/edk2 UDK2018 branch
and build it.
Emulating with qemu
If you want to experiment with LinuxBoot you can run it under qemu. No ROM file is necessary, although you still need a Heads or NERF runtime kernel/initrd pair. You can launch the emulator by running:
This will use your current terminal as the serial console, which
will likely mess with the settings. After killing qemu by closing
the window you will need to run
stty sane to restore the terminal
settings (echo is likely turned off, so you'll have to type this in
Adding a new mainboard
Makefile.board from one of the other mainboards and edit it to match
your new board's ROM layout. The qemu one is not the best example since it has
to match the complex layout of OVMF; most real mainboards are not this messy.
You'll need to figure out which FVs have to be preserved, how much space can be recovered from the ME region, etc. The per-board makefile needs to set the following variables:
FVS: an ordered list of IFD, firmware volumes and padding
linuxboot-size: the final size of the ROM image in bytes (we should verify this against the real ROM instead)