added code to reset segmentation and enable paging; added fmt_xl2a() in kio; added debug prints in k_bootstrap() since kernel is crashing when trying to enable paging

git-svn-id: svn://anubis/hos/trunk@49 5b3e749e-e535-0410-8002-a9bb6afbdfca
This commit is contained in:
josh committed 2009-07-13 22:58:48 +00:00
1 parent 0fb590a407
commit df719b4281
6 files changed
+81 -10

No files matched your search

+6 -5
View File
@@ -15,6 +15,7 @@ static int mm_mmap_num_entries = 0;
static int mm_num_free_pages = 0;
u32_t * mm_free_page_ptr = NULL;
gdtr_t mm_gdtr;
static u64_t * mm_gdt;
/**************************************************************************
* This function is run in segmented memory before paging is in effect. *
@@ -145,12 +146,12 @@ void mm_bootstrap()
/* set up the global descriptor table */
u32_t gdt_base = mm_page_alloc();
u64_t * gdt = (u64_t *) ((u32_t) gdt_base + (u32_t) KERNEL_OFFSET);
memsetd((u32_t *) gdt, 0, PAGE_SIZE / 4);
mm_gdtr.length = PAGE_SIZE - 1;
mm_gdt = (u64_t *) ((u32_t) gdt_base + (u32_t) KERNEL_OFFSET);
mm_gdt[0] = 0x0ull;
mm_gdt[1] = MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 1);
mm_gdt[2] = MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 0);
mm_gdtr.length = 3*sizeof(mm_gdt[0]) - 1;
mm_gdtr.phys_addr = gdt_base;
gdt[1] = MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 1);
gdt[2] = MAKE_DESCRIPTOR(0, 0xFFFFF, 1, 0, 1, 0);
/* set the page directory base register */
set_cr3(page_directory);