pub extern "C" fn _start(boot_info: &'static BootInfo) -> ! {
    let cpu_id = cpu::id();
    println!("Hello world! from CPU {}!", cpu_id);

    if cpu_id != 0 {
        while !AP_CAN_INIT.load(Ordering::Relaxed) {}
        other_start();
    }

    // First init log mod, so that we can print log info.
    crate::logging::init();
    info!("{:#?}", boot_info);

    // Init trap handling.
    idt::init();
    interrupt::fast_syscall::init();

    // Init physical memory management and heap.
    memory::init(boot_info);

    // Now heap is available
    gdt::init();

    cpu::init();

    driver::init();

    crate::drivers::init();

    crate::process::init();

    AP_CAN_INIT.store(true, Ordering::Relaxed);

    crate::kmain();
}
// don't mangle the name of this function
don't mangle the name of this function
don ' t mangle the name of this function
pub extern "C" fn _start(boot_info: &'static BootInfo) -> ! {
    let cpu_id = cpu::id();
    println!("Hello world! from CPU {}!", cpu_id);
    if cpu_id != 0 {
        while !AP_CAN_INIT.load(Ordering::Relaxed) {}
        other_start();
    }
    // First init log mod, so that we can print log info.
    crate::logging::init();
    info!("{:#?}", boot_info);
    // Init trap handling.
    idt::init();
    interrupt::fast_syscall::init();
    // Init physical memory management and heap.
    memory::init(boot_info);
    // Now heap is available
    gdt::init();
    cpu::init();
    driver::init();
    crate::drivers::init();
    crate::process::init();
    AP_CAN_INIT.store(true, Ordering::Relaxed);
    crate::kmain();
}
pub extern " " fn _start ( boot_info : & ' static BootInfo ) -> ! { let cpu_id = cpu :: id ( ) ; println ! ( " " cpu_id ) ; if cpu_id != 0 { while ! AP_CAN_INIT . load ( Ordering :: Relaxed ) { } other_start ( ) ; } // First init log mod, so that we can print log info. crate :: logging :: init ( ) ; info ! ( " " boot_info ) ; // Init trap handling. idt :: init ( ) ; interrupt :: fast_syscall :: init ( ) ; // Init physical memory management and heap. memory :: init ( boot_info ) ; // Now heap is available gdt :: init ( ) ; cpu :: init ( ) ; driver :: init ( ) ; crate :: drivers :: init ( ) ; crate :: process :: init ( ) ; AP_CAN_INIT . store ( true , Ordering :: Relaxed ) ; crate :: kmain ( ) ; }
don't mangle the name of this function
don ' t mangle the name of this function
boot_info
&'static BootInfo
boot_info
&'static BootInfo