Skip to content

Hidotu-Labs/Krexo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Krexo v1.2.3

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.

Major Changes in v1.2.x

  • 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

Features

  • 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.conf from the boot partition.
  • Memory Safety: No-flicker UI using partial redraws (dirty stripes).

Roadmap

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.

Directory Structure

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

Build

Dependencies

  • Toolchain: nasm, x86_64-elf-gcc, clang, lld-link
  • Emulation: qemu-system-x86_64, OVMF

Execution

BIOS:

make clean && make run_bios

UEFI:

make clean && make run_uefi

Kernel Specification

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

About

Minimal bootloader

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors