Fuchsia F24 版本说明

日期:2025 年 1 月 21 日

版本:F24

已实现以下更改:

无障碍设置

  • 增强了无障碍功能:记录屏幕阅读器状态的更改。

音频

  • 更新了 audio_listener,以修复使用情况验证 bug 并解决 clang-tidy 问题。
  • 更新了 audio_device_registry 服务,以添加了对电源状态更改的 Inspect 日志记录。
  • 更新了 aml-g12-tdm 驱动程序,默认情况下在有第一个客户端连接之前会关闭音频硬件。

蓝牙

蓝牙进行了以下更新:

  • 添加了 bt-device-id 软件汇编配置,并实现了默认设备配置。bt-device-id 配置文件默认处于停用状态。
  • 增强了 bt-rfcomm,以便为 RFCOMM 会话通道使用 L2CAP max_packet_size,从而优化数据传输。还向 BR/EDR 服务搜索参数添加了通用 UUID,以支持自定义 UUID 搜索。
  • 增强了蓝牙 LE 对等,为广播助理添加了其他字段。现在,系统会根据控制器支持情况启用同时 LE 和 BR/EDR 广告。对 bt-gatt 进行了多项改进,包括添加了基本 ServerSupportedFeatures 支持、移除了不必要的句柄跟踪,以及启用了 ISO 主机位(如果受支持)。此外,还为 LE Audio 添加了广告类型 CSIS 和 PBP。
  • bt-hostbt-hci-virtual 迁移到了预构建文件,并删除了源代码。bt-host 预构建状态记录在 README 中。
  • 向产品组件添加了 BT MAP MCE 配置文件(默认处于停用状态),并实现了相关功能。其中包括适用于 MAP-MCE 的命令行工具、使用通知服务实现 MAP MCE 角色,以及为 MCE 角色实现消息通知服务器。
  • 更新了 bt-hfp,添加了按请求启动/停止功能、音频网关的组装配置和合并的可选协议。现在允许为 bt-avrcp-integration-tests 创建 ERROR 日志。LEAdvertisingSetTerminated 事件已迁移到 Emboss,并修复了 bt-host/fidl 中的拼写错误。在 Lacewing 暂停-恢复测试中添加了停用计时器时长检查的选项,移除了 HCI 模拟器设备节点,并删除了过时的蓝牙采样器配置。为 starnix.arm64 定义了测试组,并将 LE_AUDIO 添加到 bt-cli 中的 CoD 服务位。为 LE 广告添加了 PrivilegedPeripheral API。

钴蓝

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

  • 改进了事件代码处理,并修复了 lint 警告。 max_event_codeevent_code 限制为 2^31 - 1,以防止超出 Java int 容量,并且 cobaltb.py 中已解决 lint 警告问题。
  • 向 cobaltb.py 添加了 build-test 命令。
  • 利用了 FatLTO 来加快测试 build 的速度。
  • 恢复并测试了当前的频道检索逻辑。
  • 将探测器测试规范更新为 Nelson。
  • 从 Fuchsia 报告配置文件中移除了 ARCH/OS。
  • 修复了 cobalt-registry 勘误。

组件框架

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

  • 添加了通用服务代理,并在 component_manager 中为内置组件创建了更可扩展的框架。该框架包含一个新的 BuiltinProgram 类型、内置和非内置组件的 ABI 对齐,以及 elf_runner 的重构。
  • 提高了组件管理器的稳定性,并解决了测试不稳定的问题。这包括延长测试中的超时时间、替换已废弃的 fuchsia_fs 调用,以及修复错误日志记录中的拼写错误。
  • 改进了日志记录和事件处理。klog 消息中的换行符现在会拆分为单独的条目,从而修复了 UTF8 panic bug。现在,系统会在事件标头中设置启动时间,以便更准确地确定事件时间。
  • 在 session_manager 中将最后一个必需的 #ui 路线设为可选,从而支持无界面的商品,并添加了 fuchsia.ui.composition
  • 利用了 FatLTO 来加快测试 build 的速度。

