Crates.io | atags |
lib.rs | atags |
version | 0.0.2 |
source | src |
created_at | 2022-05-28 15:57:20.189121 |
updated_at | 2022-05-28 16:00:07.341593 |
description | Parsing of linux ATAG data structures |
homepage | |
repository | https://github.com/VictorKoenders/tkern |
max_upload_size | |
id | 595795 |
size | 10,950 |
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),
}
}
nightly
Will enable the nightly strict_provenance
feature in this crate.