From c8347f0d5f380aa0a9e9874321eddcc121f20134 Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Sun, 15 Oct 2023 18:45:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sys.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ include/version.h | 2 +- kernel/fb.cpp | 2 ++ kernel/mod.cpp | 12 +++++++----- kernel/sys.cpp | 31 +------------------------------ 5 files changed, 55 insertions(+), 36 deletions(-) create mode 100644 include/sys.h diff --git a/include/sys.h b/include/sys.h new file mode 100644 index 0000000..a5f279b --- /dev/null +++ b/include/sys.h @@ -0,0 +1,44 @@ +#include + +typedef struct { + void (*fb_printf)(char *str, ...); +} env_t; + +typedef struct { + int reserved; +} framebuffer_t; + +typedef struct { + int reserved; +} sys_info_t; + +typedef struct { + char *name; + void *addr; +} module_func_t; + +typedef struct { + char *name; + char *message; + int err_code; + uint64_t func_count; + module_func_t *func[]; +} module_info_t; + +typedef struct { + int reserved; +} func_t; + +typedef struct { + uint8_t a[4]; + uint8_t b[4]; + uint8_t c[4]; + uint8_t d[4]; +} uid_t; + +typedef struct { + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t second; +} time_t; diff --git a/include/version.h b/include/version.h index ed89816..6763c58 100644 --- a/include/version.h +++ b/include/version.h @@ -1,3 +1,3 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 1 -#define VERSION_BUILD 40 +#define VERSION_BUILD 61 diff --git a/kernel/fb.cpp b/kernel/fb.cpp index d41d741..f9e0af5 100644 --- a/kernel/fb.cpp +++ b/kernel/fb.cpp @@ -48,6 +48,8 @@ void init( ) { bpp = boot_framebuffer->bpp; for (uint64_t i = 0; i < width * height; i++) { fb_addr[i] = background; } + + fb::printf("0x%x %ux%u\n", fb_addr, width, height); } static inline void print_bits(size_t x, size_t y, uint8_t num) { diff --git a/kernel/mod.cpp b/kernel/mod.cpp index 9d6a4ed..a0a5a9b 100644 --- a/kernel/mod.cpp +++ b/kernel/mod.cpp @@ -1,6 +1,7 @@ #include #include #include +#include // Структуры соответствующие ELF заголовкам typedef struct { @@ -86,15 +87,16 @@ void init( ) { module_ptr->mbr_disk_id, module_ptr->tftp_ip, module_ptr->tftp_port); - long long (*module_init)(env_t * env) = (long long (*)(env_t * env)) - elf_entry(module_ptr->address, module_ptr->size); + module_info_t *(*module_init)(env_t * env) = + (module_info_t * (*)(env_t * env)) + elf_entry(module_ptr->address, module_ptr->size); fb::printf("\t->Точка входа: 0x%x\n", module_init); - int ret = module_init(&main_env); + module_info_t *ret = module_init(&main_env); - fb::printf("Инициализированно с кодом: %x\n", ret); - fb::printf("Сообщение из модуля: %s\n\n", (char *)ret); + fb::printf("Инициализированно с кодом: %u\n", ret->err_code); + fb::printf("Сообщение из модуля: %s\n\n", ret->message); } } } // namespace mod \ No newline at end of file diff --git a/kernel/sys.cpp b/kernel/sys.cpp index 7925c6d..88fedf8 100644 --- a/kernel/sys.cpp +++ b/kernel/sys.cpp @@ -1,34 +1,5 @@ #include - -typedef struct { - int reserved; -} framebuffer_t; - -typedef struct { - int reserved; -} sys_info_t; - -typedef struct { - int reserved; -} module_info_t; - -typedef struct { - int reserved; -} func_t; - -typedef struct { - uint8_t a[4]; - uint8_t b[4]; - uint8_t c[4]; - uint8_t d[4]; -} uid_t; - -typedef struct { - uint16_t year; - uint8_t month; - uint8_t day; - uint8_t second; -} time_t; +#include namespace sys { void init( ) {}