Fuchsia F19 版本说明

日期:2024 年 4 月 26 日

版本:F19

我们已实施以下更改:

音频

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

  • 改进了音频模块化:Soundplayer 组件现在位于自己的 AIB 中,从 audio_core 中移除了未使用的存储空间,并修复了导致 ValueErrors 的缺失 audio_core 向量。

  • 针对音频重构并改进了 ffxdaemon:这包括将渲染程序和捕获器逻辑进行模块化处理、重构 RingBuffer 以支持多协议、重命名和阐明与 WAV 套接字相关的内部组件、改进依赖项管理,以及重构 AudioDaemon 结构体。

蓝牙

构建

Build 进行了以下更新:

  • 提高了 Bazel build 的密封性:更新了 BoringSSL build,以便在滚动期间生成 Bazel 规则,并改进了 Bazel SDK 和 Clang 工作区初始化。

钴蓝

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

  • 移除了配置文件提供程序路由。这是由于 Cobalt 迁移到了 Role Manager 所致。

  • 更新为在 Cobalt 的 FIDL 接口中将指标作为 SDK 区域包含在内。

组件框架

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

  • 增强型组件生命周期管理

    • 引入了 fuchsia.component.Escrow API 以在关闭期间管理组件状态,并将其集成到组件启动/停止操作中。
  • 改进了 capability 处理

  • 增强型 CML 和路由

    • 针对周期检测、关闭顺序和路由稳健性改进了对字典的处理。
  • 改进了工具

    • ffx component show 启用了架构支持。
  • 移除了配置值文件 (CVF) 要求

开发者

我们对“开发者”进行了以下更新:

  • 扩大了对 roll-compiler 的支持:添加了 aarch64 Mac 支持。

  • 改进了 ProfileResource 路由:此资源现在会路由到串行控制台。

诊断

“诊断”部分进行了以下重要更新:

  • 增强版 Archivist:Archivist 自身的最低日志严重级别现在可以动态调整,让您可以更灵活地控制其日志输出。为保持一致,JSON 日志编码的“verbosity”字段已重命名为“raw_severity”。每个组件的 Archivist 批处理超时现在可配置。改进了归档工具的性能。

  • 通过 zxdb 改进了调试功能:通过递归组件过滤器(允许附加到被过滤组件的所有子项)和新的通知信号过滤器应用增强了调试程序功能。现已收集调试程序命令分析数据。

  • 改进了跟踪功能:轨迹导入器对损坏的轨迹更加稳健。

  • 改进了 Rust Inspect API:改进了 Inspect Rust API,以支持属性中的原子更新。

  • 改进了 ffx inspect:ffx inspect 和 iquery 不再支持直接读取文件。

  • 改进了 ffx 日志:添加了新的异步事务日志读取器和解析器,以提升 ffx log 的性能。为符号化程序写入添加了缓冲区,以防止死锁。ffx log 现在支持日志回溯美化,并且可以停用以提升性能。通过删除标记中的重复标识符并妥善处理符号化错误,ffx log 输出也得到了改进。

显示

我们对显示屏进行了以下关键更新:

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

驱动程序框架

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

  • 增强了驱动程序上下文和启动功能:更新了 DriverStartArgs,以添加 node_properties

  • 改进了 devfs 与控制器的互动DevfsAddArgs 现在允许替换兼容性 shim 的控制器接口,并且 devnode 现在为 fuchsia.device/Controller 和设备通道使用单独的回调,这有助于提高清晰度并防止意外多路复用。

  • 改进了稳定性和资源管理:节点取消分配现在会取消重新绑定请求。修复了 aml-sdmmcvim3-usb-phy 的共置标志。

FIDL

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

  • 增强了 FIDL 工具:添加了一款新工具,用于评估各 API 级别的运行时兼容性,然后生成详细报告,以帮助在各个 Fuchsia 版本中保持稳定性。

  • 改进了 FIDL API 版本控制:向 FIDL JSON IR 添加了 deprecatedplatformlegacy 字段,并添加了 fidlc --platform 标志,以增强 API 版本控制和废弃管理。移除了 @transitional 注解,改为使用显式版本控制。

  • 改进了错误处理:所有 FIDL 错误现在都将广播,并且都是终端错误。

GPU

GPU 进行了以下更新:

  • 增强型电源管理:添加了对在暂停时关闭着色器核心,然后在恢复时开启着色器核心的支持。此外,还允许抢占原子,以缩短挂起延迟时间。添加了适用于 GPU 功耗管理的 FIDL 协议。

