From b1322ac720b4a04175dae0e60e627e81e19f1cb9 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 21 Feb 2021 18:11:26 +0200 Subject: Kconfig --- .config | 30 ++++++++++++++++++++++++++++++ .gitignore | 3 +++ Kconfig | 9 +++++++++ drivers/Kconfig | 42 ++++++++++++++++++++++++++++++++++++++++++ drivers/makefile | 18 ++++++++++++++++++ makefile | 11 ++++++----- src/kernel.cc | 7 +++++-- 7 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 .config create mode 100644 Kconfig create mode 100644 drivers/Kconfig diff --git a/.config b/.config new file mode 100644 index 0000000..1cfccc9 --- /dev/null +++ b/.config @@ -0,0 +1,30 @@ + +# +# Build +# +CONFIG_EXTRA_CXX_FLAGS="" +CONFIG_OBJ_DIR="build" +# end of Build + +# +# Drivers +# + +# +# Video +# +CONFIG_video0_enable=y +CONFIG_video0_driver_cga=y +# CONFIG_video0_driver_vga is not set +CONFIG_VIDEO0_CLASS="CGA" +CONFIG_VIDEO0_CONSOLE=y +# end of Video + +# +# Serial ports +# +CONFIG_serial0_enable=y +CONFIG_SERIAL0_CLASS="SerialPort" +CONFIG_SERIAL0_CONSOLE=y +# end of Serial ports +# end of Drivers diff --git a/.gitignore b/.gitignore index bd048b4..5ef19a0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ glitch.iso build/ isodir/ +drivers/hardware.h +.config.old + *.tar* diff --git a/Kconfig b/Kconfig new file mode 100644 index 0000000..9b05045 --- /dev/null +++ b/Kconfig @@ -0,0 +1,9 @@ +menu "Build" + config EXTRA_CXX_FLAGS + string "Additional cxx flags" + config OBJ_DIR + string "Build location" + default "build" +endmenu + +source 'drivers/Kconfig' diff --git a/drivers/Kconfig b/drivers/Kconfig new file mode 100644 index 0000000..5f33772 --- /dev/null +++ b/drivers/Kconfig @@ -0,0 +1,42 @@ +menu "Drivers" + + menu "Video" + config video0_enable + bool "Enable video0" + default y + + choice video0_driver + prompt "video0 driver" + depends on video0_enable + config video0_driver_cga + bool "CGA" + config video0_driver_vga + bool "VGA" + endchoice + + config VIDEO0_CLASS + string "video0 class" + default "CGA" if video0_driver_cga + default "VGA" if video0_driver_vga + depends on video0_enable + config VIDEO0_CONSOLE + bool "use video0 for debug output" + default y + depends on video0_enable + endmenu + + menu "Serial ports" + config serial0_enable + bool "Enable serial0" + default y + + config SERIAL0_CLASS + string "serial0 class" + default "SerialPort" + depends on serial0_enable + config SERIAL0_CONSOLE + bool "Use serial0 for debug output" + default y + depends on serial0_enable + endmenu +endmenu diff --git a/drivers/makefile b/drivers/makefile index 0d9071a..ad255c4 100644 --- a/drivers/makefile +++ b/drivers/makefile @@ -1,2 +1,20 @@ CXX_OBJ += drivers/cga.o \ drivers/serial.o + +HWH := drivers/hardware.h +autogen := $(autogen) $(HWH) + +$(HWH): .config + @echo " GEN $@" + @echo \/\* autogenerated hardware description \*\/ > $(HWH) + @echo \#pragma once >> $(HWH) +ifdef CONFIG_video0_enable + @echo \#define HAS_VIDEO0 >> $(HWH) + @echo $(CONFIG_VIDEO0_CLASS) video0\; >> $(HWH) + @echo constexpr bool video0_console = true\; >> $(HWH) +endif +ifdef CONFIG_serial0_enable + @echo \#define HAS_SERIAL0 >> $(HWH) + @echo $(CONFIG_SERIAL0_CLASS) serial0\; >> $(HWH) + @echo constexpr bool serial0_console = true\; >> $(HWH) +endif diff --git a/makefile b/makefile index 2d9460d..bbd42a4 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,9 @@ include toolchain.makefile -OBJ_DIR := build +include .config +OBJ_DIR != echo $(CONFIG_OBJ_DIR) + +.PHONY: default clean test check-grub run +default: glitch.elf include libk/makefile include src/makefile @@ -12,10 +16,7 @@ CXX_TEST_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_TEST_OBJ)) CXX_INCLUDE := $(addprefix -I, $(CXX_INCLUDE)) CXX_SYSTEM_INCLUDE := $(addprefix -isystem, $(CXX_SYSTEM_INCLUDE)) -.PHONY: default clean test check-grub run -default: glitch.elf - -glitch.elf: $(AS_OBJ) $(CXX_OBJ) +glitch.elf: $(autogen) $(AS_OBJ) $(CXX_OBJ) @echo " LD $@" @$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) diff --git a/src/kernel.cc b/src/kernel.cc index 37773e1..ff95d16 100644 --- a/src/kernel.cc +++ b/src/kernel.cc @@ -15,8 +15,7 @@ #include "idt.h" #include "serial.h" -SerialPort serial0; -CGA video0; +#include "hardware.h" typedef void (*constructor)(); @@ -32,9 +31,13 @@ void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr); void dump_gdt(); void kernel_main([[maybe_unused]] uint32_t mb_magic, [[maybe_unused]] uint32_t mb_addr) { +#ifdef HAS_SERIAL0 if (serial0.self_check()) Console::set(&serial0); +#endif +#ifdef HAS_VIDEO0 Console::set(&video0); +#endif printk("Hello, kernel World!\n"); -- cgit v1.2.1