[−][src]Trait linux_loader::loader::KernelLoader
Trait that specifies kernel image loading support.
Required methods
fn load<F, M: GuestMemory>(
guest_mem: &M,
kernel_offset: Option<GuestAddress>,
kernel_image: &mut F,
highmem_start_address: Option<GuestAddress>
) -> Result<KernelLoaderResult> where
F: Read + Seek,
guest_mem: &M,
kernel_offset: Option<GuestAddress>,
kernel_image: &mut F,
highmem_start_address: Option<GuestAddress>
) -> Result<KernelLoaderResult> where
F: Read + Seek,
How to load a specific kernel image format into the guest memory.
Arguments
guest_mem
:GuestMemory
to load the kernel in.kernel_offset
: Usage varies between implementations.kernel_image
: Kernel image to be loaded.highmem_start_address
: Address where high memory starts.
Implementors
impl KernelLoader for Elf
[src]
fn load<F, M: GuestMemory>(
guest_mem: &M,
kernel_offset: Option<GuestAddress>,
kernel_image: &mut F,
highmem_start_address: Option<GuestAddress>
) -> Result<KernelLoaderResult> where
F: Read + Seek,
[src]
guest_mem: &M,
kernel_offset: Option<GuestAddress>,
kernel_image: &mut F,
highmem_start_address: Option<GuestAddress>
) -> Result<KernelLoaderResult> where
F: Read + Seek,
Loads a kernel from a vmlinux elf image into guest memory.
By default, the kernel is loaded into guest memory at offset phdr.p_paddr
specified
by the elf image. When used, kernel_offset
specifies a fixed offset from phdr.p_paddr
at which to load the kernel. If kernel_offset
is requested, the pvh_entry_addr
field
of the result will not be populated.
Arguments
guest_mem
:GuestMemory
to load the kernel in.kernel_offset
: Offset to be added to default kernel load address in guest memory.kernel_image
- Input vmlinux image.highmem_start_address
: Address where high memory starts.
Examples
let mem_size: usize = 0x1000000; let himem_start = GuestAddress(0x0); let kernel_addr = GuestAddress(0x200000); let gm = GuestMemoryMmap::from_ranges(&[(GuestAddress(0x0), mem_size)]).unwrap(); let mut kernel_image = vec![]; kernel_image.extend_from_slice(include_bytes!("test_elf.bin")); elf::Elf::load( &gm, Some(kernel_addr), &mut Cursor::new(&kernel_image), Some(himem_start), ).unwrap();