From f138d77e4da0e392c13d937ce865b641f13960dc Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 12 Apr 2018 17:59:14 +0200 Subject: [PATCH] gdt support in rust --- kernel-rs/src/arch/x86/gdt.rs | 27 +++++++++++++++++++-------- kernel-rs/src/arch/x86/paging/mod.rs | 6 ------ kernel-rs/src/memory/mod.rs | 14 -------------- kernel-rs/x86 | 2 +- 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/kernel-rs/src/arch/x86/gdt.rs b/kernel-rs/src/arch/x86/gdt.rs index f9c46046..8d720bf9 100644 --- a/kernel-rs/src/arch/x86/gdt.rs +++ b/kernel-rs/src/arch/x86/gdt.rs @@ -10,7 +10,7 @@ static TSS: Once = Once::new(); pub fn init() { let tss = tss::TaskStateSegment::new(); let tss = TSS.call_once(|| { - let mut tss = tss::TaskStateSegment::new(); + let tss = tss::TaskStateSegment::new(); tss }); @@ -21,14 +21,25 @@ pub fn init() { let mut gdt = gdt::Gdt::new(); code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment()); tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss)); + println!("cs: {:?}", code_selector); gdt }); - // gdt.load(); - // unsafe { - // // reload code segment register - // set_cs(code_selector); - // // load TSS - // load_tss(tss_selector); - // } + println!("0 upper: {:#x}", gdt.table[0] as u32); + println!("0 lower: {:#x}", gdt.table[0] >> 32 as u32); + println!("1 upper: {:#x}", gdt.table[1] as u32); + println!("1 lower: {:#x}", gdt.table[1] >> 32 as u32); + println!("2 upper: {:#x}", gdt.table[2] as u32); + println!("2 lower: {:#x}", gdt.table[2] >> 32 as u32); + println!("3 upper: {:#x}", gdt.table[3] as u32); + println!("3 lower: {:#x}", gdt.table[3] >> 32 as u32); + flush!(); + + gdt.load(); + unsafe { + // reload code segment register + set_cs(code_selector); + // load TSS + load_tss(tss_selector); + } } diff --git a/kernel-rs/src/arch/x86/paging/mod.rs b/kernel-rs/src/arch/x86/paging/mod.rs index 58fac763..698d2cf9 100644 --- a/kernel-rs/src/arch/x86/paging/mod.rs +++ b/kernel-rs/src/arch/x86/paging/mod.rs @@ -101,12 +101,6 @@ impl InactivePageTable { temporary_page: &mut TemporaryPage, ) -> InactivePageTable { { - println!("mapping temp page:"); - println!("frame: {:?}", frame); - flush!(); - // unsafe { - // asm!("hlt"); - // } let table = temporary_page.map_table_frame(frame.clone(), active_table); table.zero(); diff --git a/kernel-rs/src/memory/mod.rs b/kernel-rs/src/memory/mod.rs index 5bcadcdd..7d9de270 100644 --- a/kernel-rs/src/memory/mod.rs +++ b/kernel-rs/src/memory/mod.rs @@ -46,20 +46,6 @@ pub fn init(boot_info: &multiboot2::BootInformation) { memory_map_tag.memory_areas(), ); - println!("memory areas from the f allocator:"); - for area in memory_map_tag.memory_areas() { - println!( - " start: {:#x}, end: {:#x} length: {:#x}", - area.start_address(), - area.end_address(), - area.size() - ); - } - flush!(); - // unsafe { - // asm!("hlt"); - // } - let frame_allocator = RecycleAllocator::new(bump_allocator); // let stack_allocator = { diff --git a/kernel-rs/x86 b/kernel-rs/x86 index ae98bfcd..f5e4cb87 160000 --- a/kernel-rs/x86 +++ b/kernel-rs/x86 @@ -1 +1 @@ -Subproject commit ae98bfcd4f30217a4bfe944549d222bb07f81deb +Subproject commit f5e4cb879953ebbeba28a1eaa28bf531424e6824