Move to BSD-ish source tree design

This commit is contained in:
Mark 2019-09-23 11:36:15 +03:00
parent f6c29e3414
commit 47df8cc7ce
46 changed files with 119 additions and 190 deletions

View File

@ -7,11 +7,12 @@ ifeq ($(ARCH),amd64)
CFLAGS+=-DARCH_AMD64
endif
export S=$(abspath src)
export O?=$(abspath build)
include conf/make/none.mk
include conf/make/$(ARCH).mk
# Include base system
include sys/conf.mk
# Arch details
include sys/$(ARCH)/conf.mk
all: mkdirs $(TARGETS)
@ -21,6 +22,3 @@ clean:
mkdirs:
@mkdir -p $(O) $(DIRS)
doc:
@make -sC doc all

View File

@ -1,115 +0,0 @@
include conf/make/amd64_compiler.mk
all:
### Kernel build
DEFINES+=-DARCH_AMD64
OBJS+=$(O)/arch/amd64/kernel.o \
$(O)/arch/amd64/mm/pool.o \
$(O)/arch/amd64/mm/mm.o \
$(O)/arch/amd64/hw/rs232.o \
$(O)/arch/amd64/hw/gdt.o \
$(O)/arch/amd64/hw/gdt_s.o \
$(O)/arch/amd64/hw/idt.o \
$(O)/arch/amd64/hw/ints.o \
$(O)/arch/amd64/hw/exc.o \
$(O)/arch/amd64/hw/regs.o \
$(O)/arch/amd64/hw/irq0.o \
$(O)/arch/amd64/hw/pic8259.o \
$(O)/arch/amd64/hw/irqs.o \
$(O)/arch/amd64/mm/map.o \
$(O)/arch/amd64/hw/timer.o \
$(O)/arch/amd64/acpi/tables.o \
$(O)/arch/amd64/acpi/hpet.o \
$(O)/arch/amd64/mm/phys.o \
$(O)/arch/amd64/mm/heap.o \
$(O)/arch/amd64/mm/vmalloc.o \
$(O)/arch/amd64/sys/thread.o \
$(O)/arch/amd64/sys/syscall.o \
$(O)/arch/amd64/sys/syscall_s.o \
$(O)/arch/amd64/sys/kidle.o
kernel_OBJS=$(O)/arch/amd64/entry.o \
$(OBJS)
kernel_LINKER=$(S)/arch/amd64/link.ld
kernel_LDFLAGS=-nostdlib \
-fPIE \
-fno-plt \
-fno-pic \
-static \
-Wl,--build-id=none \
-z max-page-size=0x1000 \
-T$(kernel_LINKER)
kernel_CFLAGS=-ffreestanding \
-I. \
$(DEFINES) \
$(CFLAGS) \
-fPIE \
-fno-plt \
-fno-pic \
-static \
-fno-asynchronous-unwind-tables \
-mcmodel=large \
-mno-red-zone \
-mno-mmx \
-mno-sse \
-mno-sse2 \
-z max-page-size=0x1000
DIRS+=$(O)/arch/amd64/mm \
$(O)/arch/amd64/hw \
$(O)/arch/amd64/acpi \
$(O)/arch/amd64/sys
# add .inc includes for asm
HEADERS+=$(shell find $(S) -name "*.inc")
$(O)/kernel.elf: $(kernel_OBJS) $(kernel_LINKER)
@printf " LD\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_LDFLAGS) -o $@ $(kernel_OBJS)
$(O)/%.o: $(S)/%.S $(HEADERS)
@printf " AS\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_CFLAGS) -c -o $@ $<
$(O)/%.o: $(S)/%.c $(HEADERS)
@printf " CC\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_CFLAGS) -c -o $@ $<
### Kernel loader build
TARGETS+=$(O)/loader.elf $(O)/kernel.elf
DIRS+=$(O)/arch/amd64/loader
loader_OBJS+=$(O)/arch/amd64/loader/boot.o \
$(O)/arch/amd64/loader/loader.o \
$(O)/arch/amd64/loader/util.o
loader_LINKER=$(S)/arch/amd64/loader/link.ld
loader_CFLAGS=-ffreestanding \
-nostdlib \
-I. \
-Iinclude \
-Wall \
-Wextra \
-Wpedantic \
-Wno-unused-argument \
-Werror \
-Wno-language-extension-token
loader_LDFLAGS=-nostdlib -T$(loader_LINKER)
$(O)/loader.elf: $(loader_OBJS) $(loader_LINKER)
@printf " LD\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_LDFLAGS) -o $@ $(loader_OBJS)
$(O)/arch/amd64/loader/%.o: $(S)/arch/amd64/loader/%.S $(HEADERS)
@printf " AS\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_CFLAGS) -c -o $@ $<
$(O)/arch/amd64/loader/%.o: $(S)/arch/amd64/loader/%.c $(HEADERS)
@printf " CC\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_CFLAGS) -c -o $@ $<
### Debugging and emulation
QEMU_BIN?=qemu-system-x86_64
QEMU_OPTS?=-nographic \
-serial mon:stdio \
-m 512
qemu: all
@$(QEMU_BIN) \
-kernel $(O)/loader.elf \
-initrd $(O)/kernel.elf $(QEMU_OPTS)

