Krexo is a high-performance x86_64 bootloader for BIOS and UEFI. It uses a request-based protocol to pass system information to the kernel, allowing for a decoupled architecture where the kernel defines its requirements via ELF sections just like limine lol.
- Added DTB and 4-level paging support: With this the kernel can automatically enable paging and dtb with only a request!
- SMP Support: Finished SMP Support
- Dual-Mode Boot: Supports legacy BIOS (VBE) and modern UEFI (GOP) with high-resolution graphics.
- Interactive Menu: Fully configurable boot menu with automatic countdown and custom themes.
- Protocol Support:
- Native Krexo: A request-based interface declarations via ELF sections.
- FAT32 Support: Built-in stack for loading the kernel and
krexo.conffrom the boot partition. - Memory Safety: No-flicker UI using partial redraws (dirty stripes).
Currently We are targetting:
- Multiboot2 Support: Implementation of the Multiboot2 protocol for broader kernel interoperability.
- Linux-Boot: Direct support for loading Linux kernels (bzImage) and initrd.
- Limine-Protocol: Direct support for Limine protocol requests (Framebuffer, Memory Map, HHDM, etc.).
- Advanced Filesystems: Adding read support for EXT4 and ISO9660.
- Security: UEFI Secure Boot support and signature verification.
src/bios/: 16-bit Stage 1 and 32-bit Stage 2 loaders.src/uefi/: 64-bit EFI application.src/common/: Shared logic for filesystems, protocols, and rendering.include/: Common headers for bootloader and kernel.barebones/: Reference kernel implementations.
- Toolchain:
nasm,x86_64-elf-gcc,clang,lld-link - Emulation:
qemu-system-x86_64,OVMF
BIOS:
make clean && make run_biosUEFI:
make clean && make run_uefiThe kernel specifies requirements using structures in the .krexo_requests ELF section (Native) or via Limine tags.
#include <common/requests.h>
__attribute__((section(".krexo_requests")))
volatile krexo_fb_request_t fb_request = {
.header = {
.magic = { KREXO_REQUEST_MAGIC_0, KREXO_REQUEST_MAGIC_1 },
.id = KREXO_FB_REQUEST_ID,
.response = 0
}
};On handover, the response pointer will contain the address of the fulfilled hardware information.