诊断

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

  • 改进了日志消息处理功能。移除了对传入结构化消息的双重解析,并标准化了消息表示,从而提高了效率并减少了分配。从日志键值对中移除了 ANSI 颜色代码。
  • 从单调时间迁移到了启动时间。Archivist、Inspect 和 Log 工具使用的是启动时间,而不是单调时间。
  • 简化了配置。将与归档管理员相关的 bootstrap.cml 条目移到了分片,以便更轻松地进行修改。
  • 在 SDK 中添加了 C++ 有主见的记录器。这样,您就可以在不进行自定义日志记录器集成的情况下,从 SDK 中的组件启用日志记录。
  • 更新了采样器配置,以接受通配符。这样,您就可以为驱动程序和其他内容编写选择器。
  • 更新了 ffx log 工具,使其接受 --set-severity 而非 --select
  • 处理配置中的初始兴趣。用于配置组件初始日志严重程度的管道汇编选项。
  • 改进了作业处理。引入了 DebuggedJob 抽象并将其用于 RootJob,简化了作业附件和异常监控。将异常记录检索移到了 Exception 对象,以提高一致性。
  • 添加了整数格式设置。允许在 printlocals 命令中对整数进行永久性格式设置。
  • 改进了 step_plt 测试。移除了 step_plt e2e 测试中的不必要依赖项。
  • 改进了性能分析支持。添加了对测试调用方的支持,并更新了 Mali 的检查选择器,以便提供更好的性能分析功能。
  • 更新了时间戳格式。将时间戳更改为 RFC-0260 中定义的启动时间戳。
  • 简化了配置并改进了时间处理。移除了仅限英语的配置数据目标和 low_memory 配置,并将对 zx_clock_get_monotonic 的直接调用替换为更高级别的抽象。
  • 改进了调试功能。连接到设备时,在 ffx log 中输出 UTC 时间,以便将启动时间映射到任何时间。
  • 改进了 ffx 日志中的重新启动检测。使用每次启动时生成的随机整数(而非 UTC),以实现更可靠的重新启动检测。

显示

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

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

驱动程序框架

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

  • 在驱动程序运行时添加了对驱动程序服务器的支持,包括 DriverServerDriver trait,并解决了内存管理问题,还添加了针对跨执行器通道行为的测试。
  • 改进了 Rust 驱动程序支持。现在,您可以使用 fuchsia_rust_driver 模板和 rustc_cdylib 构建 Rust 驱动程序。还实现了基本的 Rust 驱动程序传输。
  • 增强了对动态链接的支持。用于通过动态链接加载驱动程序的 FIDL 在 driver_loader 中实现,并将 DriverLoadArgs 传递给 DriverHost::StartWithDynamicLinker。节点客户端现在会传递给 DynamicLinkerDriverHostComponent::Start,并且动态链接 StartRootDriver 测试帮助程序已重构以实现可重用性。实现了 DynamicLinkerDriverHostComponent Start。启动驱动程序主机时,系统会返回一个 FIDL 客户端。现在,已实现将驱动程序加载到驱动程序主机中。
  • 改进了驱动程序测试。向 SDK 添加了 ScopedGlobalLogger,以简化驱动程序测试。共享库包含在 driver_test_realm 中。清理了 driver_test_realm 代码。driver_test_realm 中移除了从 void 进行跟踪路由的功能。DriverRunnerTest 已参数化,用于动态和旧版路径测试。driver_test_realm 已迁移到 dtr_exposes/offers
  • 将多个 FIDL 库迁移到了 Bazel 构建规则。这包括简单驱动程序和 DFv2 驱动程序传输示例。
  • 重构了驱动程序框架。引导加载程序和 zx::thread 逻辑已从 driver_manager 移至 driver_loader。公开的目录会传递给已启动的驱动程序主机组件。DriverStartArgs 现在由节点创建并传递。LoadDriverHost 现在接受回调。基于整数的已废弃的属性键和拓扑路径已废弃。
  • 其他驱动程序框架更新。向驱动程序日志记录器添加了 API 可用性条件。虚拟电池驱动程序已迁移到 x64 的平台 AIB。SDK 使用方不应再直接使用 platform-defs.h。ddk::MetadataServer 现在向 fdf::OutgoingDirectory 提供其元数据 FIDL 服务。从 ElementSchema 中移除了依赖项令牌。电源框架提供了一个共享的 FIDL FakeElementControl。DDK 中不再使用 sdk_* build 模板。fdf::testing 现在支持 Open3。失败的驾驶员将重新匹配。
  • 更新了 sysinfo,以便为平台总线使用服务而非 devfs。

