Fuchsia F22 版本说明

日期:2024 年 11 月 14 日

版本:F22

已实现以下更改:

音频

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

  • 音频驱动程序和驱动程序 API

    • 更新了要验证的音频驱动程序 VMO 句柄权限。audio_driver_tests 套件现在会验证从音频驱动程序返回的 VMO 句柄是否具有所需的权限。
    • 更新了 aml-g12-composite driver,以使用 SetActiveChannels 特定于领域的 API 通过 StartSocPower/StopSocPower 开启或关闭 SoC 电源。
    • 停用了 SimpleAudioStream 辅助库中的默认调度程序。
    • 删除了 aml-g12-[pdm|tdm]-dsp 驱动程序。
    • 更新了 VirtualAudio 驱动程序,以应用正确的 VMO 句柄权限并修复了 WatchTopology 行为。
  • AudioCore 服务和智能显示屏支持

    • CapturerShimImpl dtor 更新为虚拟,从而修复了 new-delete-type-mismatch 问题。
  • AudioDeviceRegistry 服务

    • Control::Reset 实现为异步方法。
    • 阐明了在哪些情况下会调用或不会调用客户端提供的回调或 ControlNotify 通知。
  • 音频开发者工具

    • ffx audio device 方面向 ffx audio 添加了额外的 ADR 支持。
    • 更新了 ffx audio device info,以显示信号处理元素、拓扑和状态。
    • 更新了 ffx audio 中的 RegistryDevice 类型,以公开信号处理元素、元素状态和拓扑。
    • VmoBuffer 移至常规 Rust 音频库。

蓝牙

蓝牙进行了以下更新:

构建

Build 进行了以下更新:

  • 更新了合作伙伴不稳定 SDK:添加了 spiimpl 库,以提供扩展的 SPI 功能。
  • 改进了 GN build 系统:新模板 generated_ifs_file 支持动态创建 .ifs 文件。由于 OTA 测试问题,已还原 netsvc 组件包含。
  • 增强了 fx 命令:Google Analytics 现在使用 $EPOCHREALTIME 来实现更精确的时间安排。--rbe 标志已被移除。
  • 改进了构建系统清理:移除了 sdk_host_tool() 中的过时导入。修复了 Clippy lint 问题。缓冲区读取器可提升 serde_json 性能。新的 DFv2 驱动程序库 pdev 可减少依赖项。

钴蓝

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

  • 修复了 clang-tidy 警告并移除了 fuchsia.cobalt/SystemDataUpdater 协议:此更新修复了 clang-tidy 警告,并更新了 #include 样式以与 Fuchsia 样式指南保持一致。由于 Clang 很难找到 Cobalt 的一些第三方依赖项,因此大部分文件都必须被忽略。我们还移除了在 F18 中废弃的 fuchsia.cobalt/SystemDataUpdater 协议。
  • 移除了 fuchsia.cobalt/SystemDataUpdater protocol:此协议已废弃且未使用。

组件框架

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

  • 提高了进程启动器服务器端错误日志记录的清晰度。此更改重构了错误日志记录代码,使其可测试,并改进了作业退出代码说明。
  • 通过优先处理会话电源监听器来改进电源监听器的管理:现在,在初始化电源监听器时,系统会先尝试使用会话电源监听器,如果不可用,则使用系统电源监听器。
  • 为真实副本 VMO 实现了组件管理器更改:此更改使用 zx_vmo_transfer_data 从 Bootfs 执行 VMO 复制和取消提交操作到条目的真实副本 VMO。

连接驱动程序

Connectivity Drivers 进行了以下更新:

  • 改进了 dwc3 驱动程序,添加了设备树绑定和其他修复
    • 将 dwc3 设为复合设备,允许使用其他硬件版本,仅在设置 DCI 接口后启动外围设备模式,并在 ConfigEp 上启用端点。
  • 改进了 dwmac 驱动程序的性能和稳定性
    • 在配置 rx 描述符和通知设备之间添加了内存屏障,以解决潜在的竞争条件。
    • 修复了导致 vim3 上发生失败的竞争条件,在这种情况下,驱动程序不会将在线状态传播到旧版以太网驱动程序。修复方法涉及在子驱动程序绑定后立即通知子驱动程序。
  • 通过记录所有固件恢复尝试以计算固件恢复成功率,改进了 brcmfmac 驱动程序。

