1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 13:47:35 +00:00

Kernel: Use a multiboot header instead of a convoluted two-part bootloader.

The old bootloader was hilariously complicated, requiring a floppy disk with
the kernel on it, and a hard drive with the file system. This patch removes
the floppy disk from the equation and replaces it with a multiboot header.
This means the kernel can now be booted with qemu-system-i386 -kernel kernel
This commit is contained in:
Andreas Kling 2019-04-01 21:43:07 +02:00
parent d5a9f4596b
commit ee4d7c18c8
7 changed files with 81 additions and 293 deletions

View file

@ -1,5 +1,4 @@
KERNEL_OBJS = \
_start.o \
init.o \
kmalloc.o \
StdLib.o \
@ -65,12 +64,10 @@ AK_OBJS = \
../AK/FileSystemPath.o \
../AK/StdLibExtras.o
OBJS = $(KERNEL_OBJS) $(VFS_OBJS) $(AK_OBJS)
CXX_OBJS = $(KERNEL_OBJS) $(VFS_OBJS) $(AK_OBJS)
OBJS = $(CXX_OBJS) Boot/boot.ao
NASM = nasm
KERNEL = kernel
BOOTLOADER = Boot/boot.bin
IMAGE = .floppy-image
ARCH_FLAGS =
STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc
KERNEL_FLAGS =
@ -87,9 +84,10 @@ CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(KERNEL_FLAGS) $(FLA
#CXX = clang $(CLANG_FLAGS)
CXX = i686-elf-g++
LD = i686-elf-ld
AS = i686-elf-as
LDFLAGS = -T linker.ld
all: $(KERNEL) $(IMAGE) kernel.map
all: $(KERNEL) kernel.map
kernel.map: kernel
@echo "MKMAP $@"; sh mkmap.sh
@ -97,20 +95,14 @@ kernel.map: kernel
$(KERNEL): $(OBJS)
@echo "LD $@"; $(LD) $(LDFLAGS) -o $@ -Ttext 0x10000 $(OBJS)
$(IMAGE): $(KERNEL) $(BOOTLOADER)
@echo "CREATE $@"; cat $(BOOTLOADER) $(KERNEL) > .tmp-floppy-image
@dd if=/dev/zero bs=2M count=1 >> .tmp-floppy-image 2> /dev/null
@dd if=.tmp-floppy-image of=.floppy-image bs=1440k count=1 2>/dev/null
@rm -f .tmp-floppy-image
$(BOOTLOADER): Boot/boot.asm
@echo "NASM $<"; $(NASM) -f bin -o $@ $<
.cpp.o:
@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-include $(OBJS:%.o=%.d)
%.ao: %.S
@echo "AS $@"; $(AS) -o $@ $<
-include $(CXX_OBJS:%.o=%.d)
clean:
@echo "CLEAN"; rm -f $(KERNEL) $(OBJS) $(BOOTLOADER) $(IMAGE) *.d
@echo "CLEAN"; rm -f $(KERNEL) $(OBJS) *.d