Trait linux_loader::loader::KernelLoader[][src]

pub trait KernelLoader {
    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
; }

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
[src]

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.
Loading content...

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]

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();
Loading content...