View File

@ -1,11 +0,0 @@
PROJECT_NAME = "Yggdrasil Kernel"
INPUT = $(S)
RECURSIVE = YES
EXTRACT_STATIC = YES
EXTRACT_PRIVATE = YES
EXTRACT_ALL = YES
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
ENABLE_PREPROCESSING = YES
HAVE_DOT = NO
SORT_MEMBER_DOCS = NO

View File

@ -1,2 +0,0 @@
all:
S=.. doxygen Doxyfile >/dev/null

View File

@ -1,56 +0,0 @@
AMD64 Memory Docs
=================
Physical memory
---------------
Static:
$MEM_ZERO $MEM_END_IMAGE
0x0000'0000'0000'0000 - 0x0000'0000'0040'0000 | Bootloader and kernel load address
Bootloader is at 0x100000
Kernel is loaded by the bootloader at 0x200000, some modules may reside below
Configurable:
$MEM_END_POOL [align_up(4K)]
$MEM_END_IMAGE - $MEM_END_IMAGE + MM_POOL_SIZE | Paging structure (dir/pml4/tab/etc) pool
Consists of 4K pages, allowing to allocate up to (MM_POOL_SIZE / 4096) - (MM_POOL_SIZE / 4096 / 8)
entries.
$MEM_END_HEAP
$MEM_END_POOL - $MEM_END_POOL + MM_KERNEL_HEAP_SIZE | Kernel base heap
The first heap of the kernel, possibly then extended by any of the pages available
$MEM_END
$MEM_END_HEAP - 0xFFFF'FFFF'FFFF'FFFF | The rest of the physical memory,
Available for allocation
Dynamic:
* Kernel heap extensions
* Program images and heaps
Virtual mappings
----------------
1. Kernel space
,,,,,,,,,,,,,,,
Static:
0xFFFF'FF00'0000'0000 - 0xFFFF'FF80'0000'0000 | Upper mapping of 0 address (512GiB)
V | for easier kernel access to its
0x0000'0000'0000'0000 - 0x0000'0080'0000'0000 | allocated structures.
Additionally, after loading the kernel, the bootloader jumps to 0xFFFF'...., which is actually
the kernel entry point in higher address space.
0x0000'7FFF'FFFF'F000 - 0x0000'8000'0000'0000
V
HPET
2. User space
,,,,,,,,,,,,,
TBD

115
sys/amd64/conf.mk Normal file
View File

