本文档演示了如何构建驱动程序,重点介绍如何构建 定义软件包、组件和驱动程序的最佳做法。
概念
推动因素是一种组件,因此在更进一步之前,请务必 来了解如何 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 args
的board_bootfs_labels
将驱动程序包含在基础软件包中
您可以将驱动程序包含在基础软件包中,具体取决于产品、主板或
本地环境您需要将路径添加到
“fuchsia_package
”会定位到以下三个地理位置之一:
- 商品:
//products
相关.gni
文件中的product_driver_package_labels
- 白板:
//boards
中相关.gni
文件中的board_driver_package_labels
- 本地:
fx args
的base_driver_package_labels