pub struct Multiboot2Header<'a>(/* private fields */);
Expand description
Wrapper type around a pointer to the Multiboot2 header.
The Multiboot2 header is the Multiboot2BasicHeader
followed
by all tags (see crate::tags::HeaderTagType
).
Use this if you get a pointer to the header and just want
to parse it. If you want to construct the type by yourself,
please look at HeaderBuilder
(requires the builder
feature).
Implementations§
Source§impl<'a> Multiboot2Header<'a>
impl<'a> Multiboot2Header<'a>
Sourcepub unsafe fn load(ptr: *const Multiboot2BasicHeader) -> Result<Self, LoadError>
pub unsafe fn load(ptr: *const Multiboot2BasicHeader) -> Result<Self, LoadError>
Public constructor for this type with various validations.
If the header is invalid, it returns a LoadError
.
This may be because:
addr
is a null-pointeraddr
isn’t 8-byte aligned- the magic value of the header is not present
- the checksum field is invalid
§Safety
This function may produce undefined behaviour, if the provided addr
is not a valid
Multiboot2 header pointer.
Examples found in repository?
9fn main() {
10 // We create a Multiboot2 header during runtime here. A more practical
11 // example, however, would be that you parse the header from kernel binary
12 // at runtime.
13 let mb2_hdr_bytes = Builder::new(HeaderTagISA::I386)
14 .relocatable_tag(RelocatableHeaderTag::new(
15 HeaderTagFlag::Required,
16 0x1337,
17 0xdeadbeef,
18 4096,
19 RelocatableHeaderTagPreference::None,
20 ))
21 .information_request_tag(InformationRequestHeaderTag::new(
22 HeaderTagFlag::Required,
23 &[
24 MbiTagType::Cmdline.into(),
25 MbiTagType::BootLoaderName.into(),
26 ],
27 ))
28 .build();
29
30 // Cast bytes in vector to Multiboot2 information structure
31 let ptr = mb2_hdr_bytes.as_bytes().as_ptr();
32 let mb2_hdr = unsafe { Multiboot2Header::load(ptr.cast()) };
33 let mb2_hdr = mb2_hdr.unwrap();
34 println!("{mb2_hdr:#?}");
35}
Sourcepub fn find_header(buffer: &[u8]) -> Result<Option<(&[u8], u32)>, LoadError>
pub fn find_header(buffer: &[u8]) -> Result<Option<(&[u8], u32)>, LoadError>
Find the header in a given slice.
If it succeeds, it returns a tuple consisting of the subslice containing
just the header and the index of the header in the given slice.
If it fails (either because the header is not properly 64-bit aligned
or because it is truncated), it returns a LoadError
.
If there is no header, it returns None
.
Sourcepub const fn verify_checksum(&self) -> bool
pub const fn verify_checksum(&self) -> bool
Wrapper around Multiboot2BasicHeader::verify_checksum
.
Sourcepub const fn header_magic(&self) -> u32
pub const fn header_magic(&self) -> u32
Wrapper around Multiboot2BasicHeader::header_magic
.
Sourcepub const fn arch(&self) -> HeaderTagISA
pub const fn arch(&self) -> HeaderTagISA
Wrapper around Multiboot2BasicHeader::arch
.
Sourcepub const fn length(&self) -> u32
pub const fn length(&self) -> u32
Wrapper around Multiboot2BasicHeader::length
.
Sourcepub const fn checksum(&self) -> u32
pub const fn checksum(&self) -> u32
Wrapper around Multiboot2BasicHeader::checksum
.
Sourcepub const fn calc_checksum(magic: u32, arch: HeaderTagISA, length: u32) -> u32
pub const fn calc_checksum(magic: u32, arch: HeaderTagISA, length: u32) -> u32
Wrapper around Multiboot2BasicHeader::calc_checksum
.
Sourcepub fn information_request_tag(&self) -> Option<&InformationRequestHeaderTag>
pub fn information_request_tag(&self) -> Option<&InformationRequestHeaderTag>
Search for the InformationRequestHeaderTag
header tag.
Sourcepub fn address_tag(&self) -> Option<&AddressHeaderTag>
pub fn address_tag(&self) -> Option<&AddressHeaderTag>
Search for the AddressHeaderTag
header tag.
Sourcepub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
pub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
Search for the EntryAddressHeaderTag
header tag.
Sourcepub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
pub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
Search for the EntryEfi32HeaderTag
header tag.
Sourcepub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
pub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
Search for the EntryEfi64HeaderTag
header tag.
Sourcepub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
pub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
Search for the ConsoleHeaderTag
header tag.
Sourcepub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
pub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
Search for the FramebufferHeaderTag
header tag.
Sourcepub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
pub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
Search for the ModuleAlignHeaderTag
header tag.
Sourcepub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
pub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
Search for the EfiBootServiceHeaderTag
header tag.
Sourcepub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
pub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
Search for the RelocatableHeaderTag
header tag.