日期:2024 年 4 月 26 日
版本:F19
我们已实施以下更改:
音频
我们对音频进行了以下更新:
改进了音频模块化:Soundplayer 组件现在位于自己的 AIB 中,从
audio_core
中移除了未使用的存储空间,并修复了导致ValueErrors
的缺失audio_core
向量。针对音频重构并改进了
ffxdaemon
:这包括将渲染程序和捕获器逻辑进行模块化处理、重构RingBuffer
以支持多协议、重命名和阐明与 WAV 套接字相关的内部组件、改进依赖项管理,以及重构AudioDaemon
结构体。
蓝牙
添加了新的蓝牙工具和 Pandora gRPC 服务器框架:添加了
ffx bluetooth
子工具并实现了 Pandora gRPC 服务器框架。增强型蓝牙低功耗功能:添加了基于功劳的流控制 TxEngine,以改进 LE 流控制,实现了支持扩展通告和连接功能的
ExtendedLowEnergyConnector
和ExtendedLowEnergyScanner
,并向供应商协议添加了通告数据包过滤常量。此外,还修复了与扫描响应超时相关的LowEnergyScanner
崩溃问题和LowEnergyMultipleAdvertisingTest
中的问题。改进了对等时数据流的支持:添加了
IsochronousStream::Read
和IsochronousStream::ReadSupportedDelayRange
API,在 Banjo 和 FIDL 控制器中实现了对 ISO 数据流的支持,并在驱动程序中添加了 ISO 通道 FIDL 协议支持。此外,还修复了与缺少或失败 ISO 渠道支持相关的模拟器崩溃和控制器关闭问题。- 变更: fxr/1005272、 fxr/997312、 fxr/998736、 fxr/1002652、 fxr/1003012
- bug: b/328457492、 b/328459391
增强的 HFP 和 SCO:实现了 HFP 核心分片并添加了音频连接和调用启动的流程,并为
FidlController
实现了 SCO FIDL API。此外,还将 HFP 中的 +CIEV 转换为类型化值。扩展了对蓝牙 LE 的支持和连接处理:通过添加
Read
、SetupDataPath
和ReadSupportedDelayRange
方法,改进了蓝牙 LE 等时流支持。此外,还添加了Connection::AcceptCis()
以接受无连接等时串流。改进了 OBEX 和 RFCOMM:添加了对广告和搜索 MAP 服务的支持。修复了协议列表构建、PSM 解析、PSM 值不正确以及重复标头和 OBEX 服务缺少
ConnectionIds
的问题。此外,还添加了对在 OBEX 中分配ConnectionId
的支持。 改进了 RFCOMM 日志记录。将 bt-host 从驱动程序迁移到组件:包括将
serialimpl
协议迁移到 FIDL,以及将LoopbackDevice
驱动程序迁移到 FIDL。此外,还修复了 DFv2 迁移期间的驱动程序名称问题,以及bt-init
中的存储空间优惠问题。
构建
Build 进行了以下更新:
- 提高了 Bazel build 的密封性:更新了 BoringSSL build,以便在滚动期间生成 Bazel 规则,并改进了 Bazel SDK 和 Clang 工作区初始化。
钴蓝
我们对 Cobalt 进行了以下更新:
移除了配置文件提供程序路由。这是由于 Cobalt 迁移到了 Role Manager 所致。
- 变更:fxr/1010304
更新为在 Cobalt 的 FIDL 接口中将指标作为 SDK 区域包含在内。
- 变更:fxr/999785
组件框架
我们对组件框架进行了以下更新:
增强型组件生命周期管理:
- 引入了
fuchsia.component.Escrow
API 以在关闭期间管理组件状态,并将其集成到组件启动/停止操作中。- 变更: fxr/991412、 fxr/1000121、
- bug:fxb/319754472
- 引入了
改进了 capability 处理:
- 添加了
delivery: "on_readable"
,以便实现协议功能。- 变更: fxr/1011079
- bug:fxb/319754472
- 添加了
增强型 CML 和路由:
- 针对周期检测、关闭顺序和路由稳健性改进了对字典的处理。
改进了工具:
- 为
ffx component show
启用了架构支持。- 变更: fxr/1005672
- 为
移除了配置值文件 (CVF) 要求:
- 变更:fxr/1000095
开发者
我们对“开发者”进行了以下更新:
扩大了对
roll-compiler
的支持:添加了aarch64
Mac 支持。- 变更:fxr/1004719
改进了 ProfileResource 路由:此资源现在会路由到串行控制台。
- 变更:fxr/1001364
诊断
“诊断”部分进行了以下重要更新:
增强版 Archivist:Archivist 自身的最低日志严重级别现在可以动态调整,让您可以更灵活地控制其日志输出。为保持一致,JSON 日志编码的“verbosity”字段已重命名为“raw_severity”。每个组件的 Archivist 批处理超时现在可配置。改进了归档工具的性能。
- 变更:fxr/989275
通过 zxdb 改进了调试功能:通过递归组件过滤器(允许附加到被过滤组件的所有子项)和新的通知信号过滤器应用增强了调试程序功能。现已收集调试程序命令分析数据。
改进了跟踪功能:轨迹导入器对损坏的轨迹更加稳健。
- 变更:fxr/1001403
- bug:fxb/328124336
改进了 Rust Inspect API:改进了 Inspect Rust API,以支持属性中的原子更新。
改进了
ffx inspect
:ffx inspect 和 iquery 不再支持直接读取文件。改进了 ffx 日志:添加了新的异步事务日志读取器和解析器,以提升
ffx log
的性能。为符号化程序写入添加了缓冲区,以防止死锁。ffx log
现在支持日志回溯美化,并且可以停用以提升性能。通过删除标记中的重复标识符并妥善处理符号化错误,ffx log
输出也得到了改进。
显示
我们对显示屏进行了以下关键更新:
- 显示驱动程序堆栈正在迁移到现代 Fuchsia 平台基础架构,如 DFv2 和 FIDL。
驱动程序框架
我们对驱动程序框架进行了以下更新:
增强了驱动程序上下文和启动功能:更新了
DriverStartArgs
,以添加node_properties
。- 变更:fxr/986452
- bug:b/42182546
改进了
devfs
与控制器的互动:DevfsAddArgs
现在允许替换兼容性 shim 的控制器接口,并且 devnode 现在为fuchsia.device/Controller
和设备通道使用单独的回调,这有助于提高清晰度并防止意外多路复用。- 变更: fxr/1005017、 fxr/1005016、 fxr/994994、 fxr/994995、 fxr/994993、 fxr/999192
- bug:fxb/42063787
改进了稳定性和资源管理:节点取消分配现在会取消重新绑定请求。修复了
aml-sdmmc
和vim3-usb-phy
的共置标志。
FIDL
我们对 FIDL 进行了以下更新:
增强了 FIDL 工具:添加了一款新工具,用于评估各 API 级别的运行时兼容性,然后生成详细报告,以帮助在各个 Fuchsia 版本中保持稳定性。
- 变更:fxr/907296
改进了 FIDL API 版本控制:向 FIDL JSON IR 添加了
deprecated
、platform
和legacy
字段,并添加了fidlc --platform
标志,以增强 API 版本控制和废弃管理。移除了@transitional
注解,改为使用显式版本控制。改进了错误处理:所有 FIDL 错误现在都将广播,并且都是终端错误。
- 变更:fxr/1011592
GPU
GPU 进行了以下更新:
- 增强型电源管理:添加了对在暂停时关闭着色器核心,然后在恢复时开启着色器核心的支持。此外,还允许抢占原子,以缩短挂起延迟时间。添加了适用于 GPU 功耗管理的 FIDL 协议。
i18n
我们对 I18n 进行了以下更新:
- 修复了更改检测器测试,以测试日期本地化的稳定性:解决了 ICU 库中的日期格式更改导致测试失败的问题。受影响的测试已更新,以提高稳健性。
- 变更:fxr/1014633
内核
已对内核进行以下更新:
电源和任务调度
- 添加了用于在运行时处理器电源管理 (RPPM) 的服务中注册 CPU 能耗模型的临时系统调用。
- 变更:fxr/994713
- 添加了对唤醒矢量的临时支持,允许系统通过设备中断从暂停状态唤醒。
- 变更: fxr/994109
- 开始构建用于封装调度器运行队列的 libsched 库。
- 变更: fxr/1006654
- 修复了 PI 传播中的簿记错误。
- 变更: fxr/994748
- 添加了用于在运行时处理器电源管理 (RPPM) 的服务中注册 CPU 能耗模型的临时系统调用。
虚拟内存
- 重构了页面故障处理,为将来的“预错”优化奠定了基础。
- 针对 arm64 上的大型页面拆分实现了 break-before-make,以提高某些极端情况下的正确性。
- 变更: fxr/994412
- 添加了对“无限 VMOs”的支持(请参阅 RFC-0238)。
- 变更:fxr/1004252
- 添加了对“升级”映射的支持。
性能剖析
- 添加了对使用 zx*sampler* 系统调用的新型抽样性能分析器的实验性支持。
IPC 和时钟
- 修复了与使用错误缓冲区读取套接字数据报相关的 bug。
- 变更: fxr/994605
- 添加了新的时钟对象信号
ZX_CLOCK_UPDATED
,用于在底层时钟参数发生更改时通知观察器。此信号可用于为在 Starnix 下运行的 Linux 程序实现更高效、更准确的“获取时间”调用。- 变更:fxr/920132
- bug:fxb/297305722
- 修复了与使用错误缓冲区读取套接字数据报相关的 bug。
安全性
- 添加了对每个 CPU 的 arm64 异常矢量的支持,以便更精确地减少推测性执行。
- 变更: fxr/993134、 fxr/995833
- bug:fxb/322202704
- 添加了对每个 CPU 的 arm64 异常矢量的支持,以便更精确地减少推测性执行。
其他值得注意的改进
- 重构了用户复制和故障处理例程,以便在保持自旋锁的同时启用有限故障。这使我们能够用自旋锁替换 FutexState 互斥量、简化 FutexContext,并为移除全局线程锁做好准备。
- 重构了 arm64 低级别缓存维护例程。
平台驱动程序
平台驱动程序进行了以下更新:
增强型电源管理:添加了一个新的支持库,可简化驱动程序与电源框架的集成。“Power Mode”(电源模式)电源元素依赖于 SAG,用于在 Starnix 内核初始化期间管理开机租约。此外,为提高并发性和可靠性,Power Broker FIDL API 也进行了改进。
- 变更:fxr/987383、fxr/970380、fxr/1002672
- bug: b/42083491
提高了驱动程序稳定性:修复了 SDMMC 驱动程序的
PrepareStop
崩溃问题。UMS 现在支持 SCSI UNMAP 命令。更新了 Goldfish 管道驱动程序,以妥善处理ZX_ERR_PEER_CLOSED
。解决了 SPI 核心驱动程序在调度程序角色和异步调用方面存在的问题。
电源管理
针对电源管理进行了以下更新:
- 增强型电源管理:添加了新的支持库,可简化驱动程序与电源框架的集成。“Power Mode”(电源模式)电源元素依赖于 SAG,用于在 Starnix 内核初始化期间管理开机租约。此外,为提高并发性和可靠性,Power Broker FIDL API 也进行了改进。
- 变更:fxr/987383、fxr/970380、fxr/1002672
- bug: b/42083491
软件交付
已对 Software Delivery 进行以下更新:
重构了用于写入系统映像的系统更新程序:通过正确的
fuchsia.mem.Buffer
大小处理,提高了写入系统映像的可读性和可维护性。改进了软件包管理:添加了对通过产品 bundle 和可变 API 级别(例如
api-level=HEAD
)发布ffx repository publish
的支持。更新了软件包类型,使其与 paver 命名惯例保持一致。此外,从package-tool
中移除了冗余的--abi-revision
标志。- 变更: fxr/1003995、 fxr/998738、 fxr/1011161、 fxr/997492
- bug:fxb/326095523
增强了
pkg-cache
:解决了动态索引垃圾回收方面的问题,更新了提高安全性所需的Get
服务器端,并引入了WritingIndex
以在缓存期间保护软件包。改进了 paver:修复了用于 ZBI 内容截断的
PartitionRead
API。- 变更:fxr/1006940
Starnix
Starnix 进行了以下更新:
安全性和稳定性:
实现了 eBPF 验证器并扩大了对 eBPF 程序的支持:增强了 eBPF 程序的安全性和稳定性,包括处理数组指针、字段映射以及改进程序加载。此外,修复了 eBPF 映射中的整数溢出问题。
改进了针对 SELinux 安全性的上下文处理方式:修复了与安全上下文相关的多个问题,包括删减尾随 null 字符以及恢复对安全 ID 的
Copy
支持。改进了钩子测试政策和参考政策初始 SID 声明。
功能和系统调用:
增强了文件系统和 I/O 操作:在 VFS 中实现了
openat2()
系统调用和io_submit
,包括对IOCB_FLAG_RESFD
的支持,并改进了文件系统访问和异步 I/O。改进了信号处理:实现了
rt_sigpending()
函数以及SA_RESETHAND
和SA_NODEFER
信号标志,从而提高了信号管理灵活性。此外,修复了rt_sigtimedwait01
测试中的不稳定问题。实现了
getcpu()
函数:此函数提供了一种检索 CPU 信息的方法。- 变更:fxr/997713
- bug:b/297305396
设备和驱动程序:
改进了对触摸屏的支持:针对 Uinput Touch 设备实现了
write()
,针对UI_DEV_CREATE
实现了ioctl()
,可处理 EV_ABS 事件。添加了骨架 GPU 设备:为日后实现
virtio-gpu
和gfxstream
奠定了基础。添加了gfxstream
功能标志。- 变更: fxr/1010753。
ADB 和调试:
改进了 ADB 的功能:改进了错误处理功能,并支持大文件传输。增强了 ADB
FunctionFS
与fuchsia.hardware.usb
的连接。向
starnix
工具添加了vmo
子命令:此工具允许查询包含由特定 VMO koid 支持的打开文件的进程。- 变更: fxr/1011913。
其他改进:
改进了对时间和重新启动的处理:改进了重新启动系统调用的处理和 UTC 时间信号的处理。
- 变更:fxr/1014594、fxr/1011873
- bug:fxb/297305722
定义了
SyncFenceRegistry
:替换了 Linux 同步栅栏的 VMO 支持实现。- 变更:fxr/953721
测试
测试进行了以下更新:
改进了
fx test
:添加了对环境变量 (-e
、--env
)、慢速测试过滤 (--slow
)、日志输出 (--print-logs
)、启动测试检测、更新后的 build 格式以及与测试过滤、参数解析和临时文件处理相关的众多 bug 修复的支持。改进了
gtest
:处理标准输出中的额外换行符,并添加了对ASSERT_DEATH
的支持。- 变更:fxr/1000092、fxr/1009294
- bug: fxb/42178254
线程
我们对 Thread 进行了以下更新:
添加了对 DHCPv6 PD 功能标志的支持
- 变更:fxr/997735
添加了上游 DNS 功能标志 API:
- 变更:fxr/1016174
计时
我们对时间记录功能进行了以下更新:
- 与电源管理集成:Timekeeper 现在加入了电源管理子系统,响应电源管理信号并向电源代理注册。此外,改进了电源管理不可用时的错误日志记录。
- 改进了
fake-clock
库:fake-clock
库现在会阻止同时使用单调时钟和 UTC 时钟。- 变更:fxr/999777
- 清理了依赖项和 build:移除了
realm-proxy
和timekeeper_integration
之间的依赖项,以及group
块中的不必要的公开诗节和deps
行。这有助于改善 build 卫生状况并减少不必要的依赖项。 - 添加了初始更新暂停的回归测试:添加了回归测试来解决初始更新暂停的问题。
- 变更:fxr/989392
工具链
工具链进行了以下更新:
- 改进了
llvm-profdata
与 v10 配置文件格式的兼容性。- 变更:fxr/999612
- bug:fxb/327273958
工具
我们对“工具”进行了以下更新:
ffx
改进了目标管理:重构了本地目标发现功能,以实现更好的子字符串匹配和改进的默认处理。向
target add
和target remove
命令添加了架构支持。增强了易用性和性能:改进了对用户错误的错误处理和 build 性能。通过忽略等待时间的套接字,允许立即重启前台代码库服务器。
扩展了功能:添加了一个具有 Pandora 功能的隐藏蓝牙子工具、用于交互式 FIDL 互动的
ffx playground
、用于分发前台代码库 (--product-bundle
) 的产品软件包支持,并改进了ffx driver
工作流。移除了以下插件:移除了
inspect
、setui
、assembly
、wlan
和fuzz
插件。改进了 SSH 密钥管理:将
sshconfig
文件生成移到了tools/devshell
,并添加了ffx config check-ssh-keys
子命令。
fx
改进了 build 和软件包管理:
fx build
现在支持 GN 标签。fx show-package
现在会显示子软件包。改进了fx sdk-deps
中的依赖项分类。- 变更:fxr/997433、fxr/1007587
- bug:fxb/42084668
增强的服务器和测试:
fx serve
现在可处理不兼容的服务器配置。fx size-check
现在支持 Bazel build。添加了商品套装工作流。统一的 SSH 密钥管理:
fx
现在通过ffx
管理 SSH 密钥。- 变更:fxr/1001367
其他工具
改进了测试和工具:
mock-paver
现在会模拟正常行为。为roll-compiler
和rust_extract
工具添加了run_lacewing_test
封装容器、适用于测试组件的主机脚本、aarch64 Mac 支持。删除了未使用的bt-hci-tool
。- 变更: fxr/1012072、 fxr/1007964、 fxr/1005923、 fxr/1004719、 fxr/999379、 fxr/1013620
- bug: fxb/327640651
增强了调试功能,使用递归过滤器加快了
zxdb
的启动速度,并改进了fx test
中的光标可见性。改进了
fxfs
配置文件管理:添加了用于删除配置文件的fxfs delete_profile
子命令和调试端点。- 变更: fxr/1009293、 fxr/1009292
界面
界面进行了以下更新:
增强了界面测试和调试功能:Starnix 触控测试现在使用 GraphicalPresenter,以适应运行时更改。添加了
WatchViewPresentations
以改善界面测试同步,通过向puppet_factory
添加了日志记录改进了界面测试调试,启用了输入 CTF 测试,添加了按应用呈现的跟踪,移动了界面一致性测试,并添加了多点触控事件顺序测试。改进了屏幕截图测试和显示屏功耗管理:添加了针对 PNG 编码屏幕截图的集成测试,
fuchsia.ui.display.internal.DisplayPower
协议现在会路由到会话。在
starnix_kernel
中实现了SyncFenceRegistry
:定义并实现了SyncFenceRegistry
。- 变更:fxr/953721
视频
我们对视频广告系列进行了以下更新:
- 将 CodecImpl 迁移到了向后兼容的 sysmem2:此更改支持现有 sysmem(1) 客户端,同时允许逐步迁移。
- 变更:fxr/964472
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,移除了无用代码,并改进了测试。