[][src]Crate linux_loader

A Linux kernel image loading crate.

This crate offers support for loading raw ELF (vmlinux), compressed big zImage (bzImage) and PE (Image) kernel images. ELF support includes the Linux and PVH boot protocols. Support for any other kernel image format can be added by implementing the KernelLoader and BootConfigurator.

Platform support

  • x86_64
  • ARM64

Example - load an ELF kernel and configure boot params with the PVH protocol

This example shows how to prepare a VM for booting with an ELF kernel, following the PVH boot protocol.

This example is not tested
fn build_boot_params() -> (hvm_start_info, Vec<hvm_memmap_table_entry>) {
  let mut start_info = hvm_start_info::default();
  let memmap_entry = hvm_memmap_table_entry {
      addr: 0x7000,
      size: 0,
      type_: E820_RAM,
      reserved: 0,
  };
  start_info.magic = XEN_HVM_START_MAGIC_VALUE;
  start_info.version = 1;
  start_info.nr_modules = 0;
  start_info.memmap_entries = 0;
  (start_info, vec![memmap_entry])
}

fn main() {
  let guest_mem = create_guest_memory();
  let elf_pvh_image = create_elf_pvh_image();
  // Load the kernel image.
  let loader_result = Elf::load(
      &guest_mem, None, &mut Cursor::new(&elf_pvh_image), None
  ).unwrap();

  // Build boot parameters.
  let (mut start_info, memmap_entries) = build_boot_params();
  // Address in guest memory where the `start_info` struct will be written.
  let start_info_addr = GuestAddress(0x6000);
  // Address in guest memory where the memory map will be written.
  let memmap_addr = GuestAddress(0x7000);
  start_info.memmap_paddr = memmap_addr.raw_value();

  // Write boot parameters in guest memory.
  let mut boot_params = BootParams::new::<hvm_start_info>(&start_info, start_info_addr);
  boot_params.set_sections::<hvm_memmap_table_entry>(&memmap_entries, memmap_addr);
  PvhBootConfigurator::write_bootparams::<GuestMemoryMmap>(boot_params, &guest_mem).unwrap();
}

Modules

cmdline

Helper for creating valid kernel command line strings.

configurator

Traits and structs for configuring and loading boot parameters.

elf
loader

Traits and structs for loading kernels into guest memory.

start_info