rcore-learn/os/src/main.rs
Tateisi 13e91ed735 ch2: Batch system
AppManager
2025-08-03 06:54:14 +08:00

68 lines
No EOL
1.3 KiB
Rust

#![no_std]
#![no_main]
mod lang_items;
mod sbi;
mod logger;
#[macro_use]
mod console;
mod batch;
mod sync;
use core::arch::global_asm;
use log::{debug, error, info, trace, warn};
global_asm!(include_str!("entry.asm"));
#[no_mangle]
pub fn rust_main() -> ! {
clear_bss();
logger::init();
print_system_info();
print_to_console();
panic!("Shutdown machine!");
}
fn clear_bss() {
extern "C" {
fn sbss();
fn ebss();
}
(sbss as usize..ebss as usize).for_each(|a| {
unsafe { (a as *mut u8).write_volatile(0) }
});
}
fn print_to_console() {
sbi::console_write_byte('O' as u8);
sbi::console_write_byte('K' as u8);
sbi::console_write_byte('\n' as u8);
trace!("Hello World.");
debug!("Hello World.");
info!("Hello World.");
warn!("Hello World.");
error!("Hello World.");
}
fn print_system_info() {
extern "C" {
fn stext();
fn etext();
fn sdata();
fn edata();
fn srodata();
fn erodata();
fn sbss();
fn ebss();
}
info!(".text [{:#x}, {:#x}]", stext as usize, etext as usize);
info!(".rodata [{:#x}, {:#x}]", srodata as usize, erodata as usize);
info!(".data [{:#x}, {:#x}]", sdata as usize, edata as usize);
info!(".bss [{:#x}, {:#x}]", sbss as usize, ebss as usize);
}