Browse Source

kernel_main: enable NXE, WRPROT bits before remapping kernel

master
3moon 8 years ago
parent
commit
0b22410c5e
2 changed files with 23 additions and 0 deletions
  1. +17
    -0
      src/arch/x86_64/mod.rs
  2. +6
    -0
      src/lib.rs

+ 17
- 0
src/arch/x86_64/mod.rs View File

@ -1,2 +1,19 @@
pub mod device;
pub mod memory;
pub fn enable_nxe_bit() {
use x86::shared::msr;
const NXE_BIT: u64 = 1<<11;
unsafe {
let efer = msr::rdmsr(msr::IA32_EFER);
msr::wrmsr(msr::IA32_EFER, efer | NXE_BIT)
}
}
pub fn enable_wrprot_bit() {
use x86::shared::control_regs::{cr0, cr0_write, CR0_WRITE_PROTECT};
unsafe {
cr0_write(cr0() | CR0_WRITE_PROTECT);
}
}

+ 6
- 0
src/lib.rs View File

@ -20,6 +20,7 @@ mod misc;
mod logger;
mod arch;
use arch::x86_64;
use arch::x86_64::device::vga_console;
use arch::x86_64::memory;
use arch::x86_64::memory::FrameAllocator;
@ -65,6 +66,11 @@ pub extern fn kernel_main(multiboot_info_pointer: usize) {
println!("multiboot start: {:#x}, multiboot end: {:#x}",
multiboot_start, multiboot_end);
// Enable required CPU features
x86_64::enable_nxe_bit(); // Enable NO_EXECUTE pages
x86_64::enable_wrprot_bit(); // Disable writing to non-WRITABLE pages
memory::remap_kernel(&mut frame_allocator, boot_info);
println!("-- remap_kernel finished! --");


Loading…
Cancel
Save