From c5ccb29b58f073e29148f08d82e970c4ea5147c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Wed, 18 Sep 2024 20:30:35 +0200 Subject: [PATCH] Work on repairing multiboot with flat binary kernel --- build.zig | 3 ++- src/boot.s | 11 +++++++++++ src/grub.cfg | 2 +- src/linker.ld | 2 +- src/main.zig | 17 ----------------- 5 files changed, 15 insertions(+), 20 deletions(-) create mode 100644 src/boot.s diff --git a/build.zig b/build.zig index d7549f3..8903f02 100644 --- a/build.zig +++ b/build.zig @@ -28,6 +28,7 @@ pub fn build(b: *std.Build) void { .code_model = .kernel, }); kernel_elf.setLinkerScript(b.path("src/linker.ld")); + kernel_elf.addAssemblyFile(b.path("src/boot.s")); const kernel_elf_artifact = b.addInstallArtifact(kernel_elf, .{}); @@ -44,7 +45,7 @@ pub fn build(b: *std.Build) void { kernel_bin_copy.step.dependOn(&kernel_bin.step); const kernel_step_elf = b.step("elf", "Build the kernel ELF"); - kernel_step_elf.dependOn(&kernel_elf.step); + kernel_step_elf.dependOn(&kernel_elf_artifact.step); const kernel_step_bin = b.step("bin", "Build the kernel BIN (with objcopy)"); kernel_step_bin.dependOn(&kernel_bin_copy.step); diff --git a/src/boot.s b/src/boot.s new file mode 100644 index 0000000..2aa03f5 --- /dev/null +++ b/src/boot.s @@ -0,0 +1,11 @@ +.set ALIGN, 1<<0 +.set MEMINFO, 1<<1 +.set FLAGS, ALIGN +.set MAGIC, 0x1BADB002 +.set CHECKSUM, -(MAGIC + FLAGS) + +.section .multiboot +.align 4 +.long MAGIC +.long FLAGS +.long CHECKSUM diff --git a/src/grub.cfg b/src/grub.cfg index 7904bf7..ef006df 100644 --- a/src/grub.cfg +++ b/src/grub.cfg @@ -1,3 +1,3 @@ menuentry "Zig Bare Bones" { - multiboot /boot/kernel.elf + multiboot /boot/kernel.bin } diff --git a/src/linker.ld b/src/linker.ld index d13c200..bd38da9 100644 --- a/src/linker.ld +++ b/src/linker.ld @@ -11,4 +11,4 @@ SECTIONS { *(COMMON) *(.bss) } -} \ No newline at end of file +} diff --git a/src/main.zig b/src/main.zig index 11f024d..44b6d33 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,22 +1,5 @@ const console = @import("console.zig"); -const ALIGN = 1 << 0; -const MEMINFO = 1 << 1; -const MAGIC = 0x1BADB002; -const FLAGS = ALIGN | MEMINFO; - -const MultibootHeader = packed struct { - magic: i32 = MAGIC, - flags: i32, - checksum: i32, - padding: u32 = 0, -}; - -export var multiboot align(4) linksection(".multiboot") = MultibootHeader{ - .flags = FLAGS, - .checksum = -(MAGIC + FLAGS), -}; - export var stack_bytes: [16 * 1024]u8 align(16) linksection(".bss") = undefined; const stack_bytes_slice = stack_bytes[0..];