#multiboot2 #kernel #boot #bootloader

no-std multiboot2

Library that assists parsing the Multiboot2 Information Structure (MBI) from Multiboot2-compliant bootloaders, such as GRUB. It supports all tags from the specification including full support for the sections of ELF files. This library is no_std and can be used in a Multiboot2-kernel.

33 releases (17 breaking)

0.19.0 Sep 21, 2023
0.18.1 Jul 13, 2023
0.17.0 Jul 12, 2023
0.15.1 Mar 18, 2023
0.3.1 Oct 31, 2016

#88 in Operating systems

Download history 594/week @ 2023-11-01 610/week @ 2023-11-08 487/week @ 2023-11-15 517/week @ 2023-11-22 710/week @ 2023-11-29 469/week @ 2023-12-06 537/week @ 2023-12-13 518/week @ 2023-12-20 358/week @ 2023-12-27 385/week @ 2024-01-03 454/week @ 2024-01-10 445/week @ 2024-01-17 419/week @ 2024-01-24 333/week @ 2024-01-31 247/week @ 2024-02-07 579/week @ 2024-02-14

1,620 downloads per month
Used in 2 crates

MIT/Apache

190KB
4K SLoC

multiboot2

Build crates.io docs

Library that assists parsing the Multiboot2 Information Structure (MBI) from Multiboot2-compliant bootloaders, such as GRUB. It supports all tags from the specification including full support for the sections of ELF files. This library is no_std and can be used in a Multiboot2-kernel.

It follows the Multiboot 2.0 specification at https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html and the ELF 64 specification at http://www.uclibc.org/docs/elf-64-gen.pdf.

Features and no_std Compatibility

This library is always no_std without alloc. However, the default builder- feature requires the alloc-crate and an #[global_allocator] to be available. You need the builder only if you want to construct new boot information structures at runtime. For parsing, this is not relevant, and you can deactivate the default feature.

Background: The Multiboot 2 Information Structure

The Multiboot information structure looks like this:

Field Type
total size u32
reserved u32
tags variable
end tag = (0, 8) (u32, u32)

There are many different types of tags, but they all have the same beginning:

Field Type
type u32
size u32
other fields variable

All tags and the mbi itself are 8-byte aligned. The last tag must be the end tag, which is a tag of type 0 and size 8.

MSRV

The MSRV is 1.69.0 stable.

License & Contribution

See main README file.

Dependencies

~2MB
~41K SLoC