#![no_main] #![no_std] use core::time::Duration; use log::info; use uefi::print; use uefi::prelude::*; use uefi::Result; use uefi::Status; use uefi::CString16; use uefi::fs::{FileSystem, FileSystemResult}; use uefi::proto::media::fs::SimpleFileSystem; use uefi::boot::{self, ScopedProtocol}; extern crate alloc; use alloc::vec::Vec; #[entry] fn main() -> Status { uefi::helpers::init().unwrap(); info!("Hello from bootloader!"); load_kernel().unwrap(); info!("Entry fuction regained control!"); boot::stall(Duration::from_secs(10)); info!("exiting!"); Status::SUCCESS } fn load_kernel() -> Result { info!("Entered load_kernel function"); let kernel = read_file(r"\EFI\BOOT\kernel.elf").unwrap(); info!("Read kernel into memory!"); print!("{:x?}", kernel[..10].to_vec()); info!("I printed my dump"); return Ok(()); } fn read_file(path: &str) -> FileSystemResult> { let path: CString16 = CString16::try_from(path).unwrap(); let fs: ScopedProtocol = boot::get_image_file_system(boot::image_handle()).unwrap(); let mut fs = FileSystem::new(fs); fs.read(path.as_ref()) }