Fuchsia F25 版本说明

版本:F25

已实现以下更改:

无障碍设置

我们对无障碍功能进行了以下更新:

  • 还原了未宣布节点的无障碍功能焦点操作恢复。

音频

我们对音频进行了以下更新:

  • 更新了 audio_device_registry,以确保在响应初始 WatchDevicesAdded 调用之前检测和初始化现有设备。ADR 现在可以按需启动,而不是始终提前启动。
  • aml-g12-tdm 驱动程序转换为新的 GPIO 调用。
  • 更新了音频测试的命名方式,以保持一致。请为测试软件包名称使用下划线,为测试组件名称使用连字符,并为这两者添加 audio 前缀。

蓝牙

蓝牙进行了以下更新:

  • 完成了向新的 HCI 传输 FIDL 协议的迁移。
  • 修复了蓝牙的一些 Rust lint,并将 syn 更新为 v。
  • 改进了蓝牙配置文件和 GAP,包括路由更新和针对多余克隆和堆分配问题的修复。
  • 添加了 bt-init eager,在设备启动时启动它,并将一些额外的蓝牙功能路由到会话以供组件使用。
  • 实现了 fuchsia.bluetooth.le.Connection/ConnectL2cap,以支持 LE 连接导向型频道。
  • 创建了 PrivilegedPeripheral 协议,以便在启用隐私模式时支持具有静态地址的 LE 广告。
  • 已将 HCI 命令和事件数据包结构体迁移到 Emboss 数据包视图。

钴蓝

我们对 Cobalt 进行了以下更新:

  • 更新了系统指标计算,以使用启动时钟提高准确性,并且系统指标守护程序使用 Fuchsia 的时间概念,减少错误并为未来的增强功能做好准备。
  • 修改了验证器测试,以使用辅助函数来提高可读性。

组件框架

我们对组件框架进行了以下更新:

  • 更新了 component CLI 工具和 ffx 工具。component show 命令现在会显示运行程序信息,设备端 component CLI 现在包含 config 子命令,ffxfuchsia-controller 现在使用常见的 SSH 配置。cmc format 现在支持从 stdin 读取数据。
  • 更新了组件管理器,以支持在运行嵌套时进行跟踪,并使其通过 fuchsia.pkg.PackageResolver-boot capability 公开 bootfs 软件包解析器。
  • 在组件管理器中实现了 fuchsia.sys2.ConfigOverride 协议以及支持的 CLI 库。这样,开发者就可以替换结构化配置值,并修复了因字段未使用配置功能而被拒的问题。
  • 通过清理未使用的服务连接 API 和移除已废弃的函数来清理 fuchsia-component 库,并在传出目录中添加了对服务实例名称的说明。 此外,component::Clone 已迁移到 fuchsia.unknown/Cloneable

连接驱动程序

Connectivity Drivers 进行了以下更新:

  • 增强了 brcmfmac 驱动程序,包括使用新的 GPIO 调用,并降低了非严重错误的日志级别,从而提高了兼容性、功能性和日志清晰度。

诊断

我们对“诊断”进行了以下更新:

  • 改进了 ffx inspect 的开发者体验。ffx inspect 现在支持 --name、对标识名和网址进行模糊匹配,并改进了 --component supersedes--manifest 的使用方式。
  • 改进了 ffx log 的开发者体验。
      在第一行中除了 UTC 时间之外还会输出启动时间,以便根据启动时间计算回退时钟时间,移除了 --select--force-select,更新了日志兴趣选择器,不再需要在标识符中进行任何类型的转义,并修复了重新连接时的兴趣
    • 变更:fxr/1148934fxr/1138576fxr/1153818
  • 提升了 Rust 日志编码/解码的性能。在许多基准测试中,速度提升了约 60%。
  • 更新了与从单调时间切换到启动时间相关的其他内容。
  • 在采样器中添加了电源代理统计信息
  • 在归档器中引入了新的 LogStream 协议,用于直接提取带归因的原始 FXT 记录。与使用 ArchiveAccessor 相比,这可以提高性能。
  • 更新了 SelfProfilesReport,以支持自定义叶级汇总,以便分析复杂 CUJ 中的 CPU 使用情况。
  • 增强了作业过滤功能,以便调试。FIDL 客户端现在可以使用仅限作业的过滤条件,并且向 attach 命令添加了 --job-only 标志,以便直接附加作业(仅限 Fuchsia)。
  • 改进了内核线程采样器和调试程序,使其更为稳健。采样器现在支持附加到初始化线程,调试程序修复了与行表相关的崩溃问题,并改进了对异步进程终止的处理。
  • 改进了归档工具的性能和稳定性。为日志套接字创建专用线程可减少开销,对关闭逻辑和内部缓冲区所做的更改提高了稳定性,并采用了异步作用域。
  • 改进了诊断日志和符号化功能。向符号化程序和下载管理器添加了更多调试日志,并修复了与 x64 Zircon 中的负载相关的符号化问题。
  • 改进了诊断日志中的严重性 API,提升了开发者体验。