诊断

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

  • 改进了归档工具
  • 改进了日志记录功能
    • 始终在 Rust 中记录文件和行信息。
  • 改进了诊断数据的持久性
    • 持久性现在与 system-update-checker 集成,比之前的 120 秒延迟更早开始发布。
  • 改进了“检查”功能
    • 在 Inspect Rust 库中添加了对托管的支持:这样可以更轻松地收集和分析 Inspect 数据。
    • 更新了所有检查数据,使响应中包含组件网址:这有助于更轻松地识别数据的来源,从而提高检查数据的易用性。
    • 为 Data<Inspect> 添加了构建器:这样可以更轻松地改进 Data<Inspect> 结构。
    • 创建了 Python Inspect 解析库:这样,您就可以更轻松地在 Python 中解析和分析 Inspect 数据。
  • 功耗可观测性
    • 在“检查历史记录”中的租赁状态检查更新中添加了等级数据:这有助于提高租赁状态更改的可见度,并更轻松地诊断问题。
    • 优化了 VMO 尺寸说明,使其更易于理解。这样,您就可以更轻松地了解 Inspect VMO 的大小。
    • 提高了电源代理的 Inspect VMO。这通过减少需要调整 VMO 的次数来提高功耗代理的性能,并允许我们容纳更多信息。

驱动程序框架

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

  • 改进了驱动程序元数据管理。这包括将 GetMetadataIfExists() 函数添加到 fdf_metadata 库中。
  • 改进了驱动程序运行时性能和稳定性。这包括更新 RAII 语义的调度程序标头、从驱动程序主机运行器回调中移除返回值,以及禁止在关闭期间加入延迟任务队列。
  • 改进了驱动程序测试基础架构。这包括重构驱动程序测试实例并为合作伙伴 SDK 准备 driver_test.h
  • 在驱动程序开发中添加了对 Rust 的初步支持。这包括为竞技场和调度程序添加安全 Rust 绑定的实现,以及添加了递增 fdf_arena_t 引用计数以在 Rust 中启用 Clone 的功能。
  • 改进了驱动程序文档。这包括添加了新的 DFv2 驱动程序文档:“排查 DFv2 驱动程序开发中的常见问题”。
  • 修复了各种 bug。其中包括修复了与元数据处理、驱动程序加载、驱动程序测试和驱动程序运行时相关的 bug。

FIDL

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

GPU

GPU 进行了以下更新:

本地化

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

  • 更新了 I18n 基础架构以支持 Fuchsia 的新日期/时间 API:此更改会更新 I18n 基础架构以使用新的 Fuchsia 日期/时间 API,从而简化日期和时间的格式设置和解析过程。这项更改还提高了 I18n 基础架构的整体性能和可靠性。

IOT

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

  • 通过阻止 ot-radio 在 RCP 重置期间发送帧并增强 SPI TX 逻辑,提高了线程堆栈稳定性和恢复能力:这通过确保 lowpan 等待 RCP 就绪来避免不必要的重置,并改进了在发送 spinel 帧失败时的恢复能力。
  • 修复了 lowpan-monitor 中的崩溃问题并改进了诊断功能:监视器现在会在线程堆栈启动失败时生成崩溃报告,在缺少线程堆栈的设备上提供数据。
  • 修复了 lowpan 中的 meshcop 发布逻辑。
  • 在 openthread 中,记录了被忽略的 ICMP6 消息的来源地址(如果来源不是链接本地)。这改进了 ICMP6 问题的调试功能。
  • 向合作伙伴不稳定 SDK 中添加了 spiimpl:此更改主要供内部使用,对普通用户的影响较小。
  • 修复了 nat64 转换器:修复了在设置 CIDR 时未正确设置 nat64 转换器状态的 bug。
  • 改进了 Matter/GHP:修复了与 Matter 和 GHP 相关的 bug,并提升了稳定性。

内核

内核进行了以下更新:

  • 添加了对 ZX_CLOCK_BOOT 时间轴的支持,包括用户模式时钟和系统调用 (zx_ticks_get_bootzx_clock_get_boot)。
  • 引入了用于检索 VMAR 映射信息的 ZX_INFO_VMAR_MAPS,并添加了相关的诊断工具。
  • 通过 zx_cache_flush 添加了对用户空间 dcache CLEAN 和 FLUSH 操作的支持。
  • 添加了用于显示套接字信息的 k zx sock 命令,并改进了对对等调度程序的 k 命令处理。
  • 添加了 ns8250 UART 的 PXA 变体,并根据设备树/启动 shim 配置有条件地设置了电平触发位。
  • 修复了内核计时器竞态条件,并改进了计时器队列检查。
  • 修复了对易失性变量的原子加载问题,并引入了针对 libcxx atomic_ref 限制的权宜解决方法。
  • 改进了物理内存管理和切换,包括确保 NVRAM 和 ZBI 分配持久性、处理预留的测试 RAM 和诊断日志记录。

