Fuchsia 源代码树

在本部分中,您将了解 Fuchsia 源的结构 以及用于管理开源项目的工具。

源代码管理

Fuchsia 使用 jiri 工具来管理 git 代码库。它会同步 使用 全局集成清单和 提供了必要的工具,以便将更改传回 Fuchsia。全球 集成是一个中央分类记录器, Fuchsia 树中的项目。

<ph type="x-smartling-placeholder">

您可以使用带有 XML 的 import 命令初始化本地 jiri 结账 清单,用于声明所有代码库及其组织方式。通过 import 如下所示:

jiri import -name=integration flower https://fuchsia.googlesource.com/integration

此命令会将清单添加到本地 .jiri_manifest 文件中的 本地结账页。

<manifest>
  <imports>
    <import manifest="flower" name="integration"
            remote="https://fuchsia.googlesource.com/integration" />
  </imports>
</manifest>
<ph type="x-smartling-placeholder">

在开发机器上初始化本地签出之后,Jriri 可以拉取 通过一条命令随时了解 Global Integration 的最新更改:

jiri update

源代码布局

Fuchsia 是一个大型开源项目。与任何大型软件项目一样 在没有路线图指导的情况下,很容易迷失方向。此部分包含 本地 Fuchsia 结账流程概览,以及各种元素的摘要 在此过程中可能会发现:

path 说明
boards 包含所有默认面板 配置由 Fuchsia 团队支持和维护。
build 适用于 Fuchsia 的共享配置和默认模板 构建系统
bundles build 目标标签的顶层分组,通常包含在 build 配置请参阅套装 了解详情。
docs Fuchsia 文档,包括 Fuchsia.dev 开发者网站的源资料。
examples 展示 Fuchsia 各个方面的软件组件示例 平台。
products 包含所有默认商品 配置由 Fuchsia 团队支持和维护。
scripts 各种开发者工具可简化 Fuchsia 源代码树的使用, 包括 fx 工作流中使用的子命令。
sdk 包含 Fuchsia 平台 API 的来源,包括 FIDL 协议定义 以及用于创建 Fuchsia SDK 分发归档的构建目标。
src Fuchsia 的源代码,包括运行 在目标设备上的表现。这是花朵的茎
tools 紫红色 开发者工具)
vendor 为以下项的供应商专用二进制文件和自定义项预留位置: 产品构建。构建系统支持发现配置文件 在 vendor/productsvendor/boards 下构建 Fuchsia,用于供应商专用设备目标。
zircon Fuchsia 的锆石的源代码 核心),包括内核。

Fuchsia 平台的源代码进一步细分为各种 和组件和服务下方并未列出所有情况 但可能会提供一些可以开始探索的有趣位置:

path 说明
src/bringup 核心系统二进制文件,用于启动系统的用户空间环境。
src/camera 针对摄像头设备驱动程序的支持服务。
src/cobalt 用于记录、收集和分析指标的 Fuchsia 服务。
src/connectivity 网络协议支持和设备驱动程序。
src/developer 在目标上运行的开发者工具,包括 ffx
src/devices 适用于常见硬件子系统的设备驱动程序支持库。
src/diagnostics 诊断支持服务,如日志记录、崩溃报告、快照 和统计信息。
src/factory 实现对出厂配置数据存储的组件。
src/fonts 内置系统字体的提供程序。
src/graphics 针对显示设备驱动程序的支持服务。
src/identity 用户账号处理和身份令牌管理。
src/media 媒体编解码器和播放服务。
src/power 电源管理服务。
src/starnix POSIX 兼容性库。
src/recovery 恢复系统和恢复出厂设置服务。
src/security 安全政策和分析工具。
src/session 用于管理会话组件的基础架构和工具。
src/storage filesystems和 音量管理
src/sys 组件框架 和相关服务 管理
src/tests 平台端到端 (E2E) 集成测试。
src/ui 用于支持图形界面 (GUI) 的服务,包括 Scenic
src/virtualization 为虚拟机客户机提供 Hypervisor 支持。
src/zircon 用于与 Zircon 内核交互的库。

练习:浏览源代码树

在本练习中,您将探索 Fuchsia 源代码树的本地签出 使用环境提供的命令行工具。逐渐熟悉 能够帮助您开始为创新成果贡献力量, 代码库。

<ph type="x-smartling-placeholder">

搜索树

如果您不确定从何处开始,可以使用 fd 实用程序执行模糊测试 搜索目录,然后导航到搜索结果的位置。

运行以下命令以对 session_manager 运行 fd 搜索:

fd session_manager
<ph type="x-smartling-placeholder">

该实用程序会显示一些可能的选项供您选择。选择选项 2 以导航到 src/session/bin/session_manager

[1] src/session/bin/session_manager
[2] src/session/tests/session_manager

这样你就能轻松找到并浏览 工作。如果搜索足够具体,可以返回单个结果,fd 将 即可自动转到相应页面

运行以下命令以搜索 archivist - Fuchsia 的 用于收集日志数据、快照和生命周期事件的诊断服务:

fd archivist

请注意,该命令实际上并未输出任何结果, 目录已自动设为 src/diagnostics/archivist

<ph type="x-smartling-placeholder">

这有助于您顺利上手,但您可能需要注意以下几点: 在需要在文件内搜索的 Fuchsia 树中搜索。

在源文件中搜索

要在特定源文件中搜索树中的模式,请使用 fx grep 命令。

在树中进行搜索,查找对 hello-world 示例的引用 使用 fx grep

fx grep hello-world

这将从整个树中返回一个很长的引用列表, 文档、build 文件和其他来源中都引用了示例。

你可以使用过滤条件缩小搜索范围,缩小搜索范围 定义。再次执行相同的搜索,但这次仅在 GN build 文件中执行相同的搜索 :

fx grep hello-world -- build

结果表明协议定义位于 examples/hello_world。您可以将这些信息与 fd 结合使用, 导航到那里:

fd hello_world
<ph type="x-smartling-placeholder">