[feat] BootLoader -> Kernel

This commit is contained in:
2026-05-29 19:25:56 +08:00
Unverified
parent c31fb52ea3
commit 2496349657
7 changed files with 302 additions and 37 deletions
+31 -8
View File
@@ -3,15 +3,22 @@ CXXFLAGS = -Iinclude -Iefi/inc -ffreestanding -fno-stack-protector -fno-stack-ch
LDFLAGS = -shared -Bsymbolic -Tefi/gnuefi/elf_x86_64_efi.lds
LDLIBS = --no-undefined
KERNEL_CXXFLAGS = $(CXXFLAGS) -DGNU_EFI_USE_MS_ABI -fno-pic
KERNEL_LDFLAGS = -Tkernel/kernel.ld -no-pie -z max-page-size=0x1000
EFI_CFLAGS = -Iefi/inc -Iefi/inc/x86_64 -Iefi/inc/protocol \
-ffreestanding -fno-stack-protector -fno-stack-check \
-fshort-wchar -mno-red-zone -maccumulate-outgoing-args \
-fPIC -fno-strict-aliasing -Wall -Wextra -Wstrict-prototypes \
-DGNU_EFI_USE_MS_ABI -DCONFIG_x86_64 -std=c11 -O2 -g
SRC_C = $(wildcard *.c)
SRC_CPP = $(wildcard */*.cpp) $(wildcard */*/*.cpp)
OBJ = $(SRC_C:%.c=build/%.o) $(SRC_CPP:%.cpp=build/%.o)
BOOT_OBJ = build/boot.o
KERNEL_CPP = kernel/entry.cpp kernel/main.cpp kernel/serial.cpp \
kernel/memory/heap.cpp kernel/memory/pmm.cpp \
graphics/context.cpp graphics/draw.cpp \
fonts/pixel_font.cpp
KERNEL_OBJ = $(KERNEL_CPP:%.cpp=build/%.o)
EFI_TOP_C = $(wildcard efi/lib/*.c)
EFI_TOP_S = $(wildcard efi/lib/*.S)
@@ -26,10 +33,13 @@ EFI_X86_OBJ = $(EFI_X86_C:efi/lib/x86_64/%.c=build/efi/lib/x86_64/%.o) $(EFI_X86
EFI_RT_OBJ = $(EFI_RT_C:efi/lib/runtime/%.c=build/efi/lib/runtime/%.o)
EFI_OBJ = $(EFI_CRT0_OBJ) $(EFI_RELOC_OBJ) $(EFI_TOP_OBJ) $(EFI_X86_OBJ) $(EFI_RT_OBJ)
all: _bd $(EFI_OBJ) $(OBJ)
@echo "* Linking EFI..."
@ld $(LDFLAGS) $(EFI_OBJ) $(OBJ) -o build/boot.so $(LDLIBS)
all: _bd $(EFI_OBJ) $(BOOT_OBJ) $(KERNEL_OBJ)
@echo "* Linking bootloader..."
@ld $(LDFLAGS) $(EFI_OBJ) $(BOOT_OBJ) -o build/boot.so $(LDLIBS)
@objcopy -j .text -j .sdata -j .data -j .rodata -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .reloc --output-target efi-app-x86_64 --subsystem=10 build/boot.so build/BOOTX64.EFI
@echo "* Linking Kernel.elf..."
@ld $(KERNEL_LDFLAGS) $(KERNEL_OBJ) -o build/Kernel.elf
@echo "Done."
_bd:
@mkdir -p build/graphics build/kernel build/fonts build/kernel/memory \
@@ -67,13 +77,26 @@ build/%.o: %.c
@echo "Compile C $<"
@gcc $(CFLAGS) -c $< -o $@
build/%.o: %.cpp
build/kernel/%.o: kernel/%.cpp | _bd
@echo "Compile CPP $<"
@g++ $(CXXFLAGS) -c $< -o $@
@g++ $(KERNEL_CXXFLAGS) -c $< -o $@
build/kernel/memory/%.o: kernel/memory/%.cpp | _bd
@echo "Compile CPP $<"
@g++ $(KERNEL_CXXFLAGS) -c $< -o $@
build/graphics/%.o: graphics/%.cpp | _bd
@echo "Compile CPP $<"
@g++ $(KERNEL_CXXFLAGS) -c $< -o $@
build/fonts/%.o: fonts/%.cpp | _bd
@echo "Compile CPP $<"
@g++ $(KERNEL_CXXFLAGS) -c $< -o $@
vdir: all
@mkdir -p vdir/EFI/BOOT
@cp build/BOOTX64.EFI vdir/EFI/BOOT
@cp build/Kernel.elf vdir/
run: vdir
@echo "Launching QEMU"