日期:2026 年 1 月 7 日
版本:F29
音频
我们针对智能显示屏中的音频进行了以下平台更新:
扩展了 AudioCore 和 Driver Inspect 可观测性。检查数据现在包括
RoleManager错误,以便更好地诊断过去的故障;跟踪每个环形缓冲区的最小/最大/总和/溢出/欠载指标;并保留最近的任务记录。
我们针对其他产品进行了以下平台更新:
增强了音频设备注册表 (ADR) 的性能和可靠性。ADR 线程现在利用调度程序配置文件来提高负载下的流建立性能。此外,ADR 现在还支持没有环形缓冲区的拓扑、在环形缓冲区创建失败时进行重试,并正确考虑了环形缓冲区内存报告中的驱动程序过度分配。
改进了
ffx audio工具功能。ffx audio device play命令现在使用调度程序配置文件和更大的环形缓冲区,以实现无故障播放验证。该工具现在还会在设备列表中显示 ADRtoken_id,并包含针对计算下溢的修复。更新了信号处理拓扑规则。SDK 现在允许
DAI_INTERCONNECT元素在拓扑中进行自引用,从而支持独立 DAI 配置。- 变更:fxr/1348753
蓝牙
针对蓝牙进行了以下更新:
扩展了免触摸操作配置文件 (HFP) 的功能并提升了稳定性。添加了对“查询当前通话”(
AT+CLCC) 过程的支持,并添加了对 HF 发起的通话转移的处理。通过解析非标准 iOS 响应字段来提高互操作性,并通过 SCO 设置重试、断开连接跟踪修复和编解码器更新期间的竞态条件处理来增强连接稳定性。实现了 A2DP 分流支持和程序集配置。启用 A2DP 硬件分流功能(首选 44.1kHz),允许控制器或音频子系统处理音频编码。将 A2DP 配置迁移到平台组装,添加了针对特定产品替换供应商版本的功能,并清理了源代码构建器。
添加了对 LE 音频同步 (ISO) 通道的支持。更新了 UART 驱动程序,以支持 ISO 数据通道,并实现了对已连接的同步组 (CIG) 和流 (CIS) 的核心主机支持。这为低能耗音频功能奠定了基础。
引入了定期通告同步支持。添加了主机端支持,以同步到周期性广告序列,包括新的 FIDL 接口 (
SyncToPeriodicAdvertising) 和内部管理类,用于处理同步请求和扫描。- 更改: fxr/323893、 fxr/311329、 fxr/315115、 fxr/311258、 fxr/309761、 fxr/307911
- bug:fxb/309014342
增强了蓝牙命令行工具。添加了
ffx bluetooth controller list和show命令,以实现更好的设备管理。更新了bt-le-central,以支持音量控制服务 (VCS) 和已发布的音频功能服务 (PACS),并引入了用于控制 LE 音频广播的新工具bt-broadcast-assistant。更新了 Broadcom 固件和初始化逻辑。将 SYN4381 固件升级到版本 1195.1225。添加了安全检查,以防止在无法读取 MAC 地址时进行驱动程序初始化,并修复了 Android 供应商扩展广告行为。
- 变更: fxr/1376341、 fxr/1333724、 fxr/316020
- bug:fxb/405398246
优化了快速配对配置路由。改用专用的快速配对提供程序配置功能来确定可用性,替换了软件包解析逻辑,以减少错误并简化系统路由。
- 变更:fxr/1392593
扩展了 Pandora 测试界面功能。为 Pandora 测试框架添加了多项功能,包括 GATT 服务注册、配对事件排队、发现控制、连接设置,以及改进的广播超时处理。
构建
针对 build 进行了以下更新:
fx build中的实验性 Bazel 支持。fx build中添加了一项实验性功能,可直接为宿主目标调用 Bazel。此版本引入了三种 build 模式:GN(默认)、Bazel 和 Fint,并添加了实参验证和调用日志记录。- 变更: fxr/1344685、 fxr/1357006
- bug:fxb/42084668
移除了 macOS 主机 build 支持。已从 build 规则、IDK 和配置文件中移除对使用 macOS 作为宿主操作系统构建 Fuchsia 的支持。
构建日志的新根位置。所有 build 日志现在都存储在
out/.build_logs中,以改进组织和调试。添加了新命令fx build-logs来管理此目录结构。- 更改: fxr/1374367、 fxr/1375609
- bug:fxb/446759936、fxb/390427892
构建性能优化功能。针对 RBE 下载和本地操作实现了 xattr 哈希处理,以跳过不必要的重新哈希处理,并向 Ninja 添加了边缘权重提示,以优化长时间运行的操作的调度。
按需生成 GSYM 符号。更新了
export_last_build_debug_symbols,以支持使用--with-gsym-symbols标志按需生成 GSYM 符号。- 变更:fxr/1371841
- bug:fxb/445119122
自动构建资源分析。构建系统现在默认以 1 Hz 的间隔收集 CPU 使用情况和网络数据,以帮助调试缓慢的构建性能。
针对
sdk_shared_library强制执行了标头结构。定义为sdk_shared_library的目标现在必须将公共头文件放置在严格定义的目录结构中(通常在include/下)。- 变更:fxr/1351553
- bug:fxb/326656468
钴蓝
Cobalt 进行了以下更新:
Java 指标 ID 类型更新 Java 源生成器现在将
uint32指标 ID 声明为int,而不是long。这与 Cobalt 日志记录 API 保持一致,并消除了在客户端代码中进行显式转换的需要。- 变更:fxr/1368858
事件记录器验证更新:事件记录器现在接受包含不可能的区间的零计数的直方图。这样可以防止拒绝由包含零计数的不可能区间的采样器生成的密集向量。
- 变更:fxr/1366636
组件框架
针对组件框架进行了以下更新:
重构了 Realm Builder 的字典 API,以使用
DictionaryRef。这统一了字典的路由语法,使操作与 CML 模式保持一致,并提高了直观性。- 更改: fxr/1321745、 fxr/1348956
Realm Builder 和 SDK 中新增了扩展存储空间功能。
StorageAdmin协议已升级为fuchsia.component以供 SDK 访问,并且向 Realm Builder 添加了新的AddStorage函数,以实现程序化存储路由和配置。- 更改: fxr/1341047、 fxr/1336424
增强了
ffx component explore工具的发现功能。该工具现在利用fuchsia.dash.launcher-tool-urls分面在探索期间自动将特定于组件的工具加载到PATH中。- 变更:fxr/1367477
改进了
cmc错误报告功能。编译器现在会在失败时抑制内部回溯,并在合并的输出中包含源文件路径,以便更轻松地进行调试。- 变更: fxr/1354604、 fxr/1329574
修复了
fuchsia.component/Controller.Destroy中的竞态条件。该操作现在可确保销毁任务拥有响应者,从而防止在组件完全销毁之前出现过早的成功响应。- 变更:fxr/1376969
提高了服务连接可靠性。服务代理现在使用
wait_for_first_instance处理临时实例,并正确地将服务目录转换为闲置状态。- 变更: fxr/1368737、 fxr/1366596
为 fidl_next_services 添加了 Rust 绑定。为 fuchsia_component 添加了函数,以便在使用 fuchsia_next 绑定时连接到服务并提供服务。
- 变更:fxr/1345984
诊断
针对“诊断”功能进行了以下更新:
日志记录后端迁移。将 Rust 和 C++ 客户端迁移为使用
IOBuffers。移除了旧版 syslog 库ConnectStructured和StopInterestListener,或标记为要移除。检查工具和 API 更新。添加了
inspect_runtime::fetch_escrow,用于检索托管数据。将iquery别名为inspect,以保持 CLI 一致性。为延迟节点启用了!Send回调。ffx monitor和诊断工具更新。向ffx monitor添加了start、stop和status子命令,并支持机器输出。改进了ffx diagnostics中的错误消息和调试链接。日志记录可靠性和功能更新。已将
log_listener重命名为log。添加了对创建非全局记录器的支持。启用 Starnix 日志以报告单调时间戳偏移量。Archivist 和 Profiling 协议增强功能。实现了
fuchsia.diagnostics.Sample访问器协议。更新了拒绝标记,以支持动态集合。为主机端分析器工具启用了 FXT 格式支持。
显示
以下是针对展示广告所做的更新:
将布尔值电源控制替换为
SetDisplayPowerMode。此新 API 支持PowerMode类型(包括DOZE和DOZE_SUSPEND),可实现精细的电源管理,取代了协调器和驱动程序中的旧版SetDisplayPower方法。完成了显示引擎驱动程序从 Banjo 到 FIDL 的迁移。 Amlogic、Intel、Framebuffer、Goldfish、Virtio-GPU 和 Fake 显示驱动程序现在使用
fuchsia.hardware.display.engine.ServiceFIDL 服务,并且已移除旧版 Banjo 协议。将 EDID 处理和模式管理移至引擎驱动程序。EDID 解析逻辑已从协调器移至各个驱动程序,并且
DisplayTiming已替换为ModeId,用于在配置中识别显示模式。重构了颜色转换配置。将颜色转换设置分组到
ColorConversionConfig结构中,移除了显式标志,转而检查身份转换,并添加了对DisplayEngineInterface的支持。- 更改: fxr/1336085、 fxr/1334835、 fxr/1334834、 fxr/1334833
- bug:fxb/42079184
改进了显示协调器配置缓存。添加了启发式方法,以跳过已知会失败的
CheckConfig()调用,并改进了图层等效性检查(例如,忽略微不足道的 Alpha 更改),以减少缓存抖动和开销。- 变更: fxr/1386966、 fxr/1385741、 fxr/1386043
- bug: fxb/446042966、 fxb/450339197、 fxb/446046564
允许在 Flatland 中使用任意颜色层。移除了阻止将非背景颜色层发送到显示硬件的限制,从而允许协调器和驱动程序决定支持。
- 变更:fxr/1366467
- bug: fxb/444575885、 fxb/42056054
向 Fake Display 添加了多层和软件合成支持。现在,假显示驱动程序可以使用软件合成器处理和捕获多个层(包括纯色层),从而实现更好的测试覆盖率。
- 更改: fxr/1365795、 fxr/882658、 fxr/1365588、 fxr/882511
- bug: fxb/42075534、 fxb/124683
将 Carnelian 和 Vulkan 映像管道迁移到了显示服务。
carnelian库和 Vulkan 映像管道帧缓冲区交换链已更新为利用现代显示服务架构。- 更改: fxr/1340634、 fxr/1341748
驱动程序框架
针对驱动程序框架进行了以下更新:
强化了 Rust 驱动程序 (
fdf) 中的异步读取取消逻辑,以防出现竞态条件。该实现现在可以正确处理同步和非同步调度程序上的读取取消,并确保在注册了 await 时通道会延迟关闭,从而防止出现 use-after-free 或竞态条件。增强型
ffx driver node graph更新了ffx driver node graph,以支持过滤、服务路线可视化、驱动程序主机分组和交互式 HTML 图表生成。- 更改: fxr/1387874、 fxr/1316849
NodeAddArgs中的字典支持:向NodeAddArgs添加了offers_dictionary,使驱动程序能够通过字典(而非父节点的传出目录)向子节点提供服务。- 变更:fxr/1374681
- bug:fxb/433536317
Rust 绑定中的安全异步取消:为调度程序上的渠道等待实现了安全异步取消,以防止在丢弃具有待处理回调的渠道时出现竞态条件。
在
DriverStartArgs中添加了自定义 VMAR 支持:向DriverStartArgs添加了vmar以允许传递非根 VMAR,并向驱动程序组件添加了 VMAR 访问器。- 变更: fxr/1365794、 fxr/1372342
节点控制器中的
WaitForDriver方法 向节点控制器添加了WaitForDriver,允许客户端等待驱动程序在节点或复合父级上启动。- 变更:fxr/1355384
Rust 绑定中的驱动程序传输支持:在 Rust 绑定中为驱动程序传输实现了令牌转移协议和连接逻辑。
更新了驱动程序管理器以使用临时集合。与组件框架的互动已重构为使用临时集合,同时进行了属性存储优化,以减少内存用量。
- 更改: fxr/1328808、 fxr/1345528
MetadataServer库重构 重构了MetadataServer以简化初始化、弃用旧版 setter、支持有条件的元数据服务,并接受服务目录以进行测试。改进了驱动程序日志记录:为驱动程序管理器添加了基于
std::format的日志记录 API,在ffx driver(non-TTY) 中启用了 PID 打印,并改进了sys_driverFIDL 错误日志记录。驱动程序运行时和传输更新:在 SDK C++ 绑定中添加了同步令牌转移接收器、强制执行调度程序关闭回调、优化了停滞轮询,并启用了早期句柄转移。
- 变更: fxr/1376387、 fxr/1378681、 fxr/1340599、 fxr/1377322、 fxr/1404573
- bug: fxb/449001022
移除已弃用的 API(级别 26 之前)从音频驱动程序接口和常规驱动程序 SDK 中移除了在 26 之前的 SDK 版本中已弃用的 API。
- 更改: fxr/1345022、 fxr/1338907
FIDL
针对 FIDL 进行了以下更新:
为 FIDL 引入了 Bazel 构建规则。向 Bazel 构建系统添加了
fidl_library、fidl_ir和fidl_summary宏,以便直接在 Bazel 项目中定义 FIDL 库、生成 IR 和创建 API 摘要。改进了 Rust 绑定的工程学和功能。通过以下方式改进了开发者人机工程学:从协议定义派生默认传输,引入
Respond和RespondErr特征以简化响应处理,为数组启用WireVector编码,并添加IntoNatural以实现更好的类型转换。改进了 Rust 绑定验证和正确性。加强了运行时验证,以确保线格式正确性,包括检查结构体填充、字符串和向量限制以及信封标志。还改进了对未知互动和空结构的处理。
Rust 绑定中的专用句柄子类型。更新了 Rust 绑定,以生成特定的句柄子类型(例如,
zx::Channel),而非泛型zx::Handle类型,从而提高 FIDL 协议的编译时类型安全性。- 变更:fxr/1322764
重构了 Rust 绑定的异步和传输处理。通过引入
TwoWayFuture(用于可拆分 future)、简化连接关闭处理、将内部客户端/服务器概念重命名为调度程序,以及为端点生成添加执行器特征,对异步基础架构进行了全面改进。C++ 绑定清理和功能检测。将 C++ 功能检测整合到
lib/fidl/cpp/features.h中,并移除了对std::aligned_storage的依赖,以符合现代 C++ 标准。- 更改: fxr/1367223、 fxr/1386941
对 FIDL Rust 绑定进行了重大的人体工程学和类型安全改进。引入了
IntoNatural特征,以实现更清晰的类型转换,并通过Respond和RespondErr特征改进了响应人体工程学。现在可以更具体地处理 Fuchsia 句柄子类型。发送者和调度程序已重命名并重新整理,并且移除了Encodable和EncodeRef特征,最终确定了向新的编码方法迁移。
反馈
我们针对反馈功能进行了以下更新:
- 添加了对关机操作的跟踪。
LastRebootInfoProvider协议现在包含一个action字段,用于区分特定的关机类型(例如,“REBOOT”与“POWEROFF”),通过迁移到 JSON 存储和ShutdownWatcher持久性来支持。 - 优化了内存使用情况。通过缩短 JSON 序列化对象的生命周期,并在日志流式传输停止且组件处于空闲状态时强制清除 Scudo 内存,减少了内存占用。
- 移除了已弃用的 API。移除了
GetScreenshot协议(已在 F26 中弃用),并将annotations字段替换为annotations2,从而为客户端强制实施更高的限制。- 更改: fxr/1339244、 fxr/1371951
- 改进了崩溃报告上传逻辑。成功的急切上传现在会发出网络可达性信号,从而立即尝试上传之前缓存的报告。
- 变更:fxr/1369948
- 重构了配置和程序集。将
flash_ts_feedback_id_component_url迁移到feedback_id_component_url,添加了缺少的 i18n/取证路由,并移除了DisableWaitForInitialInterest解决方法。
固件
固件进行了以下更新:
启动测试产品软件包现在包含并正确配置了恢复(R slot)映像。现在,R slot 映像已明确包含在启动测试软件包中,以支持需要它们的主板。此外,这些映像现在使用正确的恢复主板配置,而不是标准配置,从而确保生成有效的映像。
- 变更: fxr/1395186、 fxr/1392596
更正了恢复出厂设置 TEE 协议的路由逻辑。
factory_reset使用的tee协议现在会在tee_manager未公开这些协议的 build 上路由到 void,从而防止在组件初始化期间出现路由错误。- 变更:fxr/1394139
图形和 GPU
针对图形和 GPU 进行了以下更新:
- 将 Goldfish Pipe 驱动程序迁移到了驱动程序框架 v2 (DFv2)。此次大规模更新包括将
ddk::IoBuffer替换为dma_buffer和fzl::OwnedVmoMapper、将总线协议处理移至父PipeDevice以更好地反映硬件拓扑,以及强制执行更严格的PipeChildDevice角色分离。 - 将编译时
PAGE_SIZE常量替换为运行时确定。 为了与 RFC 0016 保持一致并支持启动时页面大小配置,ZX_PAGE_SIZE和PAGE_SIZE常量已从 SDK、图形和界面组件中移除,这要求客户端在运行时查询页面大小。 - 向界面堆栈添加了
PowerMode和VsyncSource协议。PowerModeAPI 使用精细的 Doze 状态信息取代了二进制开/关开关,而VsyncSource使客户端能够直接订阅显示硬件的垂直同步信号。- 更改: fxr/1388733、 fxr/1388054、 fxr/1370858、 fxr/1375144、 fxr/1375001
- bug:fxb/450168684
- 在 x64 上从 Intel Vulkan ICD 过渡到 Lavapipe。为了简化维护,Intel Vulkan ICD 已被移除,现在由 Lavapipe 软件光栅化器处理 x64 配置上的 Vulkan 工作负载。
- 变更: fxr/1298005、 fxr/1331309
- 在
virtio-gpu中启用了 blob 资源支持。此增强功能使驱动程序能够使用 blob 资源直接从 guest 内存执行扫描输出,从而在使用 Lavapipe 帧缓冲区时消除不必要的复制操作。- 变更:fxr/1384983
- 将 ARM Mali 驱动程序更新到了版本 r54。此驱动程序更新带来了对 Vulkan 1.4 的支持。
- 改进了
msd-vsi-vip的稳定性和重置逻辑。修复包括在重置期间停用脉冲吞噬器、确保适当的等待时间,以及解决在测试周期内观察到的硬件挂起问题。
本地化
针对 I18n 进行了以下更新:
- 为 ICU 77.1 添加了 Rust 绑定。更新了
rust_icu_sys,以支持 ICU 版本 77.1 的集成和发布。- 变更:fxr/1392753
IoT、Matter 和 Thread
我们针对 IOT、Matter 和 Thread 进行了以下更新:
Thread 遥测增强功能:扩展了
telemetry.fidl和 Inspect,以包含extended_pan_id(用于网络识别)和multi_ail_detected(用于报告与多个相邻基础设施链路的连接)。OpenThread 堆栈升级:将 OpenThread 库、RCP 映像和 Rust-C 绑定更新为 2025 年 10 月 1 日版本,并实现了
otPlatDnsIsUpstreamQueryAvailable以改进 DNS 解析器状态跟踪。广告代理和服务发现修复:解决了 mDNS 发布结果未报告的问题,修复了服务删除的
UpdateId处理,并更正了边框代理 TXT 记录格式。TREL 和 MeshCoP 优先级 修改了 TREL 地址选择,以优先选择唯一链路本地地址而非全球单播地址 (GUA),并更新了 MeshCoP 以优先处理供应商 TXT 条目。
Netstack
针对 Netstack 进行了以下更新:
套接字诊断 API 和
fuchsia.net.matchers添加了fuchsia.net.socketsFIDL 库,以提供套接字诊断功能,并引入了fuchsia.net.matchers来统一数据包过滤和诊断 API 中的匹配器类型。Netstack3 TCP 性能和 RFC 合规性改进:为 TCP 缓冲区实现了延迟分配,以减少内存占用。通过以下方式增强了 RFC 合规性:强制执行 216 的最小 MSS、随机化 TCP 时间戳偏移量、在空间允许的情况下无条件发送 TCP 选项,以及修复窗口更新期间的 SACK 块处理。
Netlink 稳定性和安全性增强 通过针对
NETLINK_ROUTE操作强制执行CAP_NET_ADMIN并验证IFA_CACHEINFO等属性的缓冲区大小,增强了 Netlink 安全性。通过延迟消息解析并修复由未知消息或路由移除竞态条件引起的 panic,提高了稳定性和兼容性。路由和接口管理增强功能 更新了
netcfg,以通过 Netlink 支持接口本地路由表,并为本地配置的设备安装规则。移除了copy_routes_to_main_table解决方法,修复了 Netlink 中的default_metric填充问题,并调整了 WLAN 接口行为,使其在断开连接时保持管理上的启用状态。DHCP 客户端和邻居发现改进:通过允许重复选项并防止在
DHCPRELEASE数据包格式错误时出现 panic,提高了 DHCP 客户端的稳健性。通过以下方式增强了邻居发现功能:舍弃无效的征求消息、处理缺少链路层地址的通告,以及正确管理通告和 ARP 回复的 Override 标志。可达性计算更新:改进了可达性计算,以便正确区分网关和默认路由检测的 IPv4 和 IPv6 协议专用路由。在移除接口后,防止了虚假的状态更新。
- 更改: fxr/1350052、 fxr/1369776、 fxr/1374403、 fxr/1361557、 fxr/1348067
- bug:fxb/413683922
安全性和可靠性修复 针对
SO_REUSEPORT强制执行user_id验证,以将端口重用限制为同一用户拥有的套接字。在以太网设备上启用了 MAC 多播过滤,以尽早丢弃不需要的帧,并修复了 ICMP 回显错误处理程序中的崩溃问题。
平台驱动程序
针对平台驱动程序进行了以下更新:
SDHCI 驱动程序已迁移到 FIDL SDMMC 协议。此现代化更新会更新驱动程序以使用当前的 FIDL 标准,从而替换旧版接口。请注意,此模式目前不支持带内中断。
- 变更:fxr/1339906
改进了 SDHCI 驱动程序在停止序列和中断方面的稳定性。 驱动程序现在通过在
PrepareStop期间等待待处理的请求完成来防止 BTI 错误,并通过优先处理传输完成中断而不是数据超时来避免出现竞态条件。- 更改: fxr/1334866、 fxr/1335546
修复了 USB CDC 功能驱动程序中的数据停滞问题。现在,当端点被停用时,待传输的交易会正确取消,从而防止交易无限期地停留在待处理列表中。
- 变更:fxr/1341365
针对多个生产者和数据包标头,改进了
usb_vsock的可靠性。修复包括:在多生产者场景中正确唤醒所有感兴趣的唤醒器,从而解决挂起的连接;以及更正暂停数据包中的载荷长度,以防止标头损坏。- 更改: fxr/1404635、 fxr/1399396
- bug:fxb/455634403
DWC3 USB 驱动程序现在可以可靠地处理 VBUS 信号和核心重置。 驱动程序在支持的平台上主动管理 VBUS 有效信号,并在开机期间切换核心重置,以确保正确初始化。
- 更改: fxr/1405493、 fxr/1393773
添加了新的复合 USB 外围设备配置。现在,我们推出了支持 CDC、ADB 和 Fastboot 功能的新复合设备配置文件。
- 变更:fxr/1386083
GPIO 和 I2C 核心驱动程序现在会转发
PowerTokenService。此更新通过将服务从父实现驱动程序转发到子节点,有助于更好地集成电源管理。- 更改: fxr/1381721、 fxr/1362331
电源管理
针对电源管理进行了以下更新:
电池管理器重新架构和工具 电池管理器已恢复,可通过 FIDL 连接驱动程序,为电池信息提供集中式点。此更新引入了
batteryutilCLI 工具、用于充电控制的新 FIDL API,以及BatteryInfo中的average_current字段。行为变更包括在设备充电时阻止挂起,以及根据关机偏移量调整电池电量。Power Broker API 合并
LevelControlAPI 已从系统和ElementSchema中移除,要求所有集成迁移到ElementRunner。这简化了电源元素管理的 API surface。此外,还解决了相关声明的声明排序方面的竞态条件。可观测性和状态记录器 SDK:新的状态记录器库(C++ 和 Rust)已移至 SDK,以标准化数字和离散电源状态记录。通过以下方式,系统挂起调试功能得到了显著改进:将唤醒原因(包括 Koid)向上传播到调用堆栈,向
fuchsia.hardware.power.suspend添加唤醒源报告,以及在检查数据中跟踪长时间持有的唤醒租约。API 弃用和移除:
ActivityGovernorListener接口已移除,完成了向SuspendBlocker的迁移。此外,fuchsia.power.systemmodeFIDL 库已正式弃用。- 变更: fxr/1351089、 fxr/1376963
新的温度传感器管理 API 在
power-manager中实现了fuchsia.thermal.SensorManagerAPI,允许客户端发现温度传感器并注入替换温度以进行政策测试。还向热 sysfs 目录添加了对emul_temp的支持。内核和驱动程序电源功能:为运行时处理器电源管理 (RPPM) 添加了配置功能,并将其路由到基本驱动程序。更新了通用闪存 (UFS) 驱动程序,以使用标准挂起/恢复注册,从而移除了旧版唤醒请求行为。
关闭原因传播 在
shutdown-shim的Admin协议中添加了Shutdown方法,使客户端能够指定不同的关闭原因和操作(例如,重新启动与关机)。还部署了针对在关停序列期间过早停止critical-services的修复。Power CLI 和平台配置 引入了新的
powerutilCLI 工具,并将ffx power迁移为使用该工具的实现。为fuchsia.power.cpu.BoostEnabled和 Android 电源提示添加了新的平台配置,同时重构了存储电源管理启用,使其特定于主板。电源管理更新:在检查数据中添加了对长唤醒租用阈值的支持,为时钟/PMIC 和 CPU OPP 定义了 pdev 接口,并改进了挂起阻止程序逻辑。
Rust
针对 Rust 进行了以下更新:
fuchsia-async添加了插桩钩子并优化了内存使用情况。 支持在宏和AtomicFuture上使用可插拔的插桩钩子,从而在停用时实现更好的诊断,而不会产生开销。此外,该库还使用自定义实现替换了基于 crossbeam epoch 的延迟执行,以显著减少内存用量。- 更改: fxr/1332229、 fxr/1360152、 fxr/1343364、 fxr/1347375、 fxr/1368096
- bug:fxb/437254251
旧版
fuchsia-async任务创建方法已被移除或内部化。此变更完成了任务创建和执行 API 向构建器模式的迁移,需要更新仍在使用旧方法的代码。- 变更: fxr/1337310、 fxr/1385162
Rust 构建工作流已更改,移除了
fx rustfmt/fx rustdoc并启用了发布符号。已移除废弃的fx命令,以支持标准工具链工作流。现在,默认情况下,调试符号会保留在发布二进制文件中,以便更好地对发布 build 进行符号化和调试。- 变更: fxr/1355604、 fxr/1359735
软件交付
我们针对软件交付进行了以下更新:
增强了 Android 恢复和旁加载功能。恢复系统现在支持直接从 ADB 旁加载读取清单签名和更新网址、处理相对 blob 基本网址,以及在更新期间正确装载系统 blob。
改进了系统更新安全性和配置。系统更新程序现在使用通过程序集配置的公钥验证 OTA 清单签名,并支持用于无软件包更新的可选签名参数。
- 更改: fxr/1387005、 fxr/1383282、 fxr/1382010
- bug:fxb/441769485
针对软件包解析器的优化和诊断。现在,
pkg-cache中允许为基本软件包固定解析,以减少内存用量。此外,为了减少垃圾信息,成功的解析现在会记录在检查中,而不是系统日志中,并且system-updater检查现在包含正在进行的更新尝试 ID。更新了对 Paver 和 Moonflower 板的支持。添加了对合并“super”和“userdata”分区的支持,在 Moonflower 上铺设任意分区,并修复了严重的 A/B/R GUID 同步 bug。移除了对 Moonflower 的旧版 A/B 支持,并改进了分区表重置的错误处理。
可配置的 Blob 网络超时。现在可以通过配置功能替换
pkg-resolver中的 Blob 网络标头和正文超时,并且增加了恢复中的默认超时时间,以提高可靠性。- 变更:fxr/1376062
更新通知程序现已可供发现。
fuchsia.update/Notifier标记为可发现,以便与可托管的组件搭配使用,从而在退出时方便地转移到组件管理器。- 变更:fxr/1330436
- Bug:fxb/412347960
改进了软件包清单工具。软件包清单现在以美观的 JSON 格式编写,以便更轻松地进行比较,并且向
fuchsia-pkg添加了set_nameAPI,以允许动态更改名称。- 更改: fxr/1347034、 fxr/1372041
支持锚定软件包。已向软件包管理库和程序集工具添加对锚定软件包的初始支持,并使用 BTreeMaps 来确保确定性序列化。
- 更改: fxr/1340704、 fxr/1386582
- bug:fxb/423831237、fxb/418243685
Starnix
针对 Starnix 进行了以下更新:
在 SELinux 强制执行方面取得了显著进展,实现了对 Binder、Netlink 和文件系统权限的检查。这包括强制执行
binder(调用、转移、模拟)、netlink扩展权限 (nlmsg)、ptrace、getcap/setcap的权限,以及各种文件/套接字访问检查(file_receive、socket_accept、getattr)。已实现 SELinux 审核框架,包括对
audit_access伪权限的支持。这样就可以通过dontaudit规则抑制审核日志垃圾信息、对日志中的特殊字符进行十六进制编码,以及通过内核命令行进行配置。改进了 ARM 解栈。添加了对 ARM EHABI、
ARM.extab、ARM.exidx和 sigreturn 解开的支持。实现了对 32 位/64 位过渡帧的处理,以支持 Starnix 配置文件。现在支持
PTRACE_POKEDATA和PTRACE_POKETEXT,允许跟踪器修改被跟踪进程的内存。这样,Linux 调试器(如 LLDB)便可在 Starnix 内运行的程序中设置软件断点。- 变更:fxr/1381185
通过
recvmsg缓冲区选择和其他设置标志,io_uring支持已得到扩展。IORING_OP_RECVMSG现在支持IOSQE_BUFFER_SELECT,并为IORING_SETUP_DEFER_TASKRUN、IORING_SETUP_SINGLE_ISSUER和IORING_REGISTER_RING_FDS添加了桩或实现。为
clone()/clone3()实现了CLONE_PIDFD,并改进了pidfd_open行为。此更改添加了在创建时接收表示子进程的文件描述符的功能,并修复了pidfd_open处理僵尸进程的问题。添加了
ffx starnix kill命令。此工具允许用户从宿主机终止 Starnix 容器内的进程。- 变更:fxr/1338104
已向
timerfd添加对TFD_TIMER_CANCEL_ON_SET的支持。此标志允许监控 UTC 时间轴的间断性变化(例如,通过clock_settime)。- 更改: fxr/1370202、 fxr/1365796
- bug:fxb/445263761
文件描述符表 (
FdTable) 已迁移为使用 Read-Copy-Update (RCU)。这样一来,多个线程可以同时读取文件描述符,而不会发生阻塞,从而提高并发性。- 更改: fxr/1379630、 fxr/1368756
通过直接引用 MemoryManager,改进了
/proc/<pid>/mem的安全性。这样可确保文件描述符在打开时与特定地址空间相关联,从而防止在exec()调用更改任务的内存布局和凭据后发生未经授权的访问。- 变更:fxr/1358411
eBPF 现在支持 LPM(最长前缀匹配)Trie 映射。这会添加
BPF_MAP_TYPE_LPM_TRIE地图类型,该类型通常用于网络任务。- 变更: fxr/1332724、 fxr/1338075
通过
SO_BINDTODEVICE检查和运行时通用 Netlink 支持,扩展了网络功能。此版本添加了套接字设备绑定的功能检查,并允许在运行时添加 Genetlink 系列。KGSL 驱动程序现在支持 32 位应用。此更新可提高 32 位 Android 图形工作负载的兼容性。
- 变更:fxr/1365263
Starnix 支持功能:计时器现在支持
TFD_TIMER_CANCEL_ON_SET来监控 UTC 时间轴变化。通过以下方式增强了调试功能:在 ARM 架构的信号堆栈帧中填充故障地址,以及在调试/平衡 build 中添加用于跟踪信号来源的逻辑。- 更改: fxr/1370202、 fxr/1352824、 fxr/1340607
- bug:fxb/445263761
Starnix VFS 性能和内存用量已得到优化。文件描述符表 (
FdTable) 现在使用 Read-Copy-Update (RCU) 同步进行并发读取,并且挂载元数据字符串现在使用FlyByteString来减少繁重的挂载工作负载的内存开销。
存储
存储空间方面进行了以下更新:
块服务器现在支持驱动程序端解压缩,并由 Blobfs 使用。这样可以避免使用外部解压缩器,从而提高性能,并为将来基于驱动程序的网页请求处理提供可能。
- 更改: fxr/1396073、 fxr/1393354
现在,在内存压力下,Fxfs 脏页清理更加高效。 Fxfs 现在仅选择性地刷新具有脏页的文件,而不是在关键内存压力期间阻塞
ZX_PAGER_VMO_DIRTY请求时检查所有文件的元数据。- 变更:fxr/1395195
Fxfs 现在支持通过新的
VolumeInstaller协议进行原子卷安装。这有助于在文件系统级别安装新的系统映像,并允许以原子方式替换现有卷。- 更改: fxr/1374241、 fxr/1357164、 fxr/1319624
- bug:fxb/441562849
只读 Ext4 文件系统现在会公开扩展属性。用于列出和查询扩展属性的 API 已移至
Directory接口,以支持ext4readonly中的相应实现。添加了对数据卷加密的 Keymint 支持。新的
keymint政策允许 fshost 使用 Keymint 密封数据卷的密钥并将其持久保存到密钥库,从而在可用时实现 TEE 支持的密钥管理。- 变更: fxr/1364589、 fxr/1371544
对 UFS 驱动程序进行了重大改进。这包括实现
fuchsia_hardware_ufs::Ufs协议、添加对向 UFS 设备发送 SCSI 命令的支持,以及通过移除唤醒请求行为来优化电源管理,转而使用标准挂起/恢复钩子。- 更改: fxr/1180252、 fxr/1156913、 fxr/1395374
- bug:fxb/379889262
Fxfs 安全性和加密功能已得到增强。更改包括:在打开时验证 fsverity merkle 树根哈希以防止未经授权的修改;在硬件允许的情况下支持内嵌加密;以及支持
lblk32密钥。Blobfs 已迁移到版本 10,以支持混合 merkle 布局。这引入了 inode 和超级块标志来确定 Merkle 格式,从而有助于在格式之间进行迁移,而无需立即更改磁盘布局。
- 变更:fxr/1358032
提高了 SDMMC 和 RPMB 驱动程序的可靠性。现在,大型 RPMB 写入操作会根据设备支持情况分成多个块,并且如果调谐失败,eMMC 初始化现在会回退到高速或 DDR52 模式,从而防止在有问题的硬件上出现启动失败。
- 更改: fxr/1381081、 fxr/1342746
多个存储驱动程序已迁移到驱动程序框架 v2 (DFv2)。此现代化包括
nand、ram-nand、nandpart和bootpart驱动程序。
测试
针对测试进行了以下更新:
扩展了
fx test标志和开发者功能。添加了--[no-]fail-by-group以切换测试组的重试、--previous failed-tests以生成用于重新运行失败测试的命令,以及test_filters标志。该工具现在会在列出测试时自动启动软件包服务器,支持搜索远程 build 测试,使用--use-existing-debugger有条件地生成调试器,并刷新设备测试的软件包列表。添加了实验性 ResultStore 集成。通过
fx resultstore启用了向 ResultStore 的流式构建结果,添加了 Ninja 封装容器 (rsninja.sh) 和客户端工具 (rsclient),以改进构建数据可视化。将 Antlion 迁移到了
fuchsia.git。将 Antlion 代码库从//third_party/antlion移至//src/testing/end_to_end/antlion,以简化开发者工作流程并提高测试编写速度。更新了 Honeydew (Lacewing) API。将
wlanaffordance 重命名为wlan_core,以将其与政策 API 区分开来;添加了对 PowerBAT 挂起/恢复的 USB 支持;引入了系统接口查询;并为本地主机-目标互动启用了目标名称。重构了测试输出解析基础架构。从常规解析器中移除了网络一致性测试解析,将 Rust 和 Go 测试解析逻辑分离到不同的工具中,并更新了测试运行程序,使其严格要求输出摘要架构中包含
TestResult。为宿主-目标测试实现了 mDNS 解析器。添加了一个设备解析器,该解析器利用
botanist的 mDNS 数据包检查器来跟踪目标,而无需依赖ffx进行解析。- 变更:fxr/1395015
- bug:fxb/448984573
更新了
sockscripter实用程序。添加了log-error命令以读取SO_ERROR套接字选项,并启用了发送缓冲区长度的配置。- 更改: fxr/1336689、 fxr/1336688
扩展了
tefmocheck日志分析功能。添加了以下支持:根据日志行的邻近程度检测失败模式;在附近的检查中跳过测试;检测 ADB 服务器重启。从
fxtest中移除了get-ssh-address。已弃用并移除了get-ssh-address子命令;用户现在必须使用ffx -t target target list --format addresses。- 变更:fxr/1338752
引入了边沿触发的音频捕获支持。
audio_recording组件中实现了一种新的捕获方法,允许客户端对未来的捕获进行排队,并在检测到静音时立即停止录制,从而提高了可靠性和速度,优于固定时长的录制。- 变更:fxr/1364820
计时
针对时间管理功能进行了以下更新:
新增了对基于世界协调时间 (UTC) 的唤醒闹钟的支持。时间管理子系统和唤醒闹钟管理器现在支持在 UTC 时间线上安排闹钟,从而为 Starnix 启用实时时钟功能。此更改引入了
SetAndWaitUtc,这是一种使用挂起获取模式的 FIDL 方法,可满足容器电源管理要求。强化了闹钟调度和时长逻辑。修复了闹钟管理中的多个极端情况,以确保可靠性:零 tick 唤醒闹钟现在填充为 1 tick,以保证协议执行;负持续时间默认设置为最小时间单位;重新安排逻辑现在可以正确取消过时的计时器;并修正了
TimerNode比较逻辑。防止了在截止日期附近出现错误的 UTC 更新。系统现在会根据 build 截止时间验证 UTC 更新,拒绝截止时间前一小时内的任何值,以防止因实时时钟 (RTC) 硬件故障而导致系统时间无效。
- 变更:fxr/1338915
在 Zircon 时钟转换中强制执行非零速率。
transform_clock函数和ClockTransformation方法现在会在提供零速率时进行断言和 panic,确保立即捕获无效的时钟速率配置。- 变更:fxr/1348207
已命名的 UTC 时钟句柄。现在,UTC 时钟句柄被分配了名称
utc-clock(和utc-clock-vendor),以帮助进行句柄来源跟踪和调试。- 更改: fxr/1404633、 fxr/1404634
工具
我们针对工具进行了以下更新:
ffx
针对 ffx 进行了以下更新:
ffx trace已重新设计,以移除跟踪守护程序协议。 该工具现在直接连接到目标(通过SessionManagerProxy或ProvisionerProxy),而不是通过守护程序进行路由。此外,还添加了对启动时跟踪配置和解码 FIDL 消息正文的支持。- 变更: fxr/1349444、 fxr/1371950、 fxr/1277749
- bug:fxb/433532694
引入了新的
ffx target discover命令和缓存机制。这会填充发现缓存,以避免在每次调用命令时进行完整的网络扫描,从而使ffx在缓存有效时几乎可以立即解析目标。- 变更: fxr/1361055、 fxr/1370045
已在
ffx中实现主机端 USB 驱动程序支持。新的usb_driver命令和关联的守护程序逻辑现在可以处理主机端 USB 连接,从而改进长时间运行的连接的进程隔离。- 更改: fxr/1314432、 fxr/1356550
已从
ffx和 Zircon build 规则中移除对 macOS 的支持。 MacOS 不再是这些工具支持的主机平台。- 变更: fxr/1394797、 fxr/1394804
添加了新的
ffx target log-message命令。用户现在可以向设备的日志写入任意消息,这对于在手动测试期间标记事件非常有用。- 变更:fxr/1402455
ffx driver现在支持生成包含主机/驱动程序分组的图表。ffx driver node graph现在可以按驱动程序主机和组件对节点进行分组,还可以选择性地显示服务路由。- 变更:fxr/1316849
ffx target get-ssh-address已被弃用。用户应迁移到ffx target list --format addresses。- 变更:fxr/1346647
增强了“遥控器”服务。该服务现在通过端口 9797 提供
authorized_keys,并支持通过 VSOCK 提供 FDomain。- 变更: fxr/1361061、 fxr/1356548
fx
针对 fx 进行了以下更新:
fx build现在支持直接构建 Bazel 目标。一种新的实验模式允许使用--config=NAME为主机目标调用 Bazel,与现有的 GN build 并行运行。- 变更:fxr/1344685
- bug:fxb/42084668
zxdb修复了 unwinder 回调中的释放后使用崩溃问题。这解决了在并发stackTrace请求期间导致 DAP 服务器中出现间歇性 SIGSEGV 崩溃的竞态条件。- 变更:fxr/1400033
- bug:fxb/452699553
zxdb
针对 zxdb 进行了以下更新:
zxdb现在支持递归作业专用过滤条件。这使调试器能够附加到组件 realm(例如测试 realm)中的所有进程,从而在发生超时或失败时检索所有组件的回溯。对
zxdb符号加载应用了显著的内存优化。 调试器现在会在索引编制后清除 LLVM DWARF 库缓存,从而将大型调试符号的常驻内存使用量减少约 50%。- 变更:fxr/1336465
改进了
zxdb和 DAP 中的堆栈轨迹显示。调试器现在会省略不太相关的堆栈帧(例如 Rust 测试断言和异步执行器内部),以便专注于用户代码,并向 VS Code 等 DAP 客户端正确报告帧计数。
跟踪记录
针对跟踪功能进行了以下更新:
架构更新:直接设备连接和守护程序移除。
ffx trace现在通过TraceManager或SessionManager直接连接到目标设备,绕过 ffx 守护程序。此架构变更实现了“真正空闲”的跟踪,从而允许会话在不保持有效主机连接的情况下持续存在。添加了启动时跟踪功能。新命令支持将轨迹配置写入设备,从而允许
trace_session_manager在组件启动时自动启动轨迹记录。数据通过ffx trace stop命令检索。- 变更:fxr/1371950
扩展了内核 IPC 跟踪和 FIDL 解码。内核现在会在
kernel:ipc类别下记录初始渠道消息数据(字节和句柄)。此外,ffx trace已更新,可对这些 FIDL 消息正文进行解码以进行更深入的检查。- 更改: fxr/1277749、fxr/1277748
- bug:fxb/433532694
为转化跟踪工具添加了事件过滤功能。
trace2json工具和库现在支持通过--pattern进行基于正则表达式的事件过滤。此更新可确保即使过滤掉特定事件,线程和内核对象元数据也能保持完整。为分析器专用记录类型添加了 FXT 支持。Fuchsia 轨迹格式 (FXT) 读取器和序列化器现在支持
Module、Mmap和Backtrace记录,从而可以高效存储分析器数据。改进了
ffx trace易用性和输入验证。增强功能包括下载进度指示器、自动从实参中去除弯引号,以及防止--background和--output之间发生冲突。该工具现在还会在跟踪记录数据中缺少所请求的类别时发出警告。使内核锁争用跟踪功能可供所有用户使用。
kernel:contention类别现已在所有配置中提供,不再受 build 标志限制,因此只要启用跟踪,即可访问锁争用数据。- 变更:fxr/1400526
提升了跟踪性能和指标收集。
TraceFs现在使用直接内存映射来写入事件,从而减少复制开销。新指标包括 GPU 利用率,并且 Starnix 线程 ID 现在已正确映射到 Fuchsia koid,以便在 Perfetto 中实现更好的可视化效果。
界面
界面方面进行了以下更新:
- 引入了
display::CoordinatorProxy以优化显示配置。这个新的代理层通过缓存结果和过滤冗余状态更新,最大限度地减少了对显示协调器的 FIDL 调用,从而减少了 Flatland 和 Scenic 中的开销并提高了性能。 - 在 Flatland 中实现了
BlendMode::STRAIGHT_ALPHA。此添加项可在 Flatland 渲染引擎中为非预乘像素格式实现正确的颜色合成。- 更改: fxr/1318144、 fxr/1348645
- 引入了
TrustedFlatlandFactory协议。此新接口允许授权客户端绕过标准 Scenic 开销,为特定的可信用例提供优化的性能路径。
视频
视频功能进行了以下更新:
运行时页面大小确定。媒体和相机驱动程序现在会在运行时查询内存页大小,而不是依赖于
ZX_PAGE_SIZE编译时常量,从而根据 RFC 0016 提高了不同系统配置之间的兼容性。- 更改: fxr/1394135、 fxr/1395554
迁移到 C++ MMIO SDK。媒体和相机驱动程序现在使用
//sdk/lib/driver/mmio/cpp进行内存映射 I/O,从而实现代码库现代化并替换旧版实现。- 更改: fxr/1371131、 fxr/1371024
- bug:fxb/441711303
所有视频解码器内部缓冲区现在都通过 sysmem 分配。这有助于缓解物理内存碎片化问题,并降低了
zx_vmo_create_contiguous找不到足够长的物理内存运行时的概率。
WLAN 和连接
针对 WLAN 和连接进行了以下更新:
SAR 和传输功率控制 API 的实现。在 WLAN 堆栈中添加了对特定吸收率 (SAR) 和传输功率场景的支持,以确保符合监管要求并安全运行。这包括
WlanPhyImpl和DeviceMonitor上的新 FIDL API、wlanix中用于动态控制WifiChip功率等级的实现,以及关联的遥测日志记录。增强型安全协议支持 (WPA3/SAE 和 WEP)。扩展了安全功能,可同时支持现代标准和旧版标准。添加了相关功能,以支持 SAE 密码设置和 RSNXE 解析,从而实现 WPA3 Hash-to-Element 身份验证。此外,
wlanix现在支持保存 WEP 凭据和设置 WEP 密钥索引。WLAN 恢复和可靠性改进。提升了系统稳定性和自我修复能力。系统现在会在典型操作失败时重新启用 PHY 重置恢复,并通过接口名称为请求方提供服务,以允许进程重启。此外,芯片现在会在启动失败时明确断电,并且会针对非 DFS 设备停用主动 5GHz 扫描,以提高连接稳定性。
漫游逻辑和指标增强功能。优化了漫游行为和可观测性。漫游逻辑现在会惩罚具有极高 RSSI(>-30 dBm)的 BSS,以防止无线电饱和。修复了漫游成功率指标方面的问题以及缺少失败漫游日志的问题,以提供准确的性能数据。
API 和协议更新。引入了新的 API 并更新了协议定义,以更好地符合标准并进行控制。添加了
GetSignalReportAPI,并将ieee80211::StatusCode更新为灵活类型,以支持 802.11-2020。此外,SetScanMode和SetBtCoexistenceModeAPI 已通过堆栈连接。固件、遥测和维护更新。一系列硬件支持和内部改进。Broadcom SYN4381 固件已升级到 1195.1225,并添加了对“00”(全球)国家/地区代码的支持。内部变更包括:根据 RFC 0016 移除了
ZX_PAGE_SIZE的运行时使用情况;修复了 PHY 重置期间的溢出错误;以及添加了电池充电状态和时序信号报告的遥测。网络政策死锁解决。解决了网络管理中的竞态条件和死锁问题。
DefaultNetwork依赖项的方向性已反转,使netcfg和socket-proxy之间的连接成为单向连接,以确保可靠的状态转换。- 变更:fxr/1339884
重构了 Windowed Stats 特征。我们重构了
TimeMatrix和Statistic特征(将Interpolator重命名为TimeMatrixTick,将MatrixSampler重命名为TimeMatrixFold),以简化类型边界、提高语义清晰度,并支持新的插值类型(例如NoSample)。