@ -0,0 +1,115 @@
include sys/amd64/compiler.mk
all:
### Kernel build
DEFINES+=-DARCH_AMD64
OBJS+=$(O)/sys/amd64/kernel.o \
$(O)/sys/amd64/mm/pool.o \
$(O)/sys/amd64/mm/mm.o \
$(O)/sys/amd64/hw/rs232.o \
$(O)/sys/amd64/hw/gdt.o \
$(O)/sys/amd64/hw/gdt_s.o \
$(O)/sys/amd64/hw/idt.o \
$(O)/sys/amd64/hw/ints.o \
$(O)/sys/amd64/hw/exc.o \
$(O)/sys/amd64/hw/regs.o \
$(O)/sys/amd64/hw/irq0.o \
$(O)/sys/amd64/hw/pic8259.o \
$(O)/sys/amd64/hw/irqs.o \
$(O)/sys/amd64/mm/map.o \
$(O)/sys/amd64/hw/timer.o \
$(O)/sys/amd64/acpi/tables.o \
$(O)/sys/amd64/acpi/hpet.o \
$(O)/sys/amd64/mm/phys.o \
$(O)/sys/amd64/mm/heap.o \
$(O)/sys/amd64/mm/vmalloc.o \
$(O)/sys/amd64/sys/thread.o \
$(O)/sys/amd64/sys/syscall.o \
$(O)/sys/amd64/sys/syscall_s.o \
$(O)/sys/amd64/sys/kidle.o
kernel_OBJS=$(O)/sys/amd64/entry.o \
$(OBJS)
kernel_LINKER=sys/amd64/link.ld
kernel_LDFLAGS=-nostdlib \
-fPIE \
-fno-plt \
-fno-pic \
-static \
-Wl,--build-id=none \
-z max-page-size=0x1000 \
-T$(kernel_LINKER)
kernel_CFLAGS=-ffreestanding \
-I. \
$(DEFINES) \
$(CFLAGS) \
-fPIE \
-fno-plt \
-fno-pic \
-static \
-fno-asynchronous-unwind-tables \
-mcmodel=large \
-mno-red-zone \
-mno-mmx \
-mno-sse \
-mno-sse2 \
-z max-page-size=0x1000
DIRS+=$(O)/sys/amd64/mm \
$(O)/sys/amd64/hw \
$(O)/sys/amd64/acpi \
$(O)/sys/amd64/sys
# add .inc includes for asm
HEADERS+=$(shell find include -name "*.inc")
$(O)/sys/amd64/kernel.elf: $(kernel_OBJS) $(kernel_LINKER)
@printf " LD\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_LDFLAGS) -o $@ $(kernel_OBJS)
$(O)/sys/%.o: sys/%.S $(HEADERS)
@printf " AS\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_CFLAGS) -c -o $@ $<
$(O)/sys/%.o: sys/%.c $(HEADERS)
@printf " CC\t%s\n" $(@:$(O)/%=%)
@$(CC64) $(kernel_CFLAGS) -c -o $@ $<
### Kernel loader build
TARGETS+=$(O)/sys/amd64/loader.elf $(O)/sys/amd64/kernel.elf
DIRS+=$(O)/sys/amd64/loader
loader_OBJS+=$(O)/sys/amd64/loader/boot.o \
$(O)/sys/amd64/loader/loader.o \
$(O)/sys/amd64/loader/util.o
loader_LINKER=sys/amd64/loader/link.ld
loader_CFLAGS=-ffreestanding \
-nostdlib \
-I. \
-Iinclude \
-Wall \
-Wextra \
-Wpedantic \
-Wno-unused-argument \
-Werror \
-Wno-language-extension-token
loader_LDFLAGS=-nostdlib -T$(loader_LINKER)
$(O)/sys/amd64/loader.elf: $(loader_OBJS) $(loader_LINKER)
@printf " LD\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_LDFLAGS) -o $@ $(loader_OBJS)
$(O)/sys/amd64/loader/%.o: sys/amd64/loader/%.S $(HEADERS)
@printf " AS\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_CFLAGS) -c -o $@ $<
$(O)/sys/amd64/loader/%.o: sys/amd64/loader/%.c $(HEADERS)
@printf " CC\t%s\n" $(@:$(O)/%=%)
@$(CC86) $(loader_CFLAGS) -c -o $@ $<
### Debugging and emulation
QEMU_BIN?=qemu-system-x86_64
QEMU_OPTS?=-nographic \
-serial mon:stdio \
-m 512
qemu: all
@$(QEMU_BIN) \
-kernel $(O)/sys/amd64/loader.elf \
-initrd $(O)/sys/amd64/kernel.elf $(QEMU_OPTS)