unplugged-system/external/crosvm/x86_64/src/fdt.rs

44 lines
1.2 KiB
Rust

// Copyright 2018 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::fs::File;
use std::path::PathBuf;
use arch::android::create_android_fdt;
use cros_fdt::Error;
use cros_fdt::FdtWriter;
use crate::SetupData;
use crate::SetupDataType;
/// Creates a flattened device tree containing all of the parameters for the
/// kernel and returns it as `SetupData`.
///
/// # Arguments
///
/// * `android_fstab` - the File object for the android fstab
pub fn create_fdt(
android_fstab: File,
dump_device_tree_blob: Option<PathBuf>,
) -> Result<SetupData, Error> {
let mut fdt = FdtWriter::new(&[]);
// The whole thing is put into one giant node with some top level properties
let root_node = fdt.begin_node("")?;
create_android_fdt(&mut fdt, android_fstab)?;
fdt.end_node(root_node)?;
let fdt_final = fdt.finish()?;
if let Some(file_path) = dump_device_tree_blob {
std::fs::write(&file_path, &fdt_final)
.map_err(|e| Error::FdtDumpIoError(e, file_path.clone()))?;
}
Ok(SetupData {
data: fdt_final,
type_: SetupDataType::Dtb,
})
}