int
This commit is contained in:
parent
5c7daabdd0
commit
098d222fc1
5 changed files with 43 additions and 7 deletions
|
|
@ -11,3 +11,7 @@ rlibc = "1.0"
|
||||||
bitflags = "1.0.1"
|
bitflags = "1.0.1"
|
||||||
multiboot2 = { path = "multiboot2-elf64" }
|
multiboot2 = { path = "multiboot2-elf64" }
|
||||||
x86 = { path = "x86" }
|
x86 = { path = "x86" }
|
||||||
|
|
||||||
|
[dependencies.lazy_static]
|
||||||
|
version = "1.0.0"
|
||||||
|
features = ["spin_no_std"]
|
||||||
|
|
|
||||||
21
kernel-rs/src/interrupts/mod.rs
Normal file
21
kernel-rs/src/interrupts/mod.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
use x86::structures::idt::*;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref IDT: Idt = {
|
||||||
|
let mut idt = Idt::new();
|
||||||
|
idt.breakpoint.set_handler_fn(breakpoint_handler);
|
||||||
|
idt
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() {
|
||||||
|
IDT.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "x86-interrupt" fn breakpoint_handler(
|
||||||
|
stack_frame: &mut ExceptionStackFrame)
|
||||||
|
{
|
||||||
|
println!("EXCEPTION: BREAKPOINT\n");
|
||||||
|
flush!();
|
||||||
|
loop{}
|
||||||
|
}
|
||||||
|
|
@ -5,13 +5,16 @@
|
||||||
#![feature(const_fn)]
|
#![feature(const_fn)]
|
||||||
#![feature(ptr_internals)]
|
#![feature(ptr_internals)]
|
||||||
#![feature(asm)]
|
#![feature(asm)]
|
||||||
|
|
||||||
#![feature(alloc)]
|
#![feature(alloc)]
|
||||||
#![feature(allocator_api)]
|
#![feature(allocator_api)]
|
||||||
#![feature(global_allocator)]
|
#![feature(global_allocator)]
|
||||||
|
|
||||||
|
#![feature(abi_x86_interrupt)]
|
||||||
|
|
||||||
extern crate rlibc;
|
extern crate rlibc;
|
||||||
extern crate multiboot2;
|
extern crate multiboot2;
|
||||||
// #[macro_use] extern crate bitflags;
|
#[macro_use] extern crate lazy_static;
|
||||||
#[macro_use] extern crate alloc;
|
#[macro_use] extern crate alloc;
|
||||||
extern crate x86;
|
extern crate x86;
|
||||||
|
|
||||||
|
|
@ -27,22 +30,28 @@ pub mod cpuio;
|
||||||
pub mod acpi;
|
pub mod acpi;
|
||||||
/// physical frame allocator + paging module + heap allocator
|
/// physical frame allocator + paging module + heap allocator
|
||||||
pub mod memory;
|
pub mod memory;
|
||||||
// x86 interruptions
|
/// x86 interruptions
|
||||||
// pub mod interrupts;
|
pub mod interrupts;
|
||||||
|
|
||||||
fn init_kernel(multiboot_info_addr: usize) -> Result <(), &'static str> {
|
fn init_kernel(multiboot_info_addr: usize) -> Result <(), &'static str> {
|
||||||
|
|
||||||
let boot_info = unsafe { multiboot2::load(multiboot_info_addr)};
|
let boot_info = unsafe { multiboot2::load(multiboot_info_addr)};
|
||||||
|
|
||||||
if let Some(rsdp) = boot_info.rsdp_v2_tag() {
|
if let Some(rsdp) = boot_info.rsdp_v2_tag() {
|
||||||
acpi::load(rsdp)?;
|
acpi::load(rsdp)?;
|
||||||
} else if let Some(rsdp) = boot_info.rsdp_tag() {
|
} else if let Some(rsdp) = boot_info.rsdp_tag() {
|
||||||
acpi::load(rsdp)?;
|
acpi::load(rsdp)?;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
acpi::init()?;
|
acpi::init()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enable_paging();
|
||||||
|
enable_write_protect_bit();
|
||||||
|
|
||||||
memory::init(&boot_info);
|
memory::init(&boot_info);
|
||||||
|
interrupts::init();
|
||||||
vga::init();
|
vga::init();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,6 +62,8 @@ pub extern fn kmain(multiboot_info_addr: usize) -> ! {
|
||||||
cpuio::halt();
|
cpuio::halt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x86::instructions::interrupts::int3();
|
||||||
|
|
||||||
loop { keyboard::kbd_callback(); }
|
loop { keyboard::kbd_callback(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use memory::*;
|
use memory::*;
|
||||||
use x86::structures::paging::*;
|
use x86::structures::paging::*;
|
||||||
use x86::ux::*;
|
// use x86::ux::*;
|
||||||
|
|
||||||
pub trait RecTable
|
pub trait RecTable
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7b8227e36afe68ed2d518a2c7cede0466878ca9d
|
Subproject commit da544c834b3f3d8b53f456c48b3aafa58d09198a
|
||||||
Loading…
Reference in a new issue