mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-28 11:53:24 +00:00
Allow booting without initramfs
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
5941d3e6eb
commit
0b617dd76c
@ -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) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user