平台驱动程序

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

  • 简化了 aml-sdmmc driver 构建流程,提高了驱动程序的清晰性和一致性:为源文件和依赖项创建了专用 GN 目标,从而提高了可维护性并减少了潜在的构建错误。为提高清晰度和一致性,我们还重命名了元数据类型标识符。
  • 提高了驱动程序可靠性并防止了潜在崩溃:修复了平台设备驱动程序中的一个 bug,该 bug 会导致对可选数据的访问不正确。
  • 改进了驱动程序模块化程度、适应不同硬件配置的能力以及调试功能。重构了 aml-light 驱动程序,以便使用 FIDL 从 gpio-light 平台设备检索元数据,并向平台总线驱动程序添加了检查数据。
  • 通过优化 aml-uart 驱动程序,降低了功耗并延长了电池续航时间。现在,只有在驱动程序配置中启用暂停时,驱动程序才会将中断注册为唤醒源。
  • 通过简化 aml-sdmmc 驱动程序中的 AmlSdmmc::GetToken() 函数,提高了代码可读性并降低了复杂性。

Rust

Rust 进行了以下更新:

  • 通过添加将 GN 作用域传递给测试目标以及在依赖项扫描后更早清理辅助 rspfile 的功能,改进了对构建系统的支持。
  • 通过添加 #[allow(deprecated)] 为重命名 std::panic::PanicInfo 做好了准备。

软件交付

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

  • 重构了模拟 Omaha 服务器,以支持 fasync 和 tokio 运行时,并且其 start() 函数现在是异步的。
  • 在 Omaha 客户端、系统更新检查器和 fuchsia.update 中添加了对更新检查完成协议的支持,使 Persistence 能够在更新检查后立即发布数据。
  • 更新了 OTA 触发机制,以使用 ffx
  • Omaha 客户端 Fuchsia 测试现在使用 poll_until_stalled 以实现更好的异步处理。
  • 改进了 swd-e2e-tests 中的 OTA 工具和工件下载;改进了缺少产品软件包时的测试硬件错误处理。

Starnix

Starnix 进行了以下更新:

  • 通过 set-user-id/set-group-id 和 SELinux 动态转换检查增强了安全性:添加了 setuid 功能(默认处于停用状态),并在 SELinux 中针对动态转换实现了类型边界检查,从而提高了安全性并防止特权提升。
  • 通过 SELinux 钩子和 /container 功能标志改进了文件系统安全性和管理:在 SELinux 中添加了 fs_node_set/getsecurity() 钩子来管理文件安全属性,并引入了用于控制 /container 目录的功能标志,为最终移除该目录铺平了道路。
  • 通过环形缓冲区操作和映射增强了 BPF 支持:实现了 BPF 环形缓冲区的预留、提交和舍弃操作,以及映射 BPF 环形缓冲区文件描述符的功能。
  • 引入了 NMFS 管理器框架和 open3 支持:创建了用于管理网络文件系统事件的新框架,并在远程执行中添加了对 open3 的支持,为文件系统操作提供了更强大、更灵活的方法。
  • 在启动时添加了 stardev 容器和 GPU 信息:引入了用于自托管 Fuchsia 开发的新容器,并添加了在启动期间传递 GPU 信息的功能,以改进驱动程序管理。
  • 在测试名称中添加“starnix”,以便更好地识别测试:在测试名称中添加了“starnix”,以便在信息中心中更好地识别和整理测试。
  • 通过在停用时重置 timerfd 截止期限来修复了潜在的计时器问题:确保在停用时重置 timerfd 中的截止期限,以防止出现意外的计时器行为。

存储

我们对“存储空间”进行了以下更新:

  • 通过为 FakeDevice 拆解添加毒药丸选项增强了 fxfs 测试,以便在崩溃时提供更具信息量的堆栈轨迹,并移除了 fuchsia-pkg-testing 中的不必要的借用。
  • 提高了 NAND 设备读取性能和驱动程序效率。现在,驱动程序会等待命令队列变为空,然后再检查状态位,从而减少不必要的轮询和 CPU 使用。我们还移除了一个未使用的中断,进一步提高了驱动程序效率。

计时

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

  • 更新了 GetMonotonic 文档,并向 libfasttime 添加了 compute_boot_ticks 和 compute_boot_time 函数。保证每次启动内核并运行一段时间后,单调时钟都会从 0 开始。向 libfasttime 添加了函数,用于计算启动计数和时间。**
  • 改进了 RTC 驱动程序行为。将计时器更改为监控 /dev/class/rtc 目录,而不是从中读取,添加了单元测试,并还原了为 RTC 检测添加重试项所做的更改。
  • 改进了 Timer 类行为。将 TimerLock 声明移到了 Timer 类中,以便在注解中引用它并允许将计时器列表标记为由此锁保护,并在检查队列时获取计时器锁,以处理来自不同 CPU 的并行 Timer::Cancel 事件并正确计算下一个超时。

