Skip to content

Commit 07eb1b6

Browse files
committed
Add support for loading ramdisk from disk
1 parent 5beca26 commit 07eb1b6

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

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

128136
bootloader_x86_64_common::load_and_switch_to_kernel(
@@ -133,15 +141,15 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
133141
);
134142
}
135143

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

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

147155
fn load_file_from_disk(
@@ -252,12 +260,9 @@ fn load_file_from_disk(
252260
Some(file_slice)
253261
}
254262

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

0 commit comments

Comments
 (0)