显示

我们对展示广告系列进行了以下更新:

  • 显示驱动程序堆栈正在迁移到现代 Fuchsia 平台基础架构,例如 DFv2 和 FIDL。

驱动程序框架

我们对驱动程序框架进行了以下更新:

GPU

GPU 进行了以下更新:

  • 改进了 Vulkan 交换链功能:这包括通过使用 unsquashable 标志、移除显式时间戳并将栅栏重命名为 fence_signalers 来简化交换链呈现逻辑;更改栅栏信号以观察 vsync;从 HLCPP 迁移 Flatland 交换链;以及修复虚假 Flatland 的 fuchsia.ui.composition.Allocator.RegisterBufferCollection 实现。
  • 改进了 virtio-gpu-display:移除了对 sysmem1 的未使用引用,使用了 DriverLayer 和 ConfigStamp,并简化了 Banjo 适配器 API。
  • 已迁移到 open3 fdio:包括与 fdio_open 迁移和常规 open 到 open3 迁移相关的更改。
  • 向 msd_c.h 添加了函数:包括添加缓冲区导入/释放、连接创建/释放和映射/释放缓冲区函数。

本地化

我们对 I18n 进行了以下更新:

  • 改进了 ICU 构建流程和配置处理。移除了 jiri 钩子,改为在 gn gen 期间直接调用生成器脚本,从而提高了效率和 icu_root 准确性。引入了由 Jiri hook 管理的 build/icu/jiri_generated/config.json,以优化 icu_config_info 读取,并添加了数据完整性验证目标。

IOT

我们对 IoT 进行了以下更新:

  • 修复了 GHP 的 bug。

平台驱动程序

平台驱动程序进行了以下更新:

  • 改进了 AML CPU 驱动程序日志记录,并将 imx227 驱动程序改为使用 SetBufferMode()
  • 通过将 aml-light 驱动程序迁移到 //sdk/lib/driver/platform-device/cpp SDK 库并重构其构建目标,使其实现了现代化。
  • 移除了对暂停时长的限制,支持任意长度的暂停时长。
  • 对 SPMI(系统功耗管理接口)框架进行了多项改进。这些更新包括针对异步测试更新了 mock-spmi,启用了对 UnownedClientEnd 的读写访问,并添加了对 SpmiRegisterArray 的支持。此外,还实现了对 GetPropertiesWatchControllerWriteCommands 的支持。
  • 添加了一种新方法,让 SPMI 驱动程序客户端可以从设备接收控制器写入命令,从而完成 SPMI 的软过渡。这会移除临时 build 文件。

电源管理

我们对电源管理进行了以下更新:

  • 改进了可观测性和衡量功能。包括从轨迹文件中删除无效的 Gonk 样本;在 Inspect 数据中使用实际时间;以及 Power Broker 的 Cobalt 指标。
  • 改进了平台电源管理。包括通过组件管理器将 shutdown-shim 作为内置组件运行;消除 Power Broker 中的潜在内存泄漏;以及移除唤醒处理和完全唤醒处理电源元素。
  • 继续开发 CPU 功耗管理。包含适用于 VIM3 的能耗模型,以及用于通过能耗模型配置内核的平台支持。

Rust

Rust 进行了以下更新:

  • 改进了代码质量和 linting。解决了 or_fun_callset_contains_or_insert lint 的处理问题,移除了新工具链检测到的死代码,并启用了 clippy::redundant_cloneclippy::needless_collectclippy::collection_is_never_readclippy::clear_with_drain
  • 优化了日志记录解码。nom 迁移到了 zerocopy,以提高性能并简化代码。
  • 从 async-io 迁移到了 Tokio。为了解决 Tokio 的主机/目标执行器差异问题,系统会延迟初始化计时器。
  • 为 RemoteLike 添加了 Open3 支持。

SDK

