Zephyr 4.5.0(工作草案)

我们很高兴地宣布 Zephyr 4.5.0 版本正式发布。

本次发布的主要增强包括:

Infineon TriCore 支持

Zephyr 现在支持 Infineon TriCore 架构。

新增驱动类别

Zephyr 4.5 新增多项新的驱动 API,包括:

新增子系统

Zephyr 4.5 新增多项新的子系统 API,包括:

  • 视频,用于控制视频驱动

将应用从 Zephyr v4.4.0 迁移到 Zephyr v4.5.0 时需要或建议采取的变更概览,见单独的 迁移指南。

以下小节按组件详细列出各项变更。

安全漏洞相关

本次发布修复了以下 CVE:

API 变更

移除的 API 和选项

  • 架构

    • ARM

      • CONFIG_PLATFORM_SPECIFIC_INIT

      • z_arm_platform_init()

    • RISC-V

      • CONFIG_EXTRA_EXCEPTION_INFO

    • x86

      • CONFIG_SSE

      • CONFIG_SSE_FP_MATH

    • Xtensa

      • CONFIG_XTENSA_BACKTRACE_EXCEPTION_DUMP_HOOK

  • 蓝牙

    • 控制器

      • CONFIG_BT_CTRL_ADV_ADI_IN_SCAN_RSP

    • 主机

      • CONFIG_BT_RECV_CONTEXT Kconfig 选择项及其选项 CONFIG_BT_RECV_WORKQ_SYS 和 CONFIG_BT_RECV_WORKQ_BT 已被移除。主机现在始终在专用的蓝牙 RX 工作队列上处理低优先级 HCI 数据包(即原先 CONFIG_BT_RECV_WORKQ_BT 的行为)。参见迁移指南。

      • 部分主机工作项已从系统工作队列移至专用的蓝牙 RX 工作队列。由这些工作项触发的应用回调现在运行在蓝牙 RX 线程中。受影响的回调系列参见迁移指南。

      • CONFIG_BT_HCI_RAW_H4 和 CONFIG_BT_HCI_RAW_H4_ENABLE 这两个 Kconfig 选项已被移除。自 Zephyr 4.2 起,HCI raw 层已改为对所有缓冲区无条件使用 H:4 数据包编码,因此这两个选项一直不起任何作用。仍然设置这些选项的应用可以直接删除它们。

      • CONFIG_BT_AUTO_PHY_UPDATE,已由 BT_AUTO_PHY_CENTRAL 和 BT_AUTO_PHY_PERIPHERAL 选项取代

      • _bt_gatt_ccc

      • BT_GATT_CCC_INITIALIZER

      • CONFIG_BT_CONN_TX_MAX

      • CONFIG_BT_FIXED_PASSKEY

      • bt_passkey_set()

      • BT_PASSKEY_INVALID

    • Mesh

      • CONFIG_BT_MESH_BLOB_IO_FLASH_WITH_ERASE

      • CONFIG_BT_MESH_BLOB_IO_FLASH_WITHOUT_ERASE

    • 服务

      • CONFIG_BT_DIS_MANUF

      • CONFIG_BT_DIS_MODEL

  • 开发板

    • 移除了以下已弃用的开发板别名:

      • arduino_uno_r4_minima

      • arduino_uno_r4_wifi

      • esp32c6_devkitc

      • esp32_devkitc_wroom/esp32/procpu

      • esp32_devkitc_wroom/esp32/appcpu

      • esp32_devkitc_wrover/esp32/procpu

      • esp32_devkitc_wrover/esp32/appcpu

      • neorv32

      • panb511evb

      • raytac_an54l15q_db/nrf54l15/cpuapp

      • scobc_module1

      • xiao_esp32c6

    • 以下开发板已被弃用并重命名:

      • adafruit_metro_rp2350/rp2350b/m33 重命名为 adafruit_metro_rp2350/rp2350b/m33_0

      • motion_2350_pro/rp2350a/m33 重命名为 motion_2350_pro/rp2350a/m33_0

      • motion_2350_pro/rp2350a/hazard3 重命名为 motion_2350_pro/rp2350a/hazard3_0

      • beetle_rp2350/rp2350a/m33 重命名为 beetle_rp2350/rp2350a/m33_0

      • beetle_rp2350/rp2350a/hazard3 重命名为 beetle_rp2350/rp2350a/hazard3_0

      • pico2_spe/rp2350a/m33 重命名为 pico2_spe/rp2350a/m33_0

      • pico_plus2/rp2350b/m33 重命名为 pico_plus2/rp2350b/m33_0

      • pico_plus2/rp2350b/hazard3 重命名为 pico_plus2/rp2350b/hazard3_0

      • rpi_pico2/rp2350a/m33 重命名为 rpi_pico2/rp2350a/m33_0

      • rpi_pico2/rp2350a/m33/w 重命名为 rpi_pico2/rp2350a/m33_0/w

      • rpi_pico2/rp2350a/m33/mcuboot 重命名为 rpi_pico2/rp2350a/m33_0/mcuboot

      • rpi_pico2/rp2350a/m33/w/mcuboot 重命名为 rpi_pico2/rp2350a/m33_0/w/mcuboot

      • rpi_pico2/rp2350a/hazard3 重命名为 rpi_pico2/rp2350a/hazard3_0

      • xiao_rp2350/rp2350a/m33 重命名为 xiao_rp2350/rp2350a/m33_0

      • xiao_rp2350/rp2350a/hazard3 重命名为 xiao_rp2350/rp2350a/hazard3_0

      • rp2350_zero/rp2350a/m33 重命名为 rp2350_zero/rp2350a/m33_0

      • rp2350_zero/rp2350a/hazard3 重命名为 rp2350_zero/rp2350a/hazard3_0

      • rp2350b_core/rp2350b/m33 重命名为 rp2350b_core/rp2350b/m33_0

      • rp2350b_core/rp2350b/hazard3 重命名为 rp2350b_core/rp2350b/hazard3_0

      • w5500_evb_pico2/rp2350a/m33 重命名为 w5500_evb_pico2/rp2350a/m33_0

      • w6100_evb_pico2/rp2350a/m33 重命名为 w6100_evb_pico2/rp2350a/m33_0

      • w6300_evb_pico2/rp2350a/m33 重命名为 w6300_evb_pico2/rp2350a/m33_0

  • 构建系统

    • CONFIG_BUILD_NO_GAP_FILL

    • cmake/app/boilerplate.cmake

    • 名为 <board>_<revision>.conf 的开发板版本 Kconfig 片段,已替换为 <board>_<revision>_defconfig

    • zephyr_code_relocate(FILES ...) 中的模式展开,已替换为 file(GLOB ...)

    • CMake 的 flash、debug、debugserver、attach 和 rtt 目标,已替换为对应的 west 命令

    • WEST_DIR 构建系统变量

    • ZephyrUnittest CMake 包,已替换为 find_package(Zephyr COMPONENTS unittest)

  • CAN

    • bus-speed

    • bus-speed-data

  • 比较器

    • nxp,kinetis-acmp 的 nxp,enable-output-pin、nxp,use-unfiltered-output、nxp,high-speed-mode、nxp,enable-sample、nxp,filter-count、nxp,filter-period 和 nxp,window-mode 属性

  • 计数器

    • CONFIG_COUNTER_MAXIM_DS3231

    • nxp,lptmr 的 prescaler 属性

  • hawkBit

    • <zephyr/mgmt/hawkbit.h>

  • 设备树

    • zephyr,memory-region-mpu

  • 以太网

  • LLEXT

    • llext_get_fn_table,已替换为 llext_get_fn_table_entry

  • Mbed TLS

    • CONFIG_MBEDTLS_MD

    • CONFIG_MBEDTLS_LMS

    • CONFIG_MBEDTLS_TLS_VERSION_1_2

    • CONFIG_MBEDTLS_DTLS

    • CONFIG_MBEDTLS_TLS_VERSION_1_3

    • CONFIG_MBEDTLS_TLS_SESSION_TICKETS

    • CONFIG_MBEDTLS_CTR_DRBG_ENABLED

    • CONFIG_MBEDTLS_HMAC_DRBG_ENABLED

  • MCUboot

  • MCUmgr

    • CONFIG_MCUMGR_GRP_OS_INFO_HARDWARE_INFO_SHORT_HARDWARE_PLATFORM

  • 网络

    • CONFIG_NET_TC_SKIP_FOR_HIGH_PRIO

    • CONFIG_NET_SOCKETS_POLL_MAX

    • CONFIG_NET_TEST_PROTOCOL,以及作为其唯一被测系统的 samples/net/sockets/tcp 示例。

    • CONFIG_NET_GPTP_CLOCK_ACCURACY_*

    • net_ipv6_set_hop_limit()

    • net_if_ipv4_get_netmask()

    • net_if_ipv4_set_netmask()

    • net_if_ipv4_set_netmask_by_index()

    • openthread_state_changed_cb_register()

    • openthread_state_changed_cb_unregister()

    • openthread_start()

    • openthread_api_mutex_lock()

    • openthread_api_mutex_try_lock()

    • openthread_api_mutex_unlock()

    • struct openthread_state_changed_cb

    • TLS_CREDENTIAL_SERVER_CERTIFICATE

    • start_11r_roaming

    • IEEE802154_HW_SLEEP_TO_TX

  • Nordic

  • POSIX

    • CONFIG_POSIX_READER_WRITER_LOCKS

  • 随机数

    • CONFIG_CTR_DRBG_CSPRNG_GENERATOR

    • CONFIG_CS_CTR_DRBG_PERSONALIZATION

  • Shell

    • kernel log_level,由 log enable 取代

  • SPI

  • 流式 Flash

    • stream_flash_erase_page()

  • ZTest

    • CONFIG_ZTEST_SHUFFLE_SUITE_REPEAT_COUNT

    • CONFIG_ZTEST_SHUFFLE_TEST_REPEAT_COUNT

  • imgtool 的 West 签名支持在 Zephyr 4.0 中已弃用,现已被移除。

  • scripts/logging/dictionary/log_parser_uart.py 字典日志脚本在 Zephyr 4.3 中已弃用,现已被移除。请改用 scripts/logging/dictionary/live_log_parser.py。

  • west flash、west debug 以及其他调用 runner 的命令的 --skip-rebuild 选项在 Zephyr 4.3 中已弃用,现已被移除。请改用 --no-rebuild。

