此 Codelab 将引导您完成使用 Bazel 构建系统在 Fuchsia 中定义新产品配置的整个过程。产品配置用于指定构成 Fuchsia 产品的软件功能、设置和软件包,而与运行该产品的硬件无关。
前提条件
- 熟悉 Fuchsia 的软件组装概念。
- 对 Bazel 构建规则有基本的了解。
什么是产品配置?
Fuchsia 中的产品配置定义了特定产品的用户体验。它与指定硬件特定详细信息的板级配置不同。产品配置通常包括:
- 平台设置:底层 Fuchsia 操作系统的设置(例如, build 类型、已启用的系统功能)。
- 产品设置:特定于产品体验的设置(例如,会话 shell、特定软件包)。
产品配置使用 BUILD.bazel 文件中的 fuchsia_product_configuration 规则进行定义。
编写产品配置
我们来了解如何定义产品配置并使用它来构建系统映像。
基本设置
产品配置主要是一个 JSON 对象(在 Starlark 中表示为字典),传递给 fuchsia_product_configuration 规则。
# //products/my_product/BUILD.bazel
load(
"@rules_fuchsia//fuchsia:assembly.bzl",
"fuchsia_product_configuration",
)
fuchsia_product_configuration(
name = "product_config",
product_config_json = {
"platform": {
"build_type": "eng",
"feature_set_level": "standard",
},
"product": {},
},
)
平台设置
配置字典中的 platform 键用于控制 Fuchsia 系统的各个方面。常见字段包括:
build_type:控制安全和优化级别。eng:工程 build。此 build 最适合用于调试,因为它启用了断言并停用了优化。userdebug:此 build 经过优化,与userbuild 类似,但启用了一些调试功能和工具。user:正式版 build。此 build 已完全优化,并且安全可靠。
feature_set_level:定义系统中包含的基本功能集。embeddable:引导加载程序的最小子集。此版本针对内存受限的环境进行了优化,不会自行更新。bootstrap:可启动,仅限串行。仅限/bootstrap领域。没有 netstack 或存储驱动程序。主要用于板级启动。utility:具有/corerealm 的最小配置。最适合实用程序类型的系统,例如恢复。standard:一种“完整 Fuchsia”配置。包括网络堆栈和自更新功能。这是默认值。
storage:配置文件系统(例如,Fxfs)和存储布局。
如需查看完整的平台设置列表,请参阅 PlatformSettings 文档。
例如,包含平台设置的 Fuchsia 产品配置可能如下所示:
fuchsia_product_configuration(
name = "product_config",
product_config_json = {
"platform": {
"build_type": "eng",
"feature_set_level": "standard",
"storage": {
"filesystems": {
"volume": {
"fxfs": {},
},
},
},
},
"product": {},
},
)
产品设置
product 键用于更高级别的产品设置。
最重要的设置之一是会话。会话是定义产品用户体验(例如,图形界面外壳或主应用)的顶级组件。
如需使用会话,您必须指定其网址,并确保包含相应组件的软件包包含在基本软件包中。
基础软件包是指系统映像中包含的一组软件包。它们在启动时立即可用,是不可变的(只读),并且作为系统 OTA 的一部分进行更新。
例如,包含产品设置的 Fuchsia 产品配置可能如下所示:
示例:
fuchsia_product_configuration(
name = "product_config",
product_config_json = {
"platform": {
"build_type": "eng",
"feature_set_level": "standard",
},
"product": {
"session": {
"url": "fuchsia-pkg://fuchsia.com/my_session#meta/my_session.cm",
},
},
},
base_packages = [
"//src/my_session:my_session_package",
],
)
如需查看产品设置的完整列表,请参阅 ProductSettings 文档。
组装商品图片
获得 fuchsia_product_configuration 后,您可以使用 fuchsia_product 规则来组装最终的系统映像。此规则将产品配置与特定主板配置相结合。
load(
"@rules_fuchsia//fuchsia:assembly.bzl",
"fuchsia_product",
)
fuchsia_product(
name = "image.x64",
board_config = "//boards:x64",
platform_artifacts = "//build/bazel/assembly/assembly_input_bundles:platform_eng",
product_config = ":product_config",
)
board_config:指向主板配置目标。platform_artifacts:指向要使用的平台工件 (AIB) 的软件包。
创建商品套装
如需在设备或模拟器上运行产品,您需要使用 fuchsia_product_bundle 规则将其打包到产品软件包中。
load(
"@rules_fuchsia//fuchsia:assembly.bzl",
"fuchsia_product_bundle",
)
fuchsia_product_bundle(
name = "product_bundle.x64",
product_bundle_name = "my_product.x64",
main = ":image.x64",
)
此目标会生成 ffx product-bundle 命令所需的制品。
例如:
在模拟器中运行:
ffx emu start my_product.x64刷入设备:
ffx target flash -b my_product.x64
后续步骤
此 Codelab 介绍了定义新产品配置的基础知识。
如需继续学习,您可以:
- 在
//products中探索现有商品配置。 - 详细了解主板配置。