From 6b0f6ddfb72be6d04302e7ee15637dead0980bff Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Fri, 13 Aug 2021 21:07:40 +0200 Subject: [PATCH] feat added init function --- include/myke/util/init.h | 20 ++++++++++++++++++++ kernel/kernel.c | 4 ++++ kernel/util/init.c | 18 ++++++++++++++++++ kernel/vfs/tmpfs.c | 13 +++++++++++++ linker.ld | 4 ++++ 5 files changed, 59 insertions(+) create mode 100644 include/myke/util/init.h create mode 100644 kernel/util/init.c create mode 100644 kernel/vfs/tmpfs.c diff --git a/include/myke/util/init.h b/include/myke/util/init.h new file mode 100644 index 0000000..a6ebb64 --- /dev/null +++ b/include/myke/util/init.h @@ -0,0 +1,20 @@ +// +// Created by rick on 13-08-21. +// + +#ifndef NEW_KERNEL_INIT_H +#define NEW_KERNEL_INIT_H + +#include +#include + +struct init { + const char *name; + void (*init)(); +}; + +#define INIT_FUNCTION(order) GENERIC_DRIVER(init, order) + +void init_execute_all(); + +#endif //NEW_KERNEL_INIT_H diff --git a/kernel/kernel.c b/kernel/kernel.c index c13acd8..3197cfe 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -19,6 +19,7 @@ #include #include #include +#include #include const int version_major = 0, @@ -78,6 +79,9 @@ void att_noreturn att_used kmain(multiboot_info_t *multiboot_info, uint32_t mb_n printf("Booted successfully v%d.%d.%d\n", version_major, version_minor, version_patch); + // initializing modules + init_execute_all(); + // initialize tasking task_init(); kprint_start_task(); diff --git a/kernel/util/init.c b/kernel/util/init.c new file mode 100644 index 0000000..a779088 --- /dev/null +++ b/kernel/util/init.c @@ -0,0 +1,18 @@ +// +// Created by rick on 13-08-21. +// + +#include +#include + +extern struct init __start_init[]; +extern struct init __stop_init[]; +#define NUM_DRIVERS ((size_t)(__stop_init - __start_init)) +#define DRIVER(i) ((__start_init) + (i)) + +void init_execute_all() { + for (size_t i = 0; i < NUM_DRIVERS; ++i) { + printf("init %s\n", DRIVER(i)->name); + DRIVER(i)->init(); + } +} \ No newline at end of file diff --git a/kernel/vfs/tmpfs.c b/kernel/vfs/tmpfs.c new file mode 100644 index 0000000..e46746f --- /dev/null +++ b/kernel/vfs/tmpfs.c @@ -0,0 +1,13 @@ +// +// Created by rick on 13-08-21. +// + +#include + +void tmpfs_init() { +} + +INIT_FUNCTION(100) = { + .name = "tmpfs", + .init = tmpfs_init, +}; diff --git a/linker.ld b/linker.ld index c8a9eca..386ea79 100644 --- a/linker.ld +++ b/linker.ld @@ -31,6 +31,10 @@ SECTIONS { *(.data) . = ALIGN(16); + __start_init = .; + *(SORT(.init.*)) + __stop_init = .; + . = ALIGN(16); __start_pci_driver = .; *(SORT(.pci_driver.*)) __stop_pci_driver = .;