读取配置值

驱动程序可以使用组件框架的结构化配置来读取产品组装时提供的值(请参阅提供配置)。请参阅 C++Rust 驱动程序示例。

在 CML 中纳入配置使用情况

在驱动程序 CML 中,use 具有配置名称的 config 功能:

use: [
    {
        config: "fuchsia.power.SuspendEnabled",
        key: "suspend_enabled",
        type: "bool",
    },
],

设置 build

在 build 文件中,您需要手动声明清单目标,以便使用 build 目标生成用于访问配置的库:

C++

fuchsia_component_manifest("component-manifest") {
  component_name = "example_config_driver"
  manifest = "meta/config_driver.cml"
}

fuchsia_structured_config_cpp_elf_lib("example-config-driver-config") {
  cm_label = ":component-manifest"
}

fuchsia_driver_component("component") {
  cm_label = ":component-manifest"
  deps = [
    ":bind",
    ":driver",
  ]
  info = "meta/component-info.json"
}

fuchsia_cc_driver("driver") {
  output_name = "example_config_driver"
  sources = [ "config_driver.cc" ]
  deps = [
    ":example-config-driver-config",
    "//sdk/lib/driver/component/cpp",
    "//src/devices/lib/driver:driver_runtime",
  ]
}

Rust

fuchsia_component_manifest("manifest") {
  component_name = "example_config_driver_rust"
  manifest = "meta/config_driver.cml"
}

fuchsia_structured_config_rust_lib("example-config-driver-config") {
  cm_label = ":manifest"
}

fuchsia_driver_component("component") {
  cm_label = ":manifest"
  deps = [
    ":bind",
    ":driver",
  ]
  info = "meta/component-info.json"
}

fuchsia_rust_driver("driver") {
  edition = "2024"

  output_name = "example_config_driver_rust"
  sources = [ "src/lib.rs" ]
  deps = [
    ":example-config-driver-config",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_rust",
    "//sdk/lib/driver/component/rust",
    "//sdk/lib/driver/runtime/rust",
    "//sdk/rust/zx",
    "//third_party/rust_crates:log",
  ]
}

在代码中访问配置

现在,您可以使用生成的库在代码中访问配置值。

  1. 添加库依赖项:

    C++

    #include "examples/drivers/config/cpp/example_config_driver_config.h"
    

    Rust

    use example_config_driver_config::Config;
    
  2. 使用该库从驱动程序的启动实参中访问配置:

    C++

    auto config = take_config<example_config_driver_config::Config>();
    fdf::info("My config value is: {}", config.suspend_enabled());
    

    Rust

    let config = context.take_config::<Config>()?;
    info!("My config value is: {}", config.suspend_enabled);