i18n

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

  • 修复了更改检测器测试,以测试日期本地化的稳定性:解决了 ICU 库中的日期格式更改导致测试失败的问题。受影响的测试已更新,以提高稳健性。

内核

已对内核进行以下更新:

  • 电源和任务调度

    • 添加了用于在运行时处理器电源管理 (RPPM) 的服务中注册 CPU 能耗模型的临时系统调用。
    • 添加了对唤醒矢量的临时支持,允许系统通过设备中断从暂停状态唤醒。
    • 开始构建用于封装调度器运行队列的 libsched 库。
    • 修复了 PI 传播中的簿记错误。
  • 虚拟内存

  • 性能剖析

    • 添加了对使用 zx*sampler* 系统调用的新型抽样性能分析器的实验性支持。
  • IPC 和时钟

    • 修复了与使用错误缓冲区读取套接字数据报相关的 bug。
    • 添加了新的时钟对象信号 ZX_CLOCK_UPDATED,用于在底层时钟参数发生更改时通知观察器。此信号可用于为在 Starnix 下运行的 Linux 程序实现更高效、更准确的“获取时间”调用。
  • 安全性

  • 其他值得注意的改进

    • 重构了用户复制和故障处理例程,以便在保持自旋锁的同时启用有限故障。这使我们能够用自旋锁替换 FutexState 互斥量、简化 FutexContext,并为移除全局线程锁做好准备。
    • 重构了 arm64 低级别缓存维护例程。

平台驱动程序

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

  • 增强型电源管理:添加了一个新的支持库,可简化驱动程序与电源框架的集成。“Power Mode”(电源模式)电源元素依赖于 SAG,用于在 Starnix 内核初始化期间管理开机租约。此外,为提高并发性和可靠性,Power Broker FIDL API 也进行了改进。

  • 提高了驱动程序稳定性:修复了 SDMMC 驱动程序的 PrepareStop 崩溃问题。UMS 现在支持 SCSI UNMAP 命令。更新了 Goldfish 管道驱动程序,以妥善处理 ZX_ERR_PEER_CLOSED。解决了 SPI 核心驱动程序在调度程序角色和异步调用方面存在的问题。

电源管理

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

  • 增强型电源管理:添加了新的支持库,可简化驱动程序与电源框架的集成。“Power Mode”(电源模式)电源元素依赖于 SAG,用于在 Starnix 内核初始化期间管理开机租约。此外,为提高并发性和可靠性,Power Broker FIDL API 也进行了改进。

软件交付

已对 Software Delivery 进行以下更新:

  • 重构了用于写入系统映像的系统更新程序:通过正确的 fuchsia.mem.Buffer 大小处理,提高了写入系统映像的可读性和可维护性。

  • 改进了软件包管理:添加了对通过产品 bundle 和可变 API 级别(例如 api-level=HEAD)发布 ffx repository publish 的支持。更新了软件包类型,使其与 paver 命名惯例保持一致。此外,从 package-tool 中移除了冗余的 --abi-revision 标志。

  • 增强了 pkg-cache:解决了动态索引垃圾回收方面的问题,更新了提高安全性所需的 Get 服务器端,并引入了 WritingIndex 以在缓存期间保护软件包。

  • 改进了 paver:修复了用于 ZBI 内容截断的 PartitionRead API。

Starnix

Starnix 进行了以下更新:

安全性和稳定性

功能和系统调用

  • 增强了文件系统和 I/O 操作:在 VFS 中实现了 openat2() 系统调用和 io_submit,包括对 IOCB_FLAG_RESFD 的支持,并改进了文件系统访问和异步 I/O。

  • 改进了信号处理:实现了 rt_sigpending() 函数以及 SA_RESETHANDSA_NODEFER 信号标志,从而提高了信号管理灵活性。此外,修复了 rt_sigtimedwait01 测试中的不稳定问题。

  • 实现了 getcpu() 函数:此函数提供了一种检索 CPU 信息的方法。

设备和驱动程序

  • 改进了对触摸屏的支持:针对 Uinput Touch 设备实现了 write(),针对 UI_DEV_CREATE 实现了 ioctl(),可处理 EV_ABS 事件。

  • 添加了骨架 GPU 设备:为日后实现 virtio-gpugfxstream 奠定了基础。添加了 gfxstream 功能标志。

ADB 和调试

  • 改进了 ADB 的功能:改进了错误处理功能,并支持大文件传输。增强了 ADB FunctionFSfuchsia.hardware.usb 的连接。

  • starnix 工具添加了 vmo 子命令:此工具允许查询包含由特定 VMO koid 支持的打开文件的进程。

