linux

package
v0.0.0-...-9c233c6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const SetupHeaderMagic = 0x53726448 // "HdrS"

SetupHeaderMagic is the required value of the SetupHeader.Header field.

View Source
const ZeropageSize = 0x1000

ZeropageSize is the size of the zeropage in bytes (4K).

Variables

This section is empty.

Functions

This section is empty.

Types

type BootE820Entry

type BootE820Entry struct {
	Addr uint64 // __u64 addr
	Size uint64 // __u64 size
	Type uint32 // __u32 type
}

bootE820Entry represents the E820 memory region entry of the boot protocol ABI. It corresponds to struct boot_e820_entry. But since struct boot_e820_entry is packed, they don't have exactly the same layout.

type BootParams

type BootParams struct {
	E820Entries uint8 // 	__u8  e820_entries;				/* 0x1e8 */

	Hdr SetupHeader // 	struct setup_header hdr;    /* setup header */	/* 0x1f1 */

	E820Table [128]BootE820Entry // 	struct boot_e820_entry e820_table[E820_MAX_ENTRIES_ZEROPAGE]; /* 0x2d0 */
	// contains filtered or unexported fields
}

BootParams is the so-called "zeropage". It corresponds to struct boot_params. Since struct boot_params is packed, BootParams doesn't have exactly the same layout. Instead, it implements BinaryUnmarshaler and BinaryMarshaler.

func (*BootParams) MarshalBinary

func (bp *BootParams) MarshalBinary() (data []byte, err error)

MarshalBinary marshals the params into the layout of struct boot_params.

func (*BootParams) UnmarshalBinary

func (bp *BootParams) UnmarshalBinary(data []byte) error

UnmarshalBinary unmarshals a packed struct boot_params into the params. It returns io.ErrUnexpectedEOF if the given data is too short.

type Loader

type Loader struct {

	// Kernel is a bzImage.
	Kernel []byte

	// Initrd, if set, is a compressed cpio of the initial ramdisk.
	Initrd []byte

	// Cmdline is the kernel command line.
	Cmdline string
}

Loader prepares the VM to boot a 64-bit Linux kernel in long mode.

func (*Loader) LoadMemory

func (l *Loader) LoadMemory(info vmm.VMInfo, mem []byte) error

func (*Loader) LoadVCPU

func (l *Loader) LoadVCPU(info vmm.VMInfo, slot int, regs *kvm.Regs, sregs *kvm.Sregs) error

type SetupHeader

type SetupHeader struct {
	SetupSects          uint8  // __u8 setup_sects
	RootFlags           uint16 // __u16 root_flags
	Syssize             uint32 // __u32 syssize
	RamSize             uint16 // __u16 ram_size
	VidMode             uint16 // __u16 vid_mode
	RootDev             uint16 // __u16 root_dev
	BootFlag            uint16 // __u16 boot_flag
	Jump                uint16 // __u16 jump
	Header              uint32 // __u32 header
	Version             uint16 // __u16 version
	RealmodeSwtch       uint32 // __u32 realmode_swtch
	StartSysSeg         uint16 // __u16 start_sys_seg
	KernelVersion       uint16 // __u16 kernel_version
	TypeOfLoader        uint8  // __u8 type_of_loader
	Loadflags           uint8  // __u8 loadflags
	SetupMoveSize       uint16 // __u16 setup_move_size
	Code32Start         uint32 // __u32 code32_start
	RamdiskImage        uint32 // __u32 ramdisk_image
	RamdiskSize         uint32 // __u32 ramdisk_size
	BootsectKludge      uint32 // __u32 bootsect_kludge
	HeapEndPtr          uint16 // __u16 heap_end_ptr
	ExtLoaderVer        uint8  // __u8 ext_loader_ver
	ExtLoaderType       uint8  // __u8 ext_loader_type
	CmdLinePtr          uint32 // __u32 cmd_line_ptr
	InitrdAddrMax       uint32 // __u32 initrd_addr_max
	KernelAlignment     uint32 // __u32 kernel_alignment
	RelocatableKernel   uint8  // __u8 relocatable_kernel
	MinAlignment        uint8  // __u8 min_alignment
	Xloadflags          uint16 // __u16 xloadflags
	CmdlineSize         uint32 // __u32 cmdline_size
	HardwareSubarch     uint32 // __u32 hardware_subarch
	HardwareSubarchData uint64 // __u64 hardware_subarch_data
	PayloadOffset       uint32 // __u32 payload_offset
	PayloadLength       uint32 // __u32 payload_length
	SetupData           uint64 // __u64 setup_data
	PrefAddress         uint64 // __u64 pref_address
	InitSize            uint32 // __u32 init_size
	HandoverOffset      uint32 // __u32 handover_offset
	KernelInfoOffset    uint32 // __u32 kernel_info_offset
}

SetupHeader is the part of the zeropage that explains how to boot the kernel. A boot loader usually copies the SetupHeader from of the kernel image's BootParams, customizes it, and copies it to the zeropage in memory. SetupHeader corresponds to struct setup_header, but they don't have exactly the same layout because the C struct is packed.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL