pub fn init(boot_info: &'static BootInfo, kernel_start: usize, kernel_end: usize) {
    PHYSICAL_MEMORY_OFFSET.call_once(|| boot_info.physical_memory_offset);
    unsafe { MEMORY_MAP = Some(&boot_info.memory_map); }
    let bump = BumpAllocator::new(kernel_start, kernel_end, MemoryAreaIter::new(MemoryRegionType::Usable));
    *FRAME_ALLOCATOR.lock() = Some(RecycleAllocator::new(bump));
}
/// Init memory module
/// Must be called once, and only once,
Init memory module
Must be called once, and only once.
Init memory module Must be called once and only once .
pub fn init(boot_info: &'static BootInfo, kernel_start: usize, kernel_end: usize) {
    PHYSICAL_MEMORY_OFFSET.call_once(|| boot_info.physical_memory_offset);
    unsafe { MEMORY_MAP = Some(&boot_info.memory_map); }
    let bump = BumpAllocator::new(kernel_start, kernel_end, MemoryAreaIter::new(MemoryRegionType::Usable));
    *FRAME_ALLOCATOR.lock() = Some(RecycleAllocator::new(bump));
}
pub fn init ( boot_info : & ' static BootInfo , kernel_start : usize , kernel_end : usize ) { PHYSICAL_MEMORY_OFFSET . call_once ( | | boot_info . physical_memory_offset ) ; unsafe { MEMORY_MAP = Some ( & boot_info . memory_map ) ; } let bump = BumpAllocator :: new ( kernel_start , kernel_end , MemoryAreaIter :: new ( MemoryRegionType :: Usable ) ) ; * FRAME_ALLOCATOR . lock ( ) = Some ( RecycleAllocator :: new ( bump ) ) ; }
Init memory module
Must be called once, and only once,
Init memory module Must be called once and only once
boot_info
&'static BootInfo
kernel_start
usize
kernel_end
usize
boot_info
&'static BootInfo
kernel_start
usize
kernel_end
usize