From 2115246b402c84ad1796448e3a994bdbe4c6f592 Mon Sep 17 00:00:00 2001 From: GZTime Date: Wed, 17 Jan 2024 00:30:07 +0800 Subject: [PATCH] wip: add lib.rs --- src/0x02/pkg/kernel/src/lib.rs | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/0x02/pkg/kernel/src/lib.rs diff --git a/src/0x02/pkg/kernel/src/lib.rs b/src/0x02/pkg/kernel/src/lib.rs new file mode 100644 index 0000000..e893ea8 --- /dev/null +++ b/src/0x02/pkg/kernel/src/lib.rs @@ -0,0 +1,59 @@ +#![no_std] +#![allow(dead_code)] +#![feature(naked_functions)] +#![feature(abi_x86_interrupt)] +#![feature(alloc_error_handler)] +#![feature(type_alias_impl_trait)] +#![feature(panic_info_message)] +#![feature(map_try_insert)] +#![allow(clippy::missing_safety_doc)] +#![allow(clippy::result_unit_err)] + +extern crate alloc; +#[macro_use] +extern crate log; +#[macro_use] +extern crate lazy_static; +#[macro_use] +extern crate bitflags; +extern crate libm; + +#[macro_use] +pub mod utils; +pub use utils::*; + +#[macro_use] +pub mod drivers; +pub use drivers::*; + +pub mod memory; +pub mod interrupt; + +pub use alloc::format; +use boot::BootInfo; + +pub fn init(boot_info: &'static BootInfo) { + serial::init(); // init serial output + logger::init(); // init logger system + memory::address::init(boot_info); + memory::gdt::init(); // init gdt + memory::allocator::init(); // init kernel heap allocator + interrupt::init(); // init interrupts + memory::init(boot_info); // init memory manager + + x86_64::instructions::interrupts::enable(); + info!("Interrupts Enabled."); + + info!("YatSenOS initialized."); +} + +pub fn shutdown(boot_info: &'static BootInfo) -> ! { + info!("YatSenOS shutting down."); + unsafe { + boot_info.system_table.runtime_services().reset( + boot::ResetType::SHUTDOWN, + boot::UefiStatus::SUCCESS, + None, + ); + } +}