os/
main.rs

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/// the rust entry-point of os
46#[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}