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() {
|
pub fn init() {
|
||||||
let tss = tss::TaskStateSegment::new();
|
let tss = tss::TaskStateSegment::new();
|
||||||
let tss = TSS.call_once(|| {
|
let tss = TSS.call_once(|| {
|
||||||
let mut tss = tss::TaskStateSegment::new();
|
let tss = tss::TaskStateSegment::new();
|
||||||
tss
|
tss
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -21,14 +21,25 @@ pub fn init() {
|
||||||
let mut gdt = gdt::Gdt::new();
|
let mut gdt = gdt::Gdt::new();
|
||||||
code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment());
|
code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment());
|
||||||
tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss));
|
tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss));
|
||||||
|
println!("cs: {:?}", code_selector);
|
||||||
gdt
|
gdt
|
||||||
});
|
});
|
||||||
|
|
||||||
// gdt.load();
|
println!("0 upper: {:#x}", gdt.table[0] as u32);
|
||||||
// unsafe {
|
println!("0 lower: {:#x}", gdt.table[0] >> 32 as u32);
|
||||||
// // reload code segment register
|
println!("1 upper: {:#x}", gdt.table[1] as u32);
|
||||||
// set_cs(code_selector);
|
println!("1 lower: {:#x}", gdt.table[1] >> 32 as u32);
|
||||||
// // load TSS
|
println!("2 upper: {:#x}", gdt.table[2] as u32);
|
||||||
// load_tss(tss_selector);
|
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,
|
temporary_page: &mut TemporaryPage,
|
||||||
) -> InactivePageTable {
|
) -> InactivePageTable {
|
||||||
{
|
{
|
||||||
println!("mapping temp page:");
|
|
||||||
println!("frame: {:?}", frame);
|
|
||||||
flush!();
|
|
||||||
// unsafe {
|
|
||||||
// asm!("hlt");
|
|
||||||
// }
|
|
||||||
let table = temporary_page.map_table_frame(frame.clone(), active_table);
|
let table = temporary_page.map_table_frame(frame.clone(), active_table);
|
||||||
|
|
||||||
table.zero();
|
table.zero();
|
||||||
|
|
|
||||||
|
|
@ -46,20 +46,6 @@ pub fn init(boot_info: &multiboot2::BootInformation) {
|
||||||
memory_map_tag.memory_areas(),
|
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 frame_allocator = RecycleAllocator::new(bump_allocator);
|
||||||
|
|
||||||
// let stack_allocator = {
|
// let stack_allocator = {
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit ae98bfcd4f30217a4bfe944549d222bb07f81deb
|
Subproject commit f5e4cb879953ebbeba28a1eaa28bf531424e6824
|
||||||
Loading…
Reference in a new issue