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
This commit is contained in:
josh 2009-07-14 13:31:08 +00:00
parent cf2d28f5ce
commit bf9c7d74eb
7 changed files with 36 additions and 12 deletions

View File

@ -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:

View File

@ -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;
}

View File

@ -1,4 +1,11 @@
#include "lang/kio.h"
extern "C" {
void k_main()
{
kprintf("Hi from k_main()!\n");
}
} /* extern "C" */

View File

@ -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

View File

@ -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)
{

14
kernel/mm/stack.cc Executable file
View File

@ -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);
}

7
kernel/mm/stack.h Executable file
View File

@ -0,0 +1,7 @@
#ifndef STACK_H
#define STACK_H
void stack_bootstrap();
#endif