Fuchsia F27 版本说明

日期:2025 年 7 月 15 日

版本:F27

已实现以下更改:

无障碍设置

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

  • 通过使 ColorConverter 协议连接取决于 AttachA11yView 标志,改进了 A11yManager 的模块化程度

音频

针对音频进行了以下更新:

  • 改进了音频设备注册表 (ADR),以妥善处理复合设备的移除,防止潜在的崩溃。此外,还引入了一个新的平台配置标志,用于控制 ADR 服务的抢先启动。
  • 增强型音频驱动程序,可提高稳定性和识别能力。 AML-G12 驱动程序现在会公开 manufacturerproduct 属性,使用 SDK platform-device 库,并且如果 StopStart 之前调用,也不会再崩溃。intel-hda 驱动程序现在可以正确处理第二个环形缓冲区的创建。
  • 更新了虚拟音频驱动程序,以直接提供 Composite FIDL 协议,并弃用了 CompositeConnector。现代非旧版虚拟音频驱动程序现已包含在开发 build 中,通过了测试验证,并部分支持位置通知。
  • 显著增强了 audio_driver_tests 套件,包括全面的负面测试、竞态条件修复以及执行时间缩短 25%。该套件现在分为 basicadminrealtime 软件包,以便进行更有针对性的测试。
  • 扩展了音频功能的路由服务,以帮助从 devfs 迁移。StreamConfigConnectorService 已拆分为不同的 InputOutput 服务。

蓝牙

针对蓝牙进行了以下更新:

  • 允许使用同一本地地址发布多个 LE 广告
  • 引入了一种配置分流音频的 SCO 索引的方法,并更新了测试框架以提供此功能。
  • 引入并实现了 fuchsia.bluetooth.sys.Access.SetConnectionPolicy FIDL API,允许应用控制蓝牙堆栈的 BR/EDR 连接性。
  • 重构了免触摸配置文件 (HFP) 配置架构,以明确启用具有特定功能的音频网关 (AG) 和免触摸 (HF) 角色,从而完成从已弃用的 bluetooth.hfp.enabled 字段的迁移。
  • 改进了 MAC 地址处理bt-hci 驱动程序现在使用新式驱动程序元数据库检索 MAC 地址,并使用 fdf_metadata::MetadataServer 转发 bt-transport-uart,取代了旧版方法。
  • fuchsia.hardware.bluetooth 和未使用的 fuchsia.hardware.bt.hcifuchsia.hardware.bt.vendor Banjo 库中移除了旧版 HLCPP 支持,完成了向新版 FIDL 和 C++ 绑定的迁移。
  • bt-init 的组件清单 (CML) 及其集成测试框架添加了 SuspendEnabledSystemActivityGovernor 功能
  • 蓝牙组件现在可以启动,并具有可选的 config 功能,从而实现更灵活的系统配置。
  • 添加了新的 FIDL 接口,以支持连接的同步群组 (CIG) 管理。
  • bt-gap 查找 bt-host 组件的超时时间从 5 秒增加到 100 秒,以提高稳健性。
  • 引入了 ConnectionReceiver2 FIDL,该 FIDL 支持新蓝牙连接的唤醒租约握手和流量控制。
  • 使用现代服务路由替换了蓝牙 devfs 功能路由,以简化客户端升级。

钴蓝

针对 Cobalt 进行了以下更新:

  • 通过将系统配置文件移至信封级,提高了数据上传效率,这通过对观测批次中的系统配置文件进行去重,显著减少了上传的字节数。
  • 通过添加缺失的 include 来遵守“按需包含”准则,修复了 build 问题
  • 在源生成器中允许使用非驼峰式 Rust 枚举,确保包含特殊字符的事件代码可以正常使用,而不会导致 build 失败。
  • 已完成从已弃用的 step_multiplierstep_multiplier_float 的迁移,以实现整数直方图报告,包括移除旧的字段定义和验证。

组件框架

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

  • fuchsia.component.Realm FIDL 协议添加了一个新方法 GetResolvedInfo,用于查询已解析的组件信息。
  • 将组件模型迁移到 fuchsia.io2,替换已弃用的 fuchsia.io 功能。
  • 为 Realm Builder 添加了持久存储分片,可在重启时保留组件数据,这对于需要状态持久性的测试特别有用。
  • 增强型组件清单和工具。这包括支持 CML 中的弱字典、cmc 中字典内的服务,以及改进命令行工具中的错误消息和实参标准化。
  • 扩展了对配置功能的支持。已为内置 runner 添加支持,并且 Component Manager 现在会在路由期间对配置功能执行类型检查。
  • 提升了性能和稳定性。现在,Component Manager 已启用完整的链接时优化 (LTO),从而缩减其二进制文件大小,并且 service-broker 现在可以更及时地关闭。

