From bf9c7d74eb0032000e3f5ef6be1c10162c774487 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 14 Jul 2009 13:31:08 +0000 Subject: [PATCH] added mm/stack module; initializing "permanent" stack for kernel use while paging, crashing when calling k_main() though... git-svn-id: svn://anubis/hos/trunk@52 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/boot/boot.asm | 4 +++- kernel/boot/k_bootstrap.cc | 12 ++---------- kernel/boot/k_main.cc | 7 +++++++ kernel/include/hos_defines.h | 2 ++ kernel/lang/kio.cc | 2 +- kernel/mm/stack.cc | 14 ++++++++++++++ kernel/mm/stack.h | 7 +++++++ 7 files changed, 36 insertions(+), 12 deletions(-) create mode 100755 kernel/mm/stack.cc create mode 100755 kernel/mm/stack.h diff --git a/kernel/boot/boot.asm b/kernel/boot/boot.asm index 625ea65..88bfccc 100644 --- a/kernel/boot/boot.asm +++ b/kernel/boot/boot.asm @@ -12,6 +12,8 @@ %define PAGE_SIZE 0x1000 ; 4KB pages +%define KERNEL_STACK_TOP 0xF0000000 ; permanent stack top + ; Symbols from the linker extern _end, _bss @@ -107,7 +109,7 @@ segmentation_disabled: mov cx, 0x0700 + 'f' mov [CONSOLE_MEMORY+160*8+5*2], cx - ; TODO: set up a stack! +; mov esp, KERNEL_STACK_TOP ; call k_main idle_loop: diff --git a/kernel/boot/k_bootstrap.cc b/kernel/boot/k_bootstrap.cc index 0833eb9..a7c5464 100644 --- a/kernel/boot/k_bootstrap.cc +++ b/kernel/boot/k_bootstrap.cc @@ -4,6 +4,7 @@ #include "multiboot.h" #include "k_early_panic.h" #include "mm/mm.h" +#include "mm/stack.h" #include "lang/kio.h" #define DEBUG_LETTER(col,chr) *(u16_t *)(KERNEL_OFFSET + CONSOLE_MEMORY \ @@ -46,18 +47,9 @@ u32_t k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) * before calling them. */ mm_bootstrap(); + stack_bootstrap(); /* after mm */ kio_bootstrap(); - kprintf("Hello from kprintf()! %d, %x, %u, %l\n", 42, 0xabcd0123, 0xFFFFFFFF, -1234567891234ll); - -#if 0 - kprintf("d1: 0x%X\n", MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 1)); - kprintf("d2: 0x%X\n", MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 0)); - - for (;;) - ; -#endif - return 0; } diff --git a/kernel/boot/k_main.cc b/kernel/boot/k_main.cc index 3aacb2a..2dd9f10 100644 --- a/kernel/boot/k_main.cc +++ b/kernel/boot/k_main.cc @@ -1,4 +1,11 @@ +#include "lang/kio.h" + +extern "C" { + void k_main() { + kprintf("Hi from k_main()!\n"); } + +} /* extern "C" */ diff --git a/kernel/include/hos_defines.h b/kernel/include/hos_defines.h index c12f14a..5ce31f6 100644 --- a/kernel/include/hos_defines.h +++ b/kernel/include/hos_defines.h @@ -29,6 +29,8 @@ extern u8_t _end; #define KERNEL_VIRTUAL_ADDRESS ((u32_t)KERNEL_CODE) #define KERNEL_SIZE ((u32_t)(KERNEL_END - KERNEL_CODE)) +#define KERNEL_STACK_TOP 0xF0000000 + #ifdef __cplusplus } #endif diff --git a/kernel/lang/kio.cc b/kernel/lang/kio.cc index 9c0374d..cd989c8 100644 --- a/kernel/lang/kio.cc +++ b/kernel/lang/kio.cc @@ -96,7 +96,7 @@ void kvprintf(const char * fmt, va_list args) void kputc(char c) { - u16_t * console_memory = (u16_t *) (CONSOLE_MEMORY + KERNEL_OFFSET); + u16_t * console_memory = (u16_t *) CONSOLE_MEMORY; console_memory += 80 * cursor_y + cursor_x; switch (c) { diff --git a/kernel/mm/stack.cc b/kernel/mm/stack.cc new file mode 100755 index 0000000..952019b --- /dev/null +++ b/kernel/mm/stack.cc @@ -0,0 +1,14 @@ + +#include "stack.h" +#include "mm.h" +#include "hos_defines.h" + +void stack_bootstrap() +{ + /* + * running from our temporary stack while segmentation is enabled, + * set up the "permanent" stack for use while paging + */ + u32_t first_stack_page_base = mm_page_alloc(); + mm_map(KERNEL_STACK_TOP - PAGE_SIZE, first_stack_page_base, 0, 1); +} diff --git a/kernel/mm/stack.h b/kernel/mm/stack.h new file mode 100755 index 0000000..d649e80 --- /dev/null +++ b/kernel/mm/stack.h @@ -0,0 +1,7 @@ + +#ifndef STACK_H +#define STACK_H + +void stack_bootstrap(); + +#endif