From aa71f8e70b06444b96ad009c6d5c611b32891396 Mon Sep 17 00:00:00 2001 From: Braiden Vasco Date: Wed, 1 Nov 2017 08:53:27 +0000 Subject: [PATCH] Support both Multiboot 1 and 2 --- arch/Makefile | 2 ++ arch/boot.s | 28 +++++++++++++++++++--------- arch/linker.ld | 3 ++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/arch/Makefile b/arch/Makefile index e9fc0af..5e9bf51 100644 --- a/arch/Makefile +++ b/arch/Makefile @@ -16,6 +16,8 @@ clean: kernel: $(OBJS) $(CC) -T linker.ld -o $@ -ffreestanding -nostdlib -lgcc $(OBJS) + grub-file --is-x86-multiboot $@ + grub-file --is-x86-multiboot2 $@ %.c.o: %.c $(CC) -c $< -o $@ -std=gnu99 -ffreestanding -fno-builtin -fno-stack-protector -Wall -Wextra -I$(I) diff --git a/arch/boot.s b/arch/boot.s index 2194064..3653c63 100644 --- a/arch/boot.s +++ b/arch/boot.s @@ -1,14 +1,24 @@ -.set ALIGN, 1<<0 -.set MEMINFO, 1<<1 -.set FLAGS, ALIGN | MEMINFO -.set MAGIC, 0x1BADB002 -.set CHECKSUM, -(MAGIC + FLAGS) +.set MULTIBOOT_1_MAGIC, 0x1BADB002 +.set MULTIBOOT_1_FLAGS, (1 << 0) | (1 << 1) // Align, meminfo +.set MULTIBOOT_1_CHECKSUM, -(MULTIBOOT_1_MAGIC + MULTIBOOT_1_FLAGS) -.section .multiboot +.set MULTIBOOT_2_MAGIC, 0xE85250D6 +.set MULTIBOOT_2_ARCH, 0 +.set MULTIBOOT_2_LENGTH, 16 +.set MULTIBOOT_2_CHECKSUM, -(MULTIBOOT_2_MAGIC + MULTIBOOT_2_ARCH + MULTIBOOT_2_LENGTH) + +.section .multiboot2 .align 4 -.long MAGIC -.long FLAGS -.long CHECKSUM +.long MULTIBOOT_2_MAGIC +.long MULTIBOOT_2_ARCH +.long MULTIBOOT_2_LENGTH +.long MULTIBOOT_2_CHECKSUM + +.section .multiboot1 +.align 4 +.long MULTIBOOT_1_MAGIC +.long MULTIBOOT_1_FLAGS +.long MULTIBOOT_1_CHECKSUM .section .bss .align 16 diff --git a/arch/linker.ld b/arch/linker.ld index 7569f55..fb05265 100644 --- a/arch/linker.ld +++ b/arch/linker.ld @@ -6,7 +6,8 @@ SECTIONS .text BLOCK(4K) : ALIGN(4K) { - *(.multiboot) + *(.multiboot2) + *(.multiboot1) *(.text) }