Allow booting without initramfs

This commit is contained in:
Zhang Junyang
2024-03-22 16:37:59 +08:00
committed by Tate, Hongliang Tian
parent 5941d3e6eb
commit 0b617dd76c
2 changed files with 9 additions and 6 deletions

View File

@ -69,6 +69,9 @@ fn init_kernel_commandline(kernel_cmdline: &'static Once<KCmdlineArg>) {
fn init_initramfs(initramfs: &'static Once<&'static [u8]>) { fn init_initramfs(initramfs: &'static Once<&'static [u8]>) {
let hdr = &BOOT_PARAMS.get().unwrap().hdr; let hdr = &BOOT_PARAMS.get().unwrap().hdr;
let ptr = hdr.ramdisk_image as usize; let ptr = hdr.ramdisk_image as usize;
if ptr == 0 {
return;
}
// We must return a slice composed by VA since kernel should read everything in VA. // We must return a slice composed by VA since kernel should read everything in VA.
let base_va = if ptr < PHYS_MEM_BASE_VADDR { let base_va = if ptr < PHYS_MEM_BASE_VADDR {
paddr_to_vaddr(ptr) paddr_to_vaddr(ptr)
@ -76,6 +79,9 @@ fn init_initramfs(initramfs: &'static Once<&'static [u8]>) {
ptr ptr
}; };
let length = hdr.ramdisk_size as usize; let length = hdr.ramdisk_size as usize;
if length == 0 {
return;
}
initramfs.call_once(|| unsafe { core::slice::from_raw_parts(base_va as *const u8, length) }); initramfs.call_once(|| unsafe { core::slice::from_raw_parts(base_va as *const u8, length) });
} }

View File

@ -50,12 +50,9 @@ fn init_kernel_commandline(kernel_cmdline: &'static Once<KCmdlineArg>) {
} }
fn init_initramfs(initramfs: &'static Once<&'static [u8]>) { fn init_initramfs(initramfs: &'static Once<&'static [u8]>) {
let mb2_module_tag = MB2_INFO let Some(mb2_module_tag) = MB2_INFO.get().unwrap().module_tags().next() else {
.get() return;
.unwrap() };
.module_tags()
.next()
.expect("No Multiboot2 modules found!");
let base_addr = mb2_module_tag.start_address() as usize; let base_addr = mb2_module_tag.start_address() as usize;
// We must return a slice composed by VA since kernel should read every in VA. // We must return a slice composed by VA since kernel should read every in VA.
let base_va = if base_addr < PHYS_MEM_BASE_VADDR { let base_va = if base_addr < PHYS_MEM_BASE_VADDR {