You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
49 lines
1.1 KiB
extern crate bootloader;
|
|
|
|
use self::bootloader::bootinfo::{BootInfo, MemoryRegionType};
|
|
|
|
pub mod driver;
|
|
pub mod cpu;
|
|
pub mod interrupt;
|
|
pub mod paging;
|
|
pub mod gdt;
|
|
pub mod idt;
|
|
// TODO: Move multi-core init to bootloader
|
|
//pub mod smp;
|
|
pub mod memory;
|
|
pub mod io;
|
|
|
|
/// The entry point of kernel
|
|
#[no_mangle] // don't mangle the name of this function
|
|
pub extern "C" fn _start(boot_info: &'static BootInfo) -> ! {
|
|
// First init log mod, so that we can print log info.
|
|
::logging::init();
|
|
info!("Hello world!");
|
|
info!("{:#?}", boot_info);
|
|
|
|
// Init trap handling.
|
|
idt::init();
|
|
|
|
// Init physical memory management and heap.
|
|
memory::init(boot_info);
|
|
|
|
// Now heap is available
|
|
gdt::init();
|
|
|
|
driver::init();
|
|
|
|
::kmain();
|
|
}
|
|
|
|
/// The entry point for another processors
|
|
#[no_mangle]
|
|
pub extern "C" fn other_main() -> ! {
|
|
idt::init();
|
|
gdt::init();
|
|
driver::apic::other_init();
|
|
let cpu_id = driver::apic::lapic_id();
|
|
// let ms = unsafe { smp::notify_started(cpu_id) };
|
|
println!("Hello world! from CPU {}!", cpu_id);
|
|
// unsafe{ let a = *(0xdeadbeaf as *const u8); } // Page fault
|
|
loop {}
|
|
} |