构建推动因素

本文档演示了如何构建驱动程序,重点介绍如何构建 定义软件包、组件和驱动程序的最佳做法。

概念

推动因素是一种组件,因此在更进一步之前,请务必 来了解如何 build 组件

驱动程序软件包 GN 模板

驱动程序作者应使用驱动程序专用 GN 模板。 Fuchsia 定义了以下 GN 模板,以定义驱动程序组件和 驱动程序软件包:

下面是一个假设的软件包,其中包含一个驱动程序组件:

import("//build/drivers.gni")


driver_bind_rules("bind") {
    rules = "meta/driver.bind"
    bind_output = "my-driver.bindbc"
}

fuchsia_driver("driver") {
  output_name = "my-driver"
  sources = [ "my_driver.cc" ]
}

fuchsia_driver_component("component") {
  component_name = "my-driver"
  deps = [
      ":driver",
      ":bind",
  ]
}

fuchsia_driver_package("my_package") {
  deps = [ ":component" ]
}

请注意以下详细信息: * fuchsia_driver_component() 模板会声明组件。 它取决于驱动程序共享库 (fuchsia_driver()), 作为驱动程序的绑定规则 (driver_bind_rules())。 * fuchsia_driver_component() 会自动生成组件清单 我们将在后面的部分中了解具体过程。 * 组件和包名称均派生自其目标名称。 在上例中,这些名称一起构成了 启动组件: fuchsia-pkg://fuchsia.com/my_package#meta/my_driver.cm

自动生成的组件清单是什么样的?

当您使用fuchsia_driver_component模板时,它会自动生成 驱动程序的组件清单对于上面的示例,它应如下所示: 以下

{
    program: {
        runner: 'driver',
        binary: driver/my_driver.so,
        bind: meta/bind/my_driver_bind.bindbc
    }
}

请注意以下详细信息: * binary 字段指向驱动程序共享库。 * bind 字段指向驱动程序的绑定规则文件。

我可以添加自己的组件清单吗?

当然可以!要编写您自己的组件清单,只需将 将其作为文件导入项目,然后更新 fuchsia_driver_component 指向它:

fuchsia_driver_component("component") {
  component_name = "my-driver"
  manifest = "meta/my-own-manifest.cml
  deps = [
      ":driver",
      ":bind",
      ]
}

在 build 中加入您的驱动程序。

为了将驱动程序加入到 build 中,需要进入 两个特殊的地方。

第一个是 //build/drivers/all_drivers_list.txt。 如果不这样做,则会出现一个构建错误来提醒您。 all_drivers_list.txt 文件应包含包含的所有驱动程序标签 在 fuchsia 代码库中。此列表会始终保持最新状态,因此驱动程序框架 团队可以确保继续支持和更新所有驱动程序。

如果您的驱动程序只能针对 x64 进行构建,请将其添加到:

//build/drivers/all_drivers_lists_x64.txt

如果您的驱动程序只能针对 arm64 进行构建,请将其添加到:

//build/drivers/all_drivers_lists_arm64.txt

第二个位置是: //bundles:drivers-build-only。 如果您忘记在此处添加驱动程序,还会出现构建错误。 要添加到此列表,您应确保将自己的驱动程序组件添加到 源位置中的本地驱动程序组。

例如,对于在 //src/ui/input/drivers 下添加的新驱动程序,您应: 向 //src/ui/input:drivers 添加一个条目。

对于drivers-build-only目标,您需要确保添加 指向 fuchsia_driver_components() 目标的路径,而不是指向 fuchsia_driver() 目标。

在设备上添加司机

如果您想在实际设备上提供司机,有两种选择: 您可以将该驱动程序包含在 bootfs 中或作为基础软件包中添加。

在 bootfs 中添加驱动程序

您可以根据产品、开发板或 本地环境您需要将路径添加到 “fuchsia_driver_component”会定位到以下三个地理位置之一:

  • 商品://products 相关 .gni 文件中的 product_bootfs_labels
  • 白板://boards 中相关 .gni 文件中的 board_bootfs_labels
  • 本地:fx argsboard_bootfs_labels

将驱动程序包含在基础软件包中

您可以将驱动程序包含在基础软件包中,具体取决于产品、主板或 本地环境您需要将路径添加到 “fuchsia_package”会定位到以下三个地理位置之一:

  • 商品://products 相关 .gni 文件中的 product_driver_package_labels
  • 白板://boards 中相关 .gni 文件中的 board_driver_package_labels
  • 本地:fx argsbase_driver_package_labels