aboutsummaryrefslogtreecommitdiff
path: root/scripts/makefile
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-05 19:38:11 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-05 19:38:11 +0300
commite09edb5d54e39bd9509a1dc450df5ab320759f97 (patch)
tree78e050b0db87df3a3ddfbb6570d44513ac34e02a /scripts/makefile
parent98f21e694a6b0964d6d08196cb6bfbc1c2ae2ff4 (diff)
downloadkmi-e09edb5d54e39bd9509a1dc450df5ab320759f97.tar.gz
kmi-e09edb5d54e39bd9509a1dc450df5ab320759f97.zip
allow booting with Qemu's -kernel flag directly
+ Took some fairly significant changes, for one the kernel is no longer relocated at the start of a boot, instead it sits wherever the user decides the kernel should sit. Similarly, the initial kernel stack and page table are stored within the binary, slightly bloating the size but making it much safer to boot since there's really no chance of us overwriting the fdt or initrd in memory.
Diffstat (limited to 'scripts/makefile')
-rw-r--r--scripts/makefile29
1 files changed, 5 insertions, 24 deletions
diff --git a/scripts/makefile b/scripts/makefile
index 8c0b5a4..26b33ad 100644
--- a/scripts/makefile
+++ b/scripts/makefile
@@ -30,7 +30,6 @@ LDFLAGS != [ "$(LLVM)" = "0" ] \
BUILD = build
ARCH_KERN_BUILD = $(BUILD)/kernel/arch/$(ARCH)
-ARCH_INIT_BUILD = $(BUILD)/init/arch/$(ARCH)
ARCH_SOURCE = arch/$(ARCH)
all: kmi.bin
@@ -80,47 +79,29 @@ KERN_SIZE = wc -c kernel.bin | awk '{print $$1}'
KERN_INFO = sed "s/<KERNEL_SIZE>/$$($(KERN_SIZE))/"
KERNEL_LINK = arch/$(ARCH)/conf/kernel-link.S
-INIT_LINK = arch/$(ARCH)/conf/init-link.S
KERNEL_LD = build/kernel-link.ld
-INIT_LD = build/init-link.ld
UBSAN ?= 0
KERN_FLAGS != [ "$(UBSAN)" != "0" ] \
&& echo -fsanitize=undefined \
|| echo
-INIT_FLAGS := -fpic
-
COMPILE_KERNEL = $(COMPILE) $(KERN_FLAGS)
COMPILE_INIT = $(COMPILE) $(INIT_FLAGS)
-include deps.mk
-include $(KERNEL_LD).d
-$(INIT_LD): kernel.bin
-$(INIT_LD): $(INIT_LINK)
- $(GENLINK) $(INIT_LINK) | $(STRIPLINK) | $(KERN_INFO) > $(INIT_LD)
-
--include $(KERNEL_LD).d
$(KERNEL_LD): $(KERNEL_LINK)
$(GENLINK) $(KERNEL_LINK) | $(STRIPLINK) > $(KERNEL_LD)
-init.elf: $(INIT_OBJS) $(INIT_LD)
- $(GENELF) $(INIT_FLAGS) -T $(INIT_LD) $(INIT_OBJS) -o init.elf $(LINK_FLAGS)
-
-kernel.elf: $(KERNEL_OBJS) $(KERNEL_LD)
- $(GENELF) $(KERNEL_FLAGS) -T $(KERNEL_LD) $(KERNEL_OBJS) -o kernel.elf $(LINK_FLAGS)
-
-init.bin: init.elf
- $(OBJCOPY) $(OBJCOPY_FLAGS) init.elf init.bin
-
-kernel.bin: kernel.elf
- $(OBJCOPY) $(OBJCOPY_FLAGS) kernel.elf kernel.bin
+kmi.elf: $(KERNEL_OBJS) $(KERNEL_LD)
+ $(GENELF) $(KERNEL_FLAGS) -T $(KERNEL_LD) $(KERNEL_OBJS) -o kmi.elf $(LINK_FLAGS)
-kmi.bin: init.bin kernel.bin
- cat init.bin kernel.bin > kmi.bin
+kmi.bin: kmi.elf
+ $(OBJCOPY) $(OBJCOPY_FLAGS) kmi.elf kmi.bin
# might lint some common things twice
.PHONY:
-lint: $(INIT_LINTS) $(KERNEL_LINTS)
+lint: $(KERNEL_LINTS)