构建

针对 build 进行了以下更新:

  • 提升了性能和开发者体验。这包括缓存 Bazel 查询结果、优化“平衡”编译模式以使用 ThinLTO,以及增强 DTC 和 fx build 目标名称的错误报告功能。
  • 重构了 Bazel 集成工作流。现在,树内 IDK 代码库是在 fx gen 时生成的,并且已移除 --config=no_sdk 标志,取而代之的是用于宿主 build 的显式 --config=host 标志,从而修复了增量 build 问题。

诊断

针对“诊断”功能进行了以下更新:

显示

  • 扩展了像素格式支持。Magma 和 virtio-gpu 现在支持 R8G8B8A8 格式,从而提高了与更多硬件和应用的兼容性。

  • 改进了图形渲染和稳定性。修复了 Intel 显示驱动程序中的关闭崩溃问题。

驱动程序框架

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

FIDL

针对 FIDL 进行了以下更新:

  • 通过将生成的函数正文移出头文件并解耦有线绑定和自然绑定,减少冗余的编译工作,显著缩短了 C++ 构建时间
  • 改进了 Rust 线绑定的工程学和性能。增强功能包括支持按值/引用进行编码、预解码的消息缓冲区,以及用于非阻塞发送的应急机制。通过优化填充归零来提升性能,并且渠道关闭错误现在明确包含墓志铭。
  • 为 Rust FIDL 绑定添加了对 zx::Counter 的支持
  • 添加了新的静态 Python FIDL 后端 (fidlgen_python),并且默认情况下会为所有 FIDL 库生成绑定。此初始版本支持协议方法、可靠的外部类型导入、必需的结构体字段,并改进了 IDE 可发现性。

GPU 和图形

针对 GPU 和图形进行了以下更新:

  • 显著改进了 Magma 的核心。信号量现在使用 zx::counter 而不是 zx::vmo,以获得更好的性能并减少内存使用量。 此外,上下文创建现在支持优先级,连接关闭时缓冲区释放更安全,并且提供了一个新的 C++ 到 C 绑定库。
  • 将图形驱动程序从 devfs 迁移到 FIDL 服务。这项系统级工作旨在对图形组件(包括 Mali 驱动程序和 Magma 集成)进行现代化改造,从而提高安全性并清晰呈现公开的功能。旧版 DFv1 库也已移除。
  • 扩展了像素格式支持。Magma 和 virtio-gpu 现在支持 A2B10G10R10P010,从而提高了与更多硬件和应用的兼容性。
  • 改进了图形渲染和稳定性。Vulkan 交换链现在可以正确处理 alphaComposite 模式,确保正确渲染不透明表面。
  • 改进了图形服务的 FIDL API 和 ABI。fuchsia.vulkan.loader/Loader 协议现已标记为进行 ABI 检查。Magma 服务 FIDL 现在更清晰地公开了 CombinedDevice 协议,从而简化了客户端 API。

IoT、Matter 和 Thread

针对 IOT、Matter 和 Thread 进行了以下更新:

内核

针对内核进行了以下更新:

  • zx_vmar_map 实现了 ZX_VM_FAULT_BEYOND_STREAM_SIZE 标志。这样一来,超出 VMO 内容大小的内存访问会发生故障,从而提高与 POSIX mmap 语义的兼容性。
  • 添加了对 ktrace 流式传输的支持。zx_ktrace_read 现在会使用其读取的数据,从而使用户空间可以通过在循环中调用此系统调用来流式传输内核轨迹数据。在此清理过程中,移除了未使用的 zx_ktrace_write 系统调用。

  • 添加了对可映射的内核时钟的支持。这些时钟支持高效的读取访问,在大多数情况下无需进入内核。如需详细了解设计,请参阅 RFC 0266

Netstack