FIDL

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

  • 改进了对 C++ 和 Rust FIDL 绑定中的启动瞬间、时间类型和异步接收的处理。这包括对使用 zx::basic_timefuchsia_zircon 类型的单调和启动瞬间的类型安全支持,在 C++ 绑定中添加了 zx::basic_time 的转换 trait,支持在 Rust 和 C++ FIDL 绑定中编码和解码 {Boot,Monotonic}Instantzx::basic_time,支持 Rust 绑定中的计数器,以及增大了 Rust FIDL 中异步接收的缓冲区大小。
  • 增强了 FIDL 工具和构建流程。我们进行了多项改进,包括在 fidlgen 中将 MaybeAlias 重命名为 MaybeFromAlias、将 fidlgen 和 fidldoc 切换为使用 kind_v2、更新 fidldoc 以递归渲染矢量和数组、在 FIDL build 中添加了用于供应商 HLCPP 可见性的布尔值、将新的 Rust FIDL 绑定库重命名为 fidl_next、将资源与核心 FIDL Rust 库分离、最大限度地减少 not_needed() 语句并移除了在 GN build 中将 SDK 类别传递给 fidl_cpp_family() 的操作、在 fidl_library() 中要求使用 "stable" 参数,并向 FIDL bundle 添加了缺少的测试。此外,还解决了与 FIDL GN 模板和版本控制相关的多个 bug。
  • 添加了新的 Rust FIDL 绑定 (fidl_next)。
  • 向 zx Rust FIDL 绑定添加了 SynchronousProxy::is_closed
  • fuchsia.device.manager FIDL 重命名为 fuchsia.system.state

GPU

GPU 进行了以下更新:

  • 更新了 MSD ARM Mali 功耗测试,以使用模拟挂起以实现兼容性。
  • 在基础架构中启用了 Lavapipe,并修复了内存泄漏问题。修复了 Lavapipe(包括 lvp_device)中的多个内存泄漏问题。
  • 向 MSD ARM Mali 添加了 PowerElementProvider 支持,并向 Magma 添加了时钟处理 API。客户端现在可以设置时钟速度限制。添加了用于从 Magma 驱动程序检索电源元素的 FIDL 协议。

本地化

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

  • 向生成的字符串 FIDL 库添加了版本控制,以确保与 FIDL 平台版本控制要求兼容。此外,更新了 intl 属性提供程序,使其不再发出等于其默认值的更改。这些更改简化了测试,并假定所有字符串库都是不稳定的。

IOT

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

  • 事项
    • 修复了 GHP 的 bug 并提高了其稳定性。
    • 启用了对 MDNS 的检查支持,并添加了指标。
    • 修复了 MDNS bug。

内核

内核进行了以下更新:

  • 引入了启动时间轴。添加了对 ZX_CLOCK_BOOT 的支持,以指定计时器应基于启动时钟,该时钟在系统暂停时不会暂停。
  • 增强了根作业性能分析功能。ffx profiler attach 添加并重新启用了 --system-wide 标志,以更稳健地对根作业树中的所有线程进行性能分析,包括处理在会话中途退出的受分析进程的情况。现在,即使符号不可用,性能分析器也会返回样本。

平台驱动程序

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

  • 改进了平台设备元数据处理,并添加了开发板定义。 平台设备现在使用字符串(而非整数)作为元数据,并且新的 FIDL 方法会按字符串检索元数据。添加了 Lilac 和 Iris 开发板定义。
  • 增强了 sdmmc 驱动程序稳定性和电源管理。通过重置 worker 事件,修复了旋转 worker 循环的问题。暂时停用了电源暂停和硬件电源状态操控,以便更轻松地过渡到新的电源租赁模式,并允许在电源元素处于关闭状态时发出存储请求。向系统 activity 调度器注册了核心 sdmmc 电源元素依赖项的令牌。

电源管理

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

  • 通过新功能和配置选项增强了系统 activity 调度器 (SAG)。实现了 CpuElementManager 服务器,使存储驱动程序能够与电源拓扑图集成。添加了 wait_for_suspending_token 配置标志,以控制 SAG 的依赖项令牌处理,并在管理系统电源状态时提供更大的灵活性。
  • 通过增强的跟踪和检查功能,提高了功耗可观测性。添加了电源元素轨迹事件,以捕获租约请求、电源代理中的电源级别转换以及客户端守护程序互动。将检查历史记录缓冲区大小增加到了 8192 个事件,并将 VMO 增加到了 2MB,从而减少了在多次电源事件后发生的数据丢失。
  • fuchsia.sensors.types 添加了电源传感器的枚举。这会向 SensorTypes 引入 POWER 枚举,以便与 Fuchsia 传感器框架集成。
  • 将虚拟电池驱动程序迁移到了平台 AIB,并将其添加到了 x64 平台。

