1#![no_std]
2#![no_main]
3#![feature(alloc_error_handler)]
4
5extern crate alloc;
6
7#[macro_use]
8extern crate bitflags;
9
10use log::*;
11
12#[path = "boards/qemu.rs"]
13mod board;
14
15#[macro_use]
16mod console;
17mod config;
18mod drivers;
19mod fs;
20mod lang_items;
21mod logging;
22mod mm;
23mod sbi;
24mod sync;
25mod syscall;
26mod task;
27mod timer;
28mod trap;
29
30use core::arch::global_asm;
31
32global_asm!(include_str!("entry.asm"));
33
34fn clear_bss() {
35 unsafe extern "C" {
36 safe fn sbss();
37 safe fn ebss();
38 }
39 unsafe {
40 core::slice::from_raw_parts_mut(sbss as usize as *mut u8, ebss as usize - sbss as usize)
41 .fill(0);
42 }
43}
44
45#[unsafe(no_mangle)]
47pub fn rust_main() -> ! {
48 clear_bss();
49 logging::init();
50 info!("[kernel] Hello, world!");
51 mm::init();
52 mm::remap_test();
53 trap::init();
54 trap::enable_timer_interrupt();
55 timer::set_next_trigger();
56 fs::list_apps();
57 task::add_initproc();
58 task::run_tasks();
59 panic!("Unreachable in rust_main!");
60}