Skip to content

Commit f975de9

Browse files
committed
add some comments
1 parent 92dd42d commit f975de9

File tree

2 files changed

+30
-24
lines changed

2 files changed

+30
-24
lines changed

src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ pub fn create_bios_disk_image(
123123
Ok(())
124124
}
125125

126+
/// Prepare a folder for use with booting over UEFI_PXE. The dhcp server should
127+
/// have the filename option set to `bootloader`.
126128
pub fn create_uefi_pxe_tftp_folder(kernel_binary: &Path, out_path: &Path) -> anyhow::Result<()> {
127129
let bootloader_path = Path::new(env!("UEFI_BOOTLOADER_PATH"));
128130

uefi/src/main.rs

+28-24
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
130130
Kernel::parse(kernel_slice)
131131
}
132132

133+
/// Try to load a kernel file from the boot device.
133134
fn load_kernel_file(image: Handle, st: &SystemTable<Boot>) -> Option<&'static mut [u8]> {
134135
load_kernel_file_from_disk(image, st)
135136
.or_else(|| load_kernel_file_from_tftp_boot_server(image, st))
@@ -189,59 +190,62 @@ fn load_kernel_file_from_disk(image: Handle, st: &SystemTable<Boot>) -> Option<&
189190
Some(kernel_slice)
190191
}
191192

193+
/// Try to load a kernel from a TFTP boot server.
192194
fn load_kernel_file_from_tftp_boot_server(
193195
image: Handle,
194196
st: &SystemTable<Boot>,
195197
) -> Option<&'static mut [u8]> {
196-
let ref this = st.boot_services();
198+
let this = st.boot_services();
197199

198-
let file_system_raw = {
199-
let ref this = st.boot_services();
200-
let loaded_image = this
201-
.handle_protocol::<LoadedImage>(image)
202-
.expect("Failed to retrieve `LoadedImage` protocol from handle");
203-
let loaded_image = unsafe { &*loaded_image.get() };
200+
// Try to locate a `BaseCode` protocol on the boot device.
204201

205-
let device_handle = loaded_image.device();
202+
let loaded_image = this
203+
.handle_protocol::<LoadedImage>(image)
204+
.expect("Failed to retrieve `LoadedImage` protocol from handle");
205+
let loaded_image = unsafe { &*loaded_image.get() };
206206

207-
let device_path = this
208-
.handle_protocol::<DevicePath>(device_handle)
209-
.expect("Failed to retrieve `DevicePath` protocol from image's device handle");
210-
let mut device_path = unsafe { &*device_path.get() };
207+
let device_handle = loaded_image.device();
211208

212-
let device_handle = this
213-
.locate_device_path::<BaseCode>(&mut device_path)
214-
.expect("Failed to locate `BaseCode` protocol on device path");
209+
let device_path = this
210+
.handle_protocol::<DevicePath>(device_handle)
211+
.expect("Failed to retrieve `DevicePath` protocol from image's device handle");
212+
let mut device_path = unsafe { &*device_path.get() };
215213

216-
this.handle_protocol::<BaseCode>(device_handle)
217-
}
218-
.unwrap();
219-
let base_code = unsafe { &mut *file_system_raw.get() };
214+
let device_handle = this.locate_device_path::<BaseCode>(&mut device_path).ok()?;
215+
216+
let base_code_raw = this.handle_protocol::<BaseCode>(device_handle).unwrap();
217+
let base_code = unsafe { &mut *base_code_raw.get() };
220218

219+
// Find the TFTP boot server.
221220
let mode = base_code.mode();
222221
assert!(mode.dhcp_ack_received);
223222
let dhcpv4: &DhcpV4Packet = mode.dhcp_ack.as_ref();
224223
let server_ip = IpAddress::new_v4(dhcpv4.bootp_si_addr);
225224

226225
let filename = CStr8::from_bytes_with_nul(b"kernel-x86_64\0").unwrap();
227-
let file_size = base_code.tftp_get_file_size(&server_ip, filename).unwrap();
228226

229-
let kernel_size = usize::try_from(file_size).unwrap();
227+
// Determine the kernel file size.
228+
let file_size = base_code
229+
.tftp_get_file_size(&server_ip, filename)
230+
.expect("Failed to query the kernel file size");
231+
let kernel_size =
232+
usize::try_from(file_size).expect("The kernel file size should fit into usize");
230233

234+
// Allocate some memory for the kernel file.
231235
let kernel_ptr = st
232236
.boot_services()
233237
.allocate_pages(
234238
AllocateType::AnyPages,
235239
MemoryType::LOADER_DATA,
236240
((kernel_size - 1) / 4096) + 1,
237241
)
238-
.unwrap() as *mut u8;
239-
unsafe { ptr::write_bytes(kernel_ptr, 0, kernel_size) };
242+
.expect("Failed to allocate memory for the kernel file") as *mut u8;
240243
let kernel_slice = unsafe { slice::from_raw_parts_mut(kernel_ptr, kernel_size) };
241244

245+
// Load the kernel file.
242246
base_code
243247
.tftp_read_file(&server_ip, filename, Some(kernel_slice))
244-
.unwrap();
248+
.expect("Failed to read kernel file from the TFTP boot server");
245249

246250
Some(kernel_slice)
247251
}

0 commit comments

Comments
 (0)