Rust

Rust 进行了以下更新:

  • 添加了针对时间和时长的处理的多项更新:更新为在 zx Rust 中使用 MonotonicDuration 而非 Duration,在 Zircon Rust 中将 Duration 别名为 MonotonicDuration,在 fuchsia_zircon Rust 中将 Time 重命名为 Instant、将 SyntheticTime 重命名为 SyntheticInstant、将 BootTime 重命名为 BootInstant、将 MonotonicTime 重命名为 MonotonicInstant,并将 Boot/MonotonicTime 重命名为 Instant
  • 改进了 FIDL Rust:添加了对 {Boot,Monotonic}Instant 的计数和编码和解码支持,将新的绑定库重命名为 fidl_next,将资源与核心库分离,并略微改进了线程本地缓冲区的初始化。
  • 在使用 #[fuchsia::test] 的测试中添加了对 lsan 的支持,包括为 #[should_panic] 测试停用 lsan。
  • 在 bootfs 中为 Rust 二进制文件使用动态链接。
  • 为所有 Rust 目标类型(除了 dylib + cdylib)添加了 .rustdoc 子目标。
  • 添加了对 rustc_cdylib loadable_module 的支持。

SDK

SDK 进行了以下更新:

  • 提升了 Bazel 操作性能并修复了多个 bug。这包括使用 genquery 优化 depfile 生成(节省约 0.5-1 秒)、组合 cquery 调用(节省 1.2-1.5 秒)、修复 fuchsia_product_configuration 的相对路径、解决 minfo fuchsia_board_configuration() 错误、修复 Bazel 汇编映像验证,以及修复开放字体目标。

软件交付

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

  • 增强了对可升级软件包的支持。这包括添加了垃圾回收保护,允许 base-resolver 与基本软件包一起解析它们,并引入了用于更新的 SetUpgradableUrls API(实现受标志控制)。
  • 通过在加载缓存软件包时清除变体信息来提高一致性。
  • 改进了 bootpkg 实用程序并缩减了二进制文件大小。这包括移除异步操作、缩减二进制文件大小,以及添加用于查看启动映像及其内容的 CLI 工具(listshow 子命令)。
  • 改进了软件包管理代码,并阐明了 OTA 进度报告。 这包括重构软件包服务器实例以使用 RepositorySpec、移除重复的枚举定义以提高可维护性,以及向 CLI OTA 工具添加有关进度报告行为的备注。
  • 向 vim3 开发板添加了一些功能,以便将 xHCI 驱动程序从 BIB 迁移到 AIB。

Starnix

Starnix 进行了以下更新:

  • 在 Starnix 中添加了对暂停和恢复容器的支持,包括跟踪 Linux 唤醒锁、将操作委托给 Starnix 运行程序以及获取/释放唤醒租约。
  • 添加了对触摸和按钮事件以及 EPOLLWAKEUP 的支持,以唤醒已暂停的容器。删除 epoll 实例后,epoll 唤醒锁会被正确删除。
  • 修复了与暂停/恢复期间的计时器管理和信号清除相关的竞态条件。
  • 更新了 hrtimer,以使用代理通道唤醒容器。
  • 添加了对 CLONE_NEWUTS 标志和 FUSE BPF 程序加载的支持。
  • 添加了基于 binder.fidl 协议的新 Unix 网域套接字实现,该实现支持在 Starnix 中的 Fuchsia 和 Linux 程序之间进行进程间通信和文件描述符传递。
  • io_uring 实现了 io_uring_setup 和基本读写操作,使 io_uring01 测试通过。
  • 为缺少的 futex 命令实现了存根。
  • 添加了 /proc/sys/kernel/cap_last_cap 文件。
  • 修复了安全属性的访问权限检查,并解决了 BPF 文件系统安全标签未正确设置的问题。
  • 更新了套接字中的 accept 队列大小,使其受限。
  • 更新了 SELinux 状态文件的实现,可正确处理特定文件的跳转行为和文件结束指示。
  • 修复了 chown 验证逻辑。

