gdt support in rust
This commit is contained in:
parent
8a3e3a2324
commit
f138d77e4d
4 changed files with 20 additions and 29 deletions
|
|
@ -10,7 +10,7 @@ static TSS: Once<tss::TaskStateSegment> = 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit ae98bfcd4f30217a4bfe944549d222bb07f81deb
|
||||
Subproject commit f5e4cb879953ebbeba28a1eaa28bf531424e6824
|
||||
Loading…
Reference in a new issue