SDK 进行了以下更新:

  • 通过新的 FIDL 元数据函数和驱动程序库中的 span<const T> 支持增强了驱动程序开发,提高了灵活性并减少了样板代码。
  • 添加了 gen-android-starnix-container 托管工具、fuchsia.system.statefake-platform-device,以改进外部开发,从而扩展了合作伙伴 SDK 功能。
  • 通过迁移到 Node.Clone2 并在测试中使用 Open3 进行服务连接,改进了 sys 库中的 io2 兼容性,从而解决了权限问题。
  • input_report_reader 中添加了对 const ToFidlInputReport() 的支持,并在 Rust SDK 中添加了中断确认,从而增强了功能和一致性。
  • 使用 LLCPP FIDL 绑定、类型安全的 io2 替换项和移除已废弃的函数对 VFS 库进行了现代化改造,简化了 API 并增强了安全性。
  • 通过修复 sdk_source_set() 行为、处理 fdio 中的 POSIX 标志以及解决 fx build --fint-params-path 问题,改进了构建系统。
  • 移除了已废弃的 fservefpublishpm 命令,以及与时间相关的 FIDL 版本控制库异常,从而清理了 SDK。

软件交付

软件分发进行了以下更新:

  • 添加了 FindDynamicDataSink API 来替换 UseBlockDevice,将块设备查找责任转移到了铺路机服务。添加了 AndroidPartitionerTestVim3DevicePartitionerTest,以提高可靠性并处理多 GPT 设备等极端情况,并防止意外擦除引导加载程序。
  • 向 FIDL API 添加了无法启动原因数据,以改进错误报告和诊断功能。
  • 修复了在 GetMetadata 调用期间发生的 ResetPartitionTables 断言,提高了 paver 稳定性。正确报告了上次启动尝试次数,修复了无法启动的槽的意外行为。添加了对 Sorrel 的支持。
  • 重构了测试,以实现存储空间与主机的兼容性和简化。移除了 AbrClientFactory,以简化客户端创建流程。删除重复项后的 GUID 查询表。ResetPartitionTables 现在会替换依赖于直接 GPT 访问的函数。添加了针对 KolaAbrClient 的单元测试。
  • 通过检查公开了 fuzz_percentage_range。修改了注释,以反映铺路工具在最终启动尝试时报告的待处理状态。
  • 已从 Node.Clone 迁移到 Node.Clone2,以进行 io2 迁移。更新了 fuchsia_fs 函数。使用了 open3 fdio。对附加的清单和清单列表进行了排序,以实现确定性。
  • 重构了 PolicyEngine 并迁移到了 QueryConfigurationStatusAndBootAttempts,以便在成功提交时报告启动尝试。

Starnix

Starnix 进行了以下更新:

  • 实现了 fscrypt ioctl,添加了对用户管理的加密密钥的支持。不过,对已锁定的加密目录的操作尚不完全受支持,并且 FS_IOC_REMOVE_ENCRYPTION_KEY 无法正确处理锁定。
  • 增强了 SELinux,以提高安全性和访问控制功能。这包括通过 /sys/fs/selinux/avc/cache_stats 报告访问矢量缓存统计信息的基本实现,以及针对安全上下文的类别集归一化。
  • 改进了对 cBPF 和 eBPF 的支持。修复了多个 cBPF 兼容性问题,包括实现 BPF_MSH 指令和调整数据包访问指令。增强了 eBPF 验证器,以改进结构体处理并防止数组边界检查绕过。
  • cgroupcgroup2 文件系统以及 cpuset 更新为可挂载的 CgroupV1 文件系统。cgroup.controllers 接口文件也将变得可访问。
  • 重新启用了 Starnix 挂起功能。唤醒锁会在内核中跟踪,容器暂停会委托给运行程序,后者会监控已注册的通道以恢复容器。相关修复程序解决了租约获取顺序问题,并提高了运行程序代理的稳健性。
  • 添加了对 aarch32 uapi 的支持。还包含相应的 build 参数。
  • 修复了 execve 期间的 FIONBIO ioctl 和功能计算问题。 FIONBIO 会根据用户输入正确处理 NONBLOCK 标志,并且在 execve 期间正确计算 set-user-ID 根程序的功能。不过,对于后者,文件功能和 SECBIT_NOROOT 尚未得到解决。

测试

