#![no_std] #![no_main] #![feature(panic_info_message)] #![feature(alloc_error_handler)] #[macro_use] extern crate log; extern crate alloc; #[macro_use] mod console; mod config; mod heap_alloc; mod lang_items; mod loader; mod logging; mod sbi; mod sync; mod syscall; mod task; mod timer; mod trap; core::arch::global_asm!(include_str!("entry.asm")); core::arch::global_asm!(include_str!("link_app.S")); fn clear_bss() { extern "C" { fn sbss(); fn ebss(); } unsafe { core::slice::from_raw_parts_mut(sbss as usize as *mut u8, ebss as usize - sbss as usize) .fill(0); } } #[no_mangle] pub fn rust_main() -> ! { clear_bss(); logging::init(); println!("[kernel] Hello, world!"); heap_alloc::init_heap(); trap::init(); loader::load_apps(); trap::enable_timer_interrupt(); timer::set_next_trigger(); task::run_first_task(); panic!("Unreachable in rust_main!"); }