booting into the kernel

This commit is contained in:
2026-07-01 19:51:06 +01:00
parent 3c8656fb25
commit ca3c3d131c
5 changed files with 342 additions and 22 deletions
+39 -1
View File
@@ -1 +1,39 @@
//! By convention, root.zig is the root source file when making a package.
//! Shared definitions that form the contract between the bootloader
//! (src/efi.zig, built as BOOTX64.efi) and the kernel (src/main.zig).
//!
//! Both binaries import this as the "danos" module, so the handoff layout is
//! defined in exactly one place.
const std = @import("std");
/// Calling convention for the bootloader→kernel jump. Pinned to SysV so it does
/// not depend on each binary's target default: the UEFI bootloader's C
/// convention is Microsoft x64 (first arg in RCX), the freestanding kernel's is
/// SysV (first arg in RDI). Both reference this to agree on where `*BootInfo`
/// is passed.
pub const kernel_abi: std.builtin.CallingConvention = .{ .x86_64_sysv = .{} };
/// Pixel byte order of the linear framebuffer the firmware handed us.
pub const PixelFormat = enum(u32) {
/// Byte 0 = Red, 1 = Green, 2 = Blue, 3 = reserved.
rgbx,
/// Byte 0 = Blue, 1 = Green, 2 = Red, 3 = reserved.
bgrx,
};
/// A linear framebuffer: `width`x`height` pixels, each a 32-bit value, with
/// `pitch` bytes between the start of one row and the next (which may be larger
/// than `width * 4` due to hardware padding).
pub const Framebuffer = extern struct {
base: usize,
width: u32,
height: u32,
pitch: u32,
format: PixelFormat,
};
/// Handoff structure the bootloader fills in and passes to the kernel's
/// `_start` in RDI (the first argument under the SysV AMD64 C ABI).
pub const BootInfo = extern struct {
framebuffer: Framebuffer,
};