Skip to content

Commit 851c8dd

Browse files
committed
Add support for loading ramdisk from disk
1 parent 845d873 commit 851c8dd

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

uefi/src/main.rs

Lines changed: 14 additions & 2 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,6 +141,10 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
133141
);
134142
}
135143

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

0 commit comments

Comments
 (0)