Move to BSD-ish source tree design
This commit is contained in:
parent
f6c29e3414
commit
47df8cc7ce
10
Makefile
10
Makefile
@ -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
|
||||
|
@ -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)
|
11
doc/Doxyfile
11
doc/Doxyfile
@ -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
|
@ -1,2 +0,0 @@
|
||||
all:
|
||||
S=.. doxygen Doxyfile >/dev/null
|
@ -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
115
sys/amd64/conf.mk
Normal 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)
|
Loading…
x
Reference in New Issue
Block a user