其他改进

  • 改进了对时间和重新启动的处理:改进了重新启动系统调用的处理和 UTC 时间信号的处理。

  • 定义了 SyncFenceRegistry:替换了 Linux 同步栅栏的 VMO 支持实现。

测试

测试进行了以下更新:

线程

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

  • 添加了对 DHCPv6 PD 功能标志的支持

  • 添加了上游 DNS 功能标志 API

计时

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

  • 与电源管理集成:Timekeeper 现在加入了电源管理子系统,响应电源管理信号并向电源代理注册。此外,改进了电源管理不可用时的错误日志记录。
  • 改进了 fake-clockfake-clock 库现在会阻止同时使用单调时钟和 UTC 时钟。
  • 清理了依赖项和 build:移除了 realm-proxytimekeeper_integration 之间的依赖项,以及 group 块中的不必要的公开诗节和 deps 行。这有助于改善 build 卫生状况并减少不必要的依赖项。
  • 添加了初始更新暂停的回归测试:添加了回归测试来解决初始更新暂停的问题。

工具链

工具链进行了以下更新:

工具

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

ffx

  • 改进了目标管理:重构了本地目标发现功能,以实现更好的子字符串匹配和改进的默认处理。向 target addtarget remove 命令添加了架构支持。

  • 增强了易用性和性能:改进了对用户错误的错误处理和 build 性能。通过忽略等待时间的套接字,允许立即重启前台代码库服务器。

  • 扩展了功能:添加了一个具有 Pandora 功能的隐藏蓝牙子工具、用于交互式 FIDL 互动的 ffx playground、用于分发前台代码库 (--product-bundle) 的产品软件包支持,并改进了 ffx driver 工作流。

  • 移除了以下插件:移除了 inspectsetuiassemblywlanfuzz 插件。

  • 改进了 SSH 密钥管理:将 sshconfig 文件生成移到了 tools/devshell,并添加了 ffx config check-ssh-keys 子命令。

fx

  • 改进了 build 和软件包管理fx build 现在支持 GN 标签。fx show-package 现在会显示子软件包。改进了 fx sdk-deps 中的依赖项分类。

  • 增强的服务器和测试fx serve 现在可处理不兼容的服务器配置。fx size-check 现在支持 Bazel build。添加了商品套装工作流。

  • 统一的 SSH 密钥管理fx 现在通过 ffx 管理 SSH 密钥。

其他工具

界面

界面进行了以下更新:

  • 增强了界面测试和调试功能:Starnix 触控测试现在使用 GraphicalPresenter,以适应运行时更改。添加了 WatchViewPresentations 以改善界面测试同步,通过向 puppet_factory 添加了日志记录改进了界面测试调试,启用了输入 CTF 测试,添加了按应用呈现的跟踪,移动了界面一致性测试,并添加了多点触控事件顺序测试。

  • 改进了屏幕截图测试和显示屏功耗管理:添加了针对 PNG 编码屏幕截图的集成测试,fuchsia.ui.display.internal.DisplayPower 协议现在会路由到会话。

  • starnix_kernel 中实现了 SyncFenceRegistry:定义并实现了 SyncFenceRegistry

视频

我们对视频广告系列进行了以下更新:

  • 将 CodecImpl 迁移到了向后兼容的 sysmem2:此更改支持现有 sysmem(1) 客户端,同时允许逐步迁移。

WLAN

已针对 WLAN 进行以下更新:

  • 改进了 WLAN 日志记录功能:增强了对扫描结果和不兼容 BSS 的调试日志记录功能。使用共享渠道实现 Inspect 实现统一日志记录。更正了 ltrace_fn 的日志严重级别。

  • 解决了 hw-sim 模拟器中的竞态条件和 panic:修复了导致无法接收数据的竞态条件。解决了以太网状态存在的竞争条件。解决了 hw-sim 测试中的恐慌问题。

  • 清理了一些 WLAN 政策技术债务:通过对 RSSI 和 SNR 进行分组,改进了 WLAN 政策。将 dB、dBm 和 dBm/s 的数值类型更改为 f64。允许在组装中选择 WLAN 政策层。将 wlan_base 软件包重命名为 wlan_policy。通过直接记录扫描结果来改进 WLAN 配置管理器,以便更好地检测隐藏网络。

  • 重构了 wlansoftmac:从 Banjo 迁移到了 FIDL,移除了无用代码,并改进了测试。