pub struct Fdt {
pub boot_cpuid_phys: u32,
pub memory_reservations: Vec<MemoryReservation>,
pub root: Node,
/* private fields */
}Expand description
可编辑的 FDT
Fields§
§boot_cpuid_phys: u32引导 CPU ID
memory_reservations: Vec<MemoryReservation>内存保留块
root: Node根节点
Implementations§
Source§impl Fdt
impl Fdt
Sourcepub fn from_bytes(data: &[u8]) -> Result<Self, FdtError>
pub fn from_bytes(data: &[u8]) -> Result<Self, FdtError>
从原始 FDT 数据解析
Sourcepub fn rebuild_phandle_cache(&mut self)
pub fn rebuild_phandle_cache(&mut self)
重建 phandle 缓存
Sourcepub fn resolve_alias(&self, alias: &str) -> Option<&str>
pub fn resolve_alias(&self, alias: &str) -> Option<&str>
解析别名,返回对应的完整路径
从 /aliases 节点查找别名对应的路径
Sourcepub fn find_by_phandle(&self, phandle: Phandle) -> Option<NodeRef<'_>>
pub fn find_by_phandle(&self, phandle: Phandle) -> Option<NodeRef<'_>>
根据 phandle 查找节点 返回 (节点引用, 完整路径)
Sourcepub fn find_by_phandle_mut(&mut self, phandle: Phandle) -> Option<NodeMut<'_>>
pub fn find_by_phandle_mut(&mut self, phandle: Phandle) -> Option<NodeMut<'_>>
根据 phandle 查找节点(可变) 返回 (节点可变引用, 完整路径)
Sourcepub fn apply_overlay_with_delete(
&mut self,
overlay: &Fdt,
delete_disabled: bool,
) -> Result<(), FdtError>
pub fn apply_overlay_with_delete( &mut self, overlay: &Fdt, delete_disabled: bool, ) -> Result<(), FdtError>
删除节点(通过设置 status = “disabled” 或直接删除)
如果 overlay 中的节点有 status = “disabled”,则禁用目标节点
Sourcepub fn remove_node(&mut self, path: &str) -> Result<Option<Node>, FdtError>
pub fn remove_node(&mut self, path: &str) -> Result<Option<Node>, FdtError>
通过精确路径删除节点及其子树 只支持精确路径匹配,不支持模糊匹配 支持通过别名删除节点,并自动删除对应的别名条目
§参数
path: 删除路径,格式如 “soc/gpio@1000” 或 “/soc/gpio@1000” 或别名
§返回值
Ok(Option<Node>): 如果找到并删除了节点,返回被删除的节点;如果路径不存在,返回 None
Err(FdtError): 如果路径格式无效
§示例
let mut fdt = Fdt::new();
// 先添加节点再删除
let mut soc = Node::new("soc");
soc.add_child(Node::new("gpio@1000"));
fdt.root.add_child(soc);
// 精确删除节点(使用完整路径)
let removed = fdt.remove_node("/soc/gpio@1000")?;
assert!(removed.is_some());
// 尝试删除不存在的节点会返回错误
let not_found = fdt.remove_node("/soc/nonexistent");
assert!(not_found.is_err());Sourcepub fn all_nodes(&self) -> impl Iterator<Item = NodeRef<'_>> + '_
pub fn all_nodes(&self) -> impl Iterator<Item = NodeRef<'_>> + '_
获取所有节点的深度优先迭代器
返回包含根节点及其所有子节点的迭代器,按照深度优先遍历顺序
pub fn all_nodes_mut(&mut self) -> impl Iterator<Item = NodeMut<'_>> + '_
pub fn find_by_path<'a>( &'a self, path: &str, ) -> impl Iterator<Item = NodeRef<'a>>
pub fn get_by_path<'a>(&'a self, path: &str) -> Option<NodeRef<'a>>
pub fn get_by_path_mut<'a>(&'a mut self, path: &str) -> Option<NodeMut<'a>>
pub fn find_compatible(&self, compatible: &[&str]) -> Vec<NodeRef<'_>>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Fdt
impl RefUnwindSafe for Fdt
impl Send for Fdt
impl Sync for Fdt
impl Unpin for Fdt
impl UnwindSafe for Fdt
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)