已弃用的 API 和选项

新增 API 和选项

新增开发板

新增扩展板

新增驱动

新增示例

库 / 子系统

  • 加密

    • 新增对 AES CFB 和 OFB 密码模式的支持。

  • Mbed TLS

    • Mbed TLS 已更新至 4.1.1 版本。版本说明见 此处。

    • TF-PSA-Crypto 已更新至 1.1.1 版本。版本说明见 此处。

    • 新增 CONFIG_TF_PSA_CRYPTO_DISPATCH_DIR,使 TF-PSA-Crypto 能够使用加密操作分发的自定义实现。这样,借助可感知加速器的分发实现,即可对加密操作进行硬件加速。

  • TF-M

  • DFU

  • LoRa / LoRaWAN

  • 管理

    • MCUmgr

      • 镜像管理客户端现在支持 SHA-512 镜像摘要。对于使用 CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 构建的目标,它可以列出并选择镜像以进行测试或确认。

  • 网络

    • CoAP

      • CoAP 服务器接受携带空令牌的 Observe 注册(RFC 7641 允许这种做法),并以端点和该空令牌作为观察者的键。

  • 安全存储

    • 对于认证失败或格式错误的条目,psa_its_get*() 函数现在返回 PSA_ERROR_INVALID_SIGNATURE 或 PSA_ERROR_DATA_CORRUPT,而不再返回 PSA_ERROR_GENERIC_ERROR。

    • 修改条目的 ITS 操作现已串行化,丢弃无法读回的条目时会记录一条警告。

    • 以 0 作为 data_size 调用 psa_its_get() 时,现在会报告该条目是否存在且有效,而不再总是返回 PSA_SUCCESS。

  • 多媒体流水线

    • 引入 多媒体流水线(mpipe),这是用于以可复用元素(源、变换和接收端)构建多媒体应用的新子系统,这些元素链接在一起构成流水线。它让应用可以描述自己想要的媒体流,而不必亲自驱动每个音频、视频或显示设备。

  • 视频

    • 引入视频子系统,它继承了此前视频驱动中的所有函数名。

  • Zbus

  • __assert

    • __ASSERT_ON 定义已被移除。