测试进行了以下更新:

  • 改进了多个方面的测试基础架构
    • 在启动/引导环境中引入了测试支持,使 bootfs 测试能够作为组件运行。
    • 在 arm64 上启用了 crosvm 测试,并将其添加到了官方内核测试环境中。
    • 确保 CTF 工件复制到正确的位置,从而解决从版本加载工件时出现的问题。
    • 在 botanist 中为 Kola 添加了对通过串行预配密钥的支持。
  • 添加了一个用于压缩调试数据的新 API,显著加快了使用 ffx 的覆盖率机器人的速度。旧的未压缩 API 已废弃。
  • 改进了各种测试
    • 通过延长计时器截止期限,修复了 Timer.Restart 核心测试中的一个不稳定问题。
    • 更新了 msd-arm-mali 中的关闭测试,以记录更多错误,有助于调试 flake。
    • 移除了 FailEarlyWake 页面浏览器测试中的竞态条件,从而防止无限阻塞。
    • 通过确保在 VMO 映射周围填充页面,修复了核心 FIFO 测试中罕见的不稳定问题。
    • 将 msd-arm-mali 测试中的 1 秒超时替换为无限超时,这可能会解决一个问题。
  • 改进了 paver 测试,以提高稳健性和兼容性
    • 使用预初始化的块设备更新了 paver 测试,以便进行存储空间主机兼容性测试。
    • 添加了回归测试 AndroidPartitionerTest,以确保在 Android 设备上正确识别 GPT。
  • 更新了测试工具和指标处理
    • 更新了核心测试,以支持旧版和新版内核归因模型。
    • ConstantMetricsProcessor 中移除了已废弃的参数。
    • 使用 ConstantMetricsProcessor 时,必须为自由形式指标提供文件名。
    • 增强了 CTF 测试,以利用新的 C++ FIDL 绑定。

工具

我们对“工具”进行了以下更新:

  • 更新了 tunnelingninjalog 工具tunneling 现在包含包含诊断建议的改进版错误消息,ninjalog 现在支持 Ninja 日志格式 v7。
  • temperature-cli 工具中添加了对获取、设置和等待温度跳转点的支持。
  • 更新了 make-fuchsia-vol,以使用商品套装作为图片文件的主要来源,并优先使用稀疏图片。
  • 增强型 paver:添加了 AndroidPartitionerTestVim3DevicePartitionerTest。修复了在不受支持的块设备上出现的 GetMetadata 错误。改进了测试中的 storage-host 兼容性。向 FIDL API 添加了 unbootable_reason。正确报告了 last-boot-attempt 并解决了不可靠的测试问题。
  • 迁移了 package_manager_test 以使用前台代码库服务器,并修复了一种不稳定的测试。
  • 由于存在问题,还原了从转移清单中复制 blob 的更改。
  • 改进了 test_list_tool,以便正确处理软件包清单中的文件相对 blob。

ffx

ffx 进行了以下更新:

  • 更新了 ffx,以便在发生任何非严重的 SSH 错误时重试 target add

fx

fx 进行了以下更新:

  • fx create-pb-zip 添加了对商品套装参数的支持。
  • 改进了 fx 命令,在强制清理后自动调用 fx gen,并添加了新命令 fx rbe cleanlogs 以从 fuchsia-reproxy-wrap.sh 中移除日志。
  • 引入了 fx generator,用于在双 build 目标中同步 BUILD.bazelBUILD.gn 文件。

界面

界面进行了以下更新:

  • 添加了新配置 fuchsia.ui.VisualDebuggingLevel,让开发者能够控制调试功能,包括风景色调、Starnix 紫色屏幕和用于关闭显示屏的驱动程序绿色屏幕。ui_visual_debugging_level 现在使用可用性过渡路由,无需在与 Starnix 相关的测试中进行路由。
  • 向 Starnix 添加了一项测试,用于验证在设备未打开时是否会丢弃触摸事件。starnix-touch-test 已重构以重复使用 GetTouchEventSequenceOfLen。这简化了多读取器和紧密测试。
  • 添加了一个屏保组件,该组件隐藏在标志后面,用于展示 Fuchsia 分流。
  • 为屏幕截图添加了 RGBA 支持。
  • 改进了 Scenic 配置日志记录和配置处理:更新了 Scenic 配置日志以在单行中显示,将 ChoosePreferredPixelFormat() 重命名为 ChosePreferredRenderTargetFormat(),并移除了未使用的 DisplayManager::SetVsyncCallback() 方法。
  • 停用了 CPU 渲染程序测试的显示组合。
  • 暂时停用了直接显示,并移除了依赖于事件的相关代码;显示屏测试现在使用 vsync 而非信号事件。

WLAN

我们对 WLAN 进行了以下更新: