Skip to main content

load_x86_mptable

Function load_x86_mptable 

Source
pub fn load_x86_mptable<F>(
    importer: &mut impl ImageLoad<X86Register>,
    kernel_image: &mut F,
    initrd: Option<InitrdConfig<'_>>,
    cmdline: &CString,
    mem_layout: &MemoryLayout,
    config: &MpTableConfig<'_>,
    reserved_memory_ranges: &[MemoryRange],
) -> Result<LoadInfo, Error>
where F: Read + Seek,
Expand description

Loads an uncompressed x86-64 ELF kernel, and an optional initrd, for Linux direct boot that describes the processors and interrupt routing with Intel MP 1.4 tables instead of ACPI, and that has no SMBIOS or other firmware tables. Returns where the kernel and initrd were loaded.

It also imports the boot data at fixed addresses: the MP tables, GDT, and zero page in 0x0..0x3000, the page tables that identity-map the low 4 GiB in 0x4000..0xa000, and the NUL-terminated command line, of up to 64 KiB, in 0x20000..0x30000. RAM must back these ranges and the ISA hole, 0xa0000..0x100000, and no RAM may lie in the MMIO gap from 3 GiB to 4 GiB.

The kernel and initrd must lie in RAM below 4 GiB, outside the boot data, the ISA hole, reserved_memory_ranges, and each other. The reserved ranges must be sorted, disjoint, page-aligned, non-empty ranges of RAM outside the boot data and the ISA hole. The e820 map reports them and the ISA hole as reserved.