Expand description
This is based on https://www.simtec.co.uk/products/SWLINUX/files/booting_article.html#appendix_tag_reference. Please open a pull request for missing tags.
To get started with this crate, create a Atags
struct with a given memory position. The iter()
method will return an iterator that returns Atag
entries.
use atags::{Atag, Atags};
let mut buffer = [
// Core tag
0x00, 0x00, 0x00, 0x05, // size
0x54, 0x41, 0x00, 0x01, // tag
0x00, 0x00, 0x00, 0x01, // flags
0x00, 0x00, 0x10, 0x00, // page_size
0x12, 0x34, 0x56, 0x78, // root_device_number
// Empty tag
0x0, 0x0, 0x0, 0x0, // size
0x0, 0x0, 0x0, 0x0, // tag
];
let ptr = core::ptr::NonNull::new(buffer.as_mut_ptr()).unwrap();
let tags = unsafe { Atags::new(ptr.cast()) };
for tag in tags.iter() {
// first tag is a core tag
match tag {
Atag::Core(core) => {
assert_eq!(core.flags, 1);
assert_eq!(core.page_size, 0x1000);
assert_eq!(core.root_device_number, 0x12345678);
},
// Do something with the other tags
// In this example we only get 1 core tag and nothing else
_ => panic!("Unknown tag {:?}", tag),
}
}
Features
nightly
Will enable the nightly strict_provenance
feature in this crate.
Structs
This tag must be used to start the list, it contains the basic information any bootloader must pass.
A raw headera. Used for debugging.
Location of a compressed ramdisk image, usually combined with an AtagRamDisk
. Can be used as an initial root file
system with the addition of a command line parameter of ‘root=/dev/ram’. This tag supersedes the original
ATAG_INITRD which used virtual addressing, this was a mistake and produced issues on some systems. All new
bootloaders should use this tag in preference.
Describes an area of physical memory the kernel is to use.
Describes how the (initial) ramdisk will be configured by the kernel, specifically this allows for the bootloader to
ensure the ramdisk will be large enough to take the decompressed initial ramdisk image the bootloader is passing
using AtagInitRd2
Tag for the board revision
Tag with 64 bit serial number of the board
Tag describing parameters for a framebuffer type display
Tag used to describe VGA text type displays.
Handler that points to a memory location that holds the tag definitions.
Enums
Determines which tag is in the given memory region.