Skip to content

Commit 06c224c

Browse files
committed
Add support for loading ramdisk from disk
1 parent 0b97987 commit 06c224c

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

uefi/src/main.rs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ mod memory_descriptor;
3838

3939
static SYSTEM_TABLE: RacyCell<Option<SystemTable<Boot>>> = RacyCell::new(None);
4040
const KERNEL_FILENAME: &str = "kernel-x86_64";
41+
const RAMDISK_FILENAME: &str = "ramdisk-x86_64";
4142

4243
struct RacyCell<T>(UnsafeCell<T>);
4344

@@ -76,6 +77,7 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
7677
.unwrap();
7778

7879
let kernel = load_kernel(image, &st);
80+
let ramdisk = load_ramdisk(image, &st);
7981

8082
let framebuffer = init_logger(&st, kernel.config);
8183

@@ -122,8 +124,14 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
122124
.or_else(|| config_entries.find(|entry| matches!(entry.guid, cfg::ACPI_GUID)));
123125
rsdp.map(|entry| PhysAddr::new(entry.address as u64))
124126
},
125-
ramdisk_addr: None,
126-
ramdisk_len: 0,
127+
ramdisk_addr: match ramdisk {
128+
Some(rd) => Some(rd as *const _ as u64),
129+
None => None,
130+
},
131+
ramdisk_len: match ramdisk {
132+
Some(rd) => rd.len() as u64,
133+
None => 0u64,
134+
},
127135
};
128136

129137
bootloader_x86_64_common::load_and_switch_to_kernel(
@@ -134,15 +142,15 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
134142
);
135143
}
136144

137-
fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
138-
let kernel_slice = load_kernel_file(image, st).expect("couldn't find kernel");
139-
Kernel::parse(kernel_slice)
145+
fn load_ramdisk(image: Handle, st: &SystemTable<Boot>) -> Option<&'static [u8]> {
146+
load_file_from_disk(RAMDISK_FILENAME, image, st)
140147
}
141148

142-
/// Try to load a kernel file from the boot device.
143-
fn load_kernel_file(image: Handle, st: &SystemTable<Boot>) -> Option<&'static mut [u8]> {
144-
load_kernel_file_from_disk(image, st)
145-
.or_else(|| load_kernel_file_from_tftp_boot_server(image, st))
149+
fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
150+
let kernel_slice = load_file_from_disk(KERNEL_FILENAME, image, st)
151+
.or_else(|| load_kernel_file_from_tftp_boot_server(KERNEL_FILENAME, image, st))
152+
.expect("couldn't find kernel");
153+
Kernel::parse(kernel_slice)
146154
}
147155

148156
fn load_file_from_disk(
@@ -253,12 +261,9 @@ fn load_file_from_disk(
253261
Some(file_slice)
254262
}
255263

256-
fn load_kernel_file_from_disk(image: Handle, st: &SystemTable<Boot>) -> Option<&'static mut [u8]> {
257-
load_file_from_disk(KERNEL_FILENAME, image, st)
258-
}
259-
260264
/// Try to load a kernel from a TFTP boot server.
261265
fn load_kernel_file_from_tftp_boot_server(
266+
name: &str,
262267
image: Handle,
263268
st: &SystemTable<Boot>,
264269
) -> Option<&'static mut [u8]> {

0 commit comments

Comments
 (0)