Documentation ¶
Overview ¶
Package multiboot implements bootloading multiboot kernels as defined by https://www.gnu.org/software/grub/manual/multiboot/multiboot.html.
Package multiboot crafts kexec segments that can be used with the kexec_load system call.
Index ¶
Constants ¶
const DebugPrefix = "MULTIBOOT_DEBUG_INFO:"
DebugPrefix is a prefix that some messages are printed with for tests to parse.
Variables ¶
var ( // ErrHeaderNotFound indicates that a multiboot header magic was not // found in the given binary. ErrHeaderNotFound = errors.New("multiboot header not found") // ErrFlagsNotSupported indicates that a valid multiboot header // contained flags this package does not support (yet). ErrFlagsNotSupported = errors.New("multiboot header flags not supported yet") )
Functions ¶
func Load ¶
Load parses and loads a multiboot `kernel` using kexec_load.
debug turns on debug logging.
Load can set up an arbitrary number of modules, and takes care of the multiboot info structure, including the memory map.
After Load is called, kexec.Reboot() is ready to be called any time to stop Linux and execute the loaded kernel.
Types ¶
type Description ¶
type Description struct { Status string `json:"status"` Flags uint32 `json:"flags"` MemLower uint32 `json:"mem_lower"` MemUpper uint32 `json:"mem_upper"` MmapAddr uint32 `json:"mmap_addr"` MmapLength uint32 `json:"mmap_length"` CmdLine string `json:"cmdline"` Bootloader string `json:"bootloader"` Mmap []MemoryMap `json:"mmap"` Modules []ModuleDesc `json:"modules"` }
Description stores representation of multiboot information passed to a final kernel used for for debugging and testing.
type MemoryMap ¶
type MemoryMap struct { // Size is the size of the associated structure in bytes. Size uint32 // BaseAddr is the starting address. BaseAddr uint64 // Length is the size of the memory region in bytes. Length uint64 // Type is the variety of address range represented. Type uint32 }
MemoryMap represents a reserved range of memory passed via the multiboot Info header.
func (MemoryMap) MarshalJSON ¶
MarshalJSON implements json.Marshaler
func (*MemoryMap) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler
type ModuleDesc ¶
type ModuleDesc struct { Start uint32 `json:"start"` End uint32 `json:"end"` CmdLine string `json:"cmdline"` SHA256 string `json:"sha256"` }
ModuleDesc is a debug representation of loaded module.
type Modules ¶
type Modules []Module
Modules is a range of module with a Closer interface
func LazyOpenModules ¶
LazyOpenModules assigns modules to be opened as files.
Each module is a path followed by optional command-line arguments, e.g. []string{"./module arg1 arg2", "./module2 arg3 arg4"}.
func OpenModules ¶
OpenModules open modules as files and fill a range of `Module` struct
Each module is a path followed by optional command-line arguments, e.g. []string{"./module arg1 arg2", "./module2 arg3 arg4"}.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
trampoline
Package trampoline sets machine to a specific state defined by multiboot v1 spec and jumps to the intended kernel.
|
Package trampoline sets machine to a specific state defined by multiboot v1 spec and jumps to the intended kernel. |