测试

测试进行了以下更新:

  • 改进了 fxtest 工具,包括支持输出目录路径中的 $FUCHSIA_OUT 等变量(与旧版 fx test 的行为一致)、在执行后输出失败的测试,以及解决重放中的部分输出问题。新的 --timestamp-artifacts 标志可防止覆盖之前的测试输出。
  • python_mobly_test 中引入了 honeydew_config 以整合 Honeydew 配置信息,从而简化了添加新配置的流程。
  • 在 Lacewing 测试中添加了对 ssh_keepalive_timeout FFX 配置的支持。
  • 改进了配置文件合并功能。在目标设备上扁平化配置文件计数器合并,以便在二进制配置文件关联模式下实现合并。
  • 修复了 libconcurrent 的 WellDefinedCopy 帮助程序中可能导致随机测试失败的对齐问题。

计时

我们对时间记录功能进行了以下更新:

工具

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

  • 添加了对向模拟器添加 vsock 设备的支持,并添加了对串行控制台和基本启动功能的有限 crosvm 引擎后端支持。
  • 引入了 crosvm 目标以在自动化测试中运行测试,并提取了用于代码共享的通用模拟器目标。

ffx

ffx 进行了以下更新:

  • 添加了用于重命名软件包的 ffx package archive edit 命令。
  • 改进了 ffx component route,以包含运行程序。
  • 改进了 ffx target 命令中的输出和错误处理,包括修复了 IPv6 格式、target echo 的机器输出、默认 target test 问题和无守护程序重新连接的问题。
  • 改进了 ffx repository server 的独立功能
    • 更新为使用正确的代码库名称与商品套装搭配使用。
    • 添加了针对是否有目标设备的验证。
    • 修复了商品套装服务器注册问题。
    • 更新了 ffx repository server 命令,使其具有幂等性。
    • ffx repository server stop 添加了 --product--bundle 选项。
    • 变更:fxr/1125912fxr/1133672fxr/1128280fxr/1129857
  • ffx config set 中移除了等级选项。
  • 添加了对向 ffx emu start 添加 vsock 设备的支持。
  • 更新了 ffx target repository 命令,使其具有幂等性。
  • 更新了设备端 ffx target repository list 列表配置。
  • 更新了 ffx target repository deregister,以更新设备端配置。
  • --all 添加到了 ffx repository remove
  • 更正了 ffx target register 中商品软件包的代码库名称用法。

fx

fx 进行了以下更新:

  • 添加了 fx build-profile 命令,以便在构建期间有条件地收集系统性能分析数据。

界面

界面进行了以下更新:

  • 为默认窗口管理器引入了屏保协议。
  • fuchsia.input.*fuchsia.ui.* FIDL 库启用了版本控制。更正了之前的错误 @available 注释。
  • 改进了输入处理:将设备 ID 从输入流水线传递给界面客户端,并在输入帮助程序中实现了设备 ID,并附带了 CTF 测试。
  • 改进了界面测试:在测试基类中使用了 logging_event_loop,以改进超时调试,并更新了虚拟键盘测试以使用新的 C++ FIDL 绑定。在 starnix-touch-test 中向等待信号添加了有限超时和日志。

WLAN

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

  • 通过向底层操作添加超时,提高了 WLAN 客户端和 AP 操作的可靠性。这通过根据超时添加超时和恢复步骤来解决较低层级的挂起问题,从而提高整体稳定性。
  • 修复了对 fuchsia-async 排序的单元测试依赖项。
  • 重构了缓冲区处理并改进了编码。重构了 bufferBufferStrategy 实现,集成了 DeltaZigzagSimple8bRleRingBufferDeltaSimple8bRleRingBuffer,并添加了对未压缩缓冲区的支持。u64 的默认编码现为 Simple8bRle
  • 实现了事件反应堆组合器并增强了 TimeMatrix 处理功能。 实现了事件反应堆组合元件,并添加了 MockTimeMatrix 以进行测试。修复了跳过的间隔时间计算、Tick::start_has_sample bug 和不必要的 TimeMatrix 服务器 Future 终止问题。将 TimeMatrix 输出为数据规范,以便使用更出色的工具。