atags 0.0.2

Parsing of linux ATAG data structures
Documentation
  • Coverage
  • 100%
    64 out of 64 items documented1 out of 15 items with examples
  • Size
  • Source code size: 12.3 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.58 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 12s Average build duration of successful builds.
  • all releases: 12s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • VictorKoenders/tkern
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • VictorKoenders

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.