Skip to main content

minimal/
minimal.rs

1use multiboot2_header::{
2    Builder, Header, HeaderTagFlag, HeaderTagISA, InformationRequestHeaderTag, MaybeDynSized,
3    MbiTagType, RelocatableHeaderTag, RelocatableHeaderTagPreference,
4};
5
6/// Small example that creates a Multiboot2 header and parses it afterwards.
7fn main() {
8    // We create a Multiboot2 header during runtime here. A more practical
9    // example, however, would be that you parse the header from kernel binary
10    // at runtime.
11    let header_bytes = Builder::new(HeaderTagISA::I386)
12        .relocatable_tag(RelocatableHeaderTag::new(
13            HeaderTagFlag::Required,
14            0x1337,
15            0xdeadbeef,
16            4096,
17            RelocatableHeaderTagPreference::None,
18        ))
19        .information_request_tag(InformationRequestHeaderTag::new(
20            HeaderTagFlag::Required,
21            &[
22                MbiTagType::Cmdline.into(),
23                MbiTagType::BootLoaderName.into(),
24            ],
25        ))
26        .build();
27
28    let header = unsafe { Header::load(header_bytes.as_ptr()) }.unwrap();
29    println!("{header:#?}");
30}