我们针对 Nestack 进行了以下更新:

  • 计划在 F27 推广到 100% 之后、F28 开始推广之前,通过功能标志启用 Netstack3。
  • 全面支持 TCP 选择性确认 (SACK),包括基于 SACK 的丢包恢复和拥塞控制更新,以显著提高 TCP 在丢包网络上的性能。
  • 改进了 TCP ACK 行为:默认启用延迟 ACK,引入了快速确认期,并确保了更准确的窗口更新计算,从而提升了性能。
  • 通过修复多个严重 bug,增强了 TCP 可靠性和正确性,包括 CUBIC 中的算术溢出、无序 SACK 导致的内核崩溃、错误的 RTT/RTO 计算以及不正确的重传计时器重新启动。
  • 通过根据路径 MTU 更新动态调整最大分段大小 (MSS),并使 ICMP 错误传播与 Linux 行为保持一致,改进了 TCP 对网络状况的响应
  • 通过更正对无序和重复分片的处理,修复了 IP 分片重组,并将 IPv4 重组超时时间减少到 15 秒,以符合 RFC-791 的要求。
  • 通过重构 DAD 机制使其与 IP 无关并添加必要的配置选项,为 IPv4 重复地址检测 (DAD) 做好准备
  • 使用 LRU 政策限制了路径 MTU 缓存大小,以缓解因重复的 PacketTooBig 消息而可能造成的拒绝服务漏洞。
  • netstack 现在会针对发送到未绑定 UDP 端口的数据报发送 ICMP 端口不可达消息,并受到现有 ICMP 速率限制的保护。
  • 通过新的 fuchsia.net.filter.SocketControl FIDL 协议引入了对基于 eBPF 的套接字出站过滤器的支持,从而实现了高级数据包过滤功能。
  • 通过数据包标记增强网络过滤功能,允许 fuchsia.net.filter 规则标记数据包,并在转发决策中使用这些标记。
  • 改进了连接跟踪功能,可解析内部 ICMP 错误数据包,将其与原始连接相关联,以针对 ICMP 错误启用 NAT 等功能。
  • 为与新的 API 标准保持一致,fuchsia.netpol FIDL 库已重命名为 fuchsia.net.policy
  • 加强了 NDP 和 MLD 消息验证,以强制执行 RFC 中规定的正确跳数限制,并确保在接口停用时重置已学习的 IPv6 参数。
  • 通过更精细的计数器增强网络可观测性,包括每个设备的 IP 计数器、每个套接字的 UDP 计数器和 MLD Inspect 计数器。

平台驱动程序

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

电源管理

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

软件交付

我们针对软件交付进行了以下更新:

  • system-update-committer 添加了健康检查协议,该协议会使耗时超过 5 分钟的提交失败,从而提高整体更新可靠性。
  • 改进了 system-update-checker 的诊断日志记录,以检测何时与 UpdateManager 的连接断开。
  • 迁移了恢复组件,以使用 ArchiveReader 和新的 Open 方法,取代已弃用的 LogProcessor

Starnix

针对 Starnix 进行了以下更新:

  • 为套接字操作实现了一套安全钩子,增强了创建、绑定、连接、监听和关闭各种套接字类型的安全性。
  • 为 BPF 操作添加了一组全面的安全钩子,涵盖 bpfbpf_mapbpf_prog 和 BPF 资源的分配,以及必要的功能检查。
  • 针对各种内核操作实现了新的安全钩子,包括用于检查内存映射权限的 mmap、用于接收文件描述符的 file_receive 和用于设置资源限制的 task_setrlimit
  • 对 SELinux 异常和政策管理进行了现代化改造,用灵活的配置功能取代了基于文件的配置,移除了过时的异常,并添加了对许可主题网域的支持。
  • 更新了 SEStarnix,以使用新的 API、性能缓存和扩展的测试覆盖范围,对 ioctl 调用执行扩展权限 (xperm) 检查,从而实现精细的控制。
  • 引入了对“私有”匿名文件系统节点的支持,这些节点会绕过对 signalfdeventfdsync_file 等内部文件类型的 SELinux 检查,以提高兼容性和性能。
  • 改进了套接字标签和分类,确保在创建时为套接字(TCP、UDP、原始 IP)分配正确的安全类和上下文。
  • 更新了 fuchsia.starnix.binder FIDL API 以包含 WriteBytes 方法,从而提供了一种更高效的方式来执行小内存写入,避免了 VMO 创建。
  • 在 Starnix 中添加了对 Fxfs 上文件级加密 (FBE) 的支持。这包括支持符号链接和正确处理加密路径。加密密钥现在安全地存储在 /data 中,从而改进了卷管理并实现了可靠的冷启动模拟。

存储

存储空间进行了以下更新:

测试

以下是针对测试进行的更新:

计时

针对时间管理功能进行了以下更新:

  • 为 Timekeeper 引入了电源管理集成,包括一个功能标志和相关逻辑,用于防止在时钟启动之前过早更新时钟。
  • 通过禁止负启动时间轴参考调整(表示由重置引起的无效状态),增强了 RTC 可靠性
  • 通过检查添加了以下内容,增强了时间跟踪的可观测性和可调试性:UTC 调整成功/失败的指标、上次调整的详细日志记录,以及公开结构化配置数据。
  • 通过以下方式改进了 Starnix UTC 时间准确性和可配置性:将参考时间轴更正为启动、实现外部调整的代理,以及最终确定可设置的 UTC 时间的路由。
  • 引入了全面的外部 UTC 时间调整机制,包括核心决策逻辑、集成到 UTC 控制环路、异步命令处理和可配置的以安全性为中心的时间窗口限制。
  • 通过添加组件实例 ID 并以实验方式使存储 AIB 可用,为 Timekeeper 启用了永久性存储
  • 通过以下方式改进了闹钟处理和 RTC 仿真:根据设备属性修正了计时器索引选择,并优化了常开计数器的使用。

