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:
1 parent
0fb590a407
commit
df719b4281
6 files changed
+81
-10
No files matched your search
+6
-5
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user