From 7358344616f4ddce2dabf9bbe5a00397484b5728 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Tue, 8 Feb 2022 14:20:37 -0700 Subject: [PATCH] Re-enable support for live kernel --- src/os/uefi/arch/x86_64/mod.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/os/uefi/arch/x86_64/mod.rs b/src/os/uefi/arch/x86_64/mod.rs index ad5ade1..aba74d9 100644 --- a/src/os/uefi/arch/x86_64/mod.rs +++ b/src/os/uefi/arch/x86_64/mod.rs @@ -223,7 +223,35 @@ fn inner() -> Result<()> { } println!("Loading Kernel..."); - let kernel = { + let kernel = if let Ok((_i, mut kernel_file)) = find("\\redox_bootloader\\kernel") { + let info = kernel_file.info()?; + let len = info.FileSize; + + let kernel = unsafe { + let ptr = allocate_zero_pages((len as usize + page_size - 1) / page_size)?; + slice::from_raw_parts_mut( + ptr as *mut u8, + len as usize + ) + }; + + let mut i = 0; + for mut chunk in kernel.chunks_mut(4 * MB) { + print!("\r{}% - {} MB", i as u64 * 100 / len, i / MB); + + let count = kernel_file.read(&mut chunk)?; + if count == 0 { + break; + } + //TODO: return error instead of assert + assert_eq!(count, chunk.len()); + + i += count; + } + println!("\r{}% - {} MB", i as u64 * 100 / len, i / MB); + + kernel + } else { let mut fs = redoxfs()?; let root = fs.header.1.root; -- GitLab