工具

针对工具进行了以下更新:

fx

针对 fx 进行了以下更新:

  • 改进了 fx set 命令,以更好地管理 build 目录。现在,默认使用 --auto-dir 创建特定于产品的 build 目录,而 out/default 则成为一个便捷的符号链接。修复了多个 bug,包括 --dir--fint-params-path 标志的问题,并且不再将 build 目录存储在 fx.config 中,从而避免了过时问题。
  • 标准化并改进了目标选择标记。为了与 ffx 保持一致,fx -d 标志现已弃用,改用 fx -tfx --target
  • fx build 命令添加了一条警告,提醒开发者不要使用 Ninja 目标名称,而应使用 GN 标签。此更改有助于鼓励正确使用 build 实参,并为未来的 Bazel 集成做好准备。
  • 增强了来自 fx 的 build 分析功能,可报告更多上下文信息,例如 build 是由 fx test 还是 fx multi 触发的,并包含来自 args.json 的更多 build 实参。

ffx

针对 ffx 进行了以下更新:

  • ffx 中移除了基于守护程序的软件包服务器。所有关联的命令(ffx repository addlistremovestatus 等)也会被移除。用户现在应使用独立的 ffx repository server 命令。
  • 改进了网络和连接。ffx 现在可以正确处理带有范围 ID 的 IPv6 地址,为连接失败提供更有用的错误消息,并更可靠地发现和管理目标,尤其是在通过 USB/VSOCK 连接时。还添加了对通过 VSOCK 的 Overnet 的支持。
  • ffxfx 命令添加了选择启用的终端用户界面 (TUI),以提供增强的格式设置。可以通过 ffx.ui.mode 配置启用此功能。fx use 命令率先采用了此功能。
  • 更新了 ffx productffx package,使其成为独立的可执行文件,不再捆绑到主 ffx 二进制文件中。此变更可缩短构建时间。
  • 更新了 ffx test run 命令,使其更适合自动化,支持严格的输出要求和机器可读的 JSON。
  • ffx inspect 命令的 --component 标志替换为 --data,以便进行更直观的查询。
  • 改进了 ffx driver 命令,新增了 --unbound 标志,用于仅列出未绑定的节点,并更准确地报告无法绑定的节点。
  • 提高了刷写速度和可靠性。由于传输缓冲区大小增加,ffx flash 命令现在处理大型图片的速度明显更快。现在,它还可以通过自动重新分块来正确处理大型稀疏图片。还修复了导致 fx flash 中出现“未知 Ninja 路径”错误的 bug。
  • 更新了 ffx trace 命令,以更好地直观呈现 FIDL IPC 轨迹。它采用双遍方法来正确呈现 Perfetto 中的异步双向 FIDL 调用(以单个连续流程的形式),并将事件名称设置为 FIDL 方法名称,以便于调试。

zxdb

zxdb 进行了以下更新:

  • 在 zxdb 中默认启用了主机端展开,利用完整的调试信息来提供更高质量的回溯。添加了 --force-remote-unwind 选项,用于恢复之前的目标端行为。

界面

界面进行了以下更新:

  • 在 Flatland 中启用了直接显示。这样一来,系统可以直接显示客户端图片,而不是先合成再显示,从而提高渲染效率。此外,该版本还对缓冲区收集导入流程进行了关键修复。
  • 改进了输入系统和核心界面稳定性。这些更改修复了 Scenic 的 vsync 区间计算中的问题,以防止崩溃,并添加了对鼠标设备的支持。
  • 增强了界面服务的性能和可配置性。现在可以使用线程和内存配置文件配置 Scenic 和 Scene Manager,从而让集成商能够微调资源分配。此外,Scenic 的帧预测边距现在可参数化。

WLAN 和连接

针对 WLAN 和连接进行了以下更新:

  • wlanix 引入了新的 GetMacAddress FIDL 方法,用于检索设备的 MAC 地址。
  • wlantool 命令行实用程序现在可以使用 BSSID 而不是 SSID 连接到网络。
  • 优化了漫游算法,使其更具响应性和效率。这包括使扫描退避呈指数级增长、更智能地重置退避,以及通过移除 SNR 作为触发器来简化静止漫游配置文件。
  • 通过以下方式简化了核心 WLAN FIDL API:移除未使用的方法和迁移标志;将特定于 SoftMAC 的类型移出通用库;重命名与统计信息相关的 API,以提高清晰度。
  • 通过公开 WLAN 抢占、SDIO 总线指标和固件 RX/TX 错误的新计数器来增强驱动程序遥测,从而改进监控。
  • 通过调整最大 TX glom 帧来防止批次大小超出协议限制,解决了稳定性问题