工具

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

  • package-tool 已更新,并进行了多项增强,包括为提取命令添加了 --namespace 参数以创建软件包的命名空间型视图,以及采用了 package_manifest.json 来处理元数据。我们还移除了一条过时评论。
  • create 工具现在使用新的 meta/ 目录结构来存储元数据。
  • sdk-deps 脚本现在支持 CSV 输出,并提供依赖项计数。
  • 移除了已废弃的显示工具 display-detectdisplay-png
  • 移除了音频工具中的悬空字符串赋值,并移除了损坏的 sys-realm-analyzer 工具。

ffx

ffx 进行了以下更新:

  • 改进了目标处理:这包括重构目标解析、修复动态目标添加、在客户端发现中设置 SSH 端口,以及停用客户端发现以减少故障。在初始还原后,动态目标添加功能已重新发布。
  • 增强了输出和配置:从软件包命令中移除了 ASCII 艺术字符,为守护程序添加了 --background 标志,添加了 --no-environment 标志,并从 CLI 存储了代码库信息。
  • 实现了初始客户端发现(后来出于稳定性考虑而停用)。
  • ffx audio device info 现在以更优雅的格式显示信号处理、拓扑和状态。
  • 在错误消息中设置了目标地址格式,以提高可读性。
  • 移除了旧版自由形式写入器。

ffx emu

ffx emu 进行了以下更新:

  • 将磁盘哈希重构为 emu_instance(已还原并重新发布)。
  • 由于缺少 Android 模拟器支持,强制为 riscv 映像使用 qemu 引擎。

ffx playground

ffx playground 进行了以下更新:

ffx 代码库

ffx repo 进行了以下更新:

  • 改进了代码库服务器管理:添加了前台选项、公开了 SimpleWriter,并实现了服务器列表。

ffx 代码库

ffx repository 进行了以下更新:

ffx target

ffx target 进行了以下更新:

  • ffx target echo 支持机器架构,并针对未设置的默认目标提供具体错误。
  • 实现了无守护程序的 ffx target wait

fx

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

界面

界面进行了以下更新:

  • SceneManager 现在使用 fuchsia.power.SuspendEnabled 配置功能来控制 suspend_enabled 配置,从而支持测试和受控使用挂起功能。
  • 优化了 ActivityManager 与电源框架的集成(已启用标志)。 由于 OOM 问题,初始集成已被还原,后续更改重新引入了使用 LeaseHolderStateTransitioner 进行状态转换管理,为适当的唤醒租约集成做好准备。这项工作包括更新 suspend_enabled 配置、新的集成测试以及 fuchsia.power.SuspendEnabled capability 的路由。
  • 改进了对 InputDeviceInputFile 的处理。InputFile::read 现在会返回尽可能多的事件,并且由于使用了待处理事件数,因此等待器通知更准确。Starnix 中的按钮事件调试功能也得到了增强,新增了检查计数和其他日志记录。

视频

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

  • 修复了与 std::pair 的可复制性相关的编译器错误:此错误是由 std::pair 的可复制性变更所致。

WLAN

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

  • 改进了 wlanix 的 Antlion 测试:添加了新的软件包和元数据生成功能,以便在没有 starnix 的 VIM3 设备上测试 wlanix,同时添加了无操作测试。
  • 更新了 WLAN 漫游政策:允许通过产品配置选择漫游实现(默认为 RoamingOff),并引入了新的漫游政策平台配置。
  • 改进了 WLAN 遥测和检查功能:Wlanix 现在会提供检查数据,并将客户端连接启用/停用事件记录到遥测,以便更轻松地检查 Wi-Fi 开启/关闭事件。
  • 增强了 MLME 和 Fullmac FIDL:添加了转换函数并更正了 RSNE 长度限制,解决了 API 不匹配问题并改进了对超大数据的处理。
  • 改进了 wlansoftmac 驱动程序:迁移到了 DFv2,从而改进了生命周期和稳定性;优化了接收和传输路径,以减少数据复制;并修复了内存泄漏问题。
  • 增强了 wlan-frame-writer:改进了错误报告;将 Appendable 拆分为 AppendTrackedAppend;添加了对填充缓冲区写入的支持;并简化了 write_frame_with_dynamic_buffer 宏。
  • 各种 WLAN 改进:改进了 WLAN 政策中的状态同步;添加了驱动程序计时器测试拆解以防止错误;确保在 wlanix 扫描错误时发送 ScanAborted;并向 brcmfmac 添加了 rxundec 计数器以进行调试。