Devicetree

其他值得注意的变更

  • 蓝牙

    • CONFIG_SYSTEM_WORKQUEUE_PRIORITY 不再仅因启用 CONFIG_BT 而被强制设为协作式优先级。现在只有向系统工作队列提交工作的组件才需要该设置,因此不包含这些组件的构建(例如驱动外部控制器的 HCI raw 镜像)可以重新选择可抢占优先级 (GitHub #119123)。

  • 构建系统

    • 要求的最低 CMake 版本已提升至 3.28.0,Ubuntu 24.04 LTS 软件包仓库中的 CMake 软件包即满足这一版本要求。如果所用发行版提供的版本较旧,可选方案参见 迁移指南。

  • 内核

  • 定时器

    • 启用 CONFIG_SYSTEM_CLOCK_SLOPPY_IDLE 后,如果停止时基会破坏 sys_clock_cycle_get_32() / sys_clock_cycle_get_64(),则驱动不得在无待处理超时时立即停止时基。这些函数在 CPU 运行期间必须保持计数。仅允许从 sys_clock_idle_enter() 停止时基,因为随后保证会调用 sys_clock_idle_exit()。

    • Tickless 系统定时器驱动现在可以基于共享实现头文件 drivers/timer/system_timer_generic.h 构建;该头文件负责此前由各驱动自行实现的 tick 核算:周期到 tick 的转换、announce 基准、按 tick 对齐的期限,以及计数器回绕与范围处理。驱动只需实现少量周期域原语,即读取周期计数器并设置绝对比较定时。有关如何使用它,参见 迁移指南 (GitHub #115844)。

  • 网络

    • DHCPv4 客户端现在会在所有放弃租约的路径上,把租约地址、该租约的 DNS 服务器以及它安装的网关从接口上移除,并在请求被拒绝或地址被拒绝后等待约十秒再重新启动。

  • Wi-Fi

    • 移除了 samples/net/wifi/test_certs/rsa2k 企业测试证书(DES 加密的私钥)。请改用 rsa2k_no_des。

    • 连接结果事件现在可以通过新增的 WIFI_STATUS_CONN_AUTH_REJECT 和 WIFI_STATUS_CONN_ASSOC_REJECT 值表明接入点拒绝了认证或关联,并且 wifi_status 会携带失败背后的原始 IEEE 802.11 状态码和原因码。supplicant 会填充这些信息,Wi-Fi shell 会在连接和断开连接结果中打印它们。 (GitHub #116704)

    • wifi-tx-power-2g.yaml 和 wifi-tx-power-5g.yaml 中的发射功率上限属性不再是 required,并且现在带有保守的默认值,因此尚未标定的开发板宁可发射功率偏小,也不会超出法规限制。已自行测量限值的开发板仍会显式声明这些限值,因此没有任何开发板的行为发生变化。

  • MCUboot

    • SB_CONFIG_BOOT_SIGNATURE_KEY_FILE 现在接受以逗号分隔的密钥文件列表,并将每个密钥的公钥部分嵌入 MCUboot 引导加载程序。提供多个密钥时,MCUboot 接受由其中任一密钥签名的镜像——典型用法是使用开发用引导加载程序,它可同时引导开发签名和生产签名的镜像,而生产引导加载程序只嵌入生产密钥。列表中的第一项是用于签名应用的密钥,其余各项为仅用于验证的公钥。参见 Signing Binaries。

    • Espressif 开发板在 sysbuild 下不再强制使用仅覆盖模式和未签名镜像。这些开发板现在会构建采用偏移量交换并支持回退的 MCUboot,以及使用 RSA-2048 签名的应用;共享的 Espressif 分区表也不再保留 scratch 分区。参见 迁移指南。

  • NXP

    • NXP LPC DTSI 文件已从扁平的 dts/arm/nxp/lpc/ 目录重组为按系列划分的子目录(lpc11u6x/、lpc51u68/、lpc54xxx/、lpc55xxx/、lpc84x/)。有关如何更新树外开发板的包含路径,参见 迁移指南。

    • NXP Kinetis DTSI 文件已从扁平的 dts/arm/nxp/kinetis/ 目录重组为按系列划分的子目录(k2x/、k32lx/、k6x/、k8x/、ke1xf/、ke1xz/、kl2x/、kv5x/、kwx/)。有关如何更新树外开发板的包含路径,参见 迁移指南。

    • NXP MCX DTSI 文件已从扁平的 dts/arm/nxp/mcx/ 目录重组为按系列划分的子目录(mcxa/、mcxc/、mcxe/、mcxl/、mcxn/、mcxw/)。有关如何更新树外开发板的包含路径,参见 迁移指南。

    • NXP i.MX RT DTSI 文件已从扁平的 dts/arm/nxp/imxrt/ 目录重组为按系列划分的子目录(imxrt10xx/、imxrt11xx/、imxrt5xx/、imxrt6xx/、imxrt7xx/、imxrt118x/)。有关如何更新树外开发板的包含路径,参见 迁移指南。

  • Arm

    • 非安全变体的

      Arm Musca-S1 (v2m_musca_s1/musca_s1/ns) 已被移除,原因是 TF-M 移除了对该开发板的平台支持。

    • 作为上述变更的结果, Arm Musca-S1 (v2m_musca_s1) 的安全变体已被弃用,以避免出现部分支持这种令人困惑的状态。

Trusted Firmware-A

  • 引入 CONFIG_TFA_BUILD_FIP 以配置 FIP (Firmware Image Package) 的生成。FIP 生成默认处于禁用状态,可以通过在 prj.conf 中设置 CONFIG_TFA_BUILD_FIP=y 来启用;对于自定义开发板,也可以在开发板的 <board>_defconfig 文件中设置。