Zephyr v4.4.0 迁移指南
本文档介绍将应用从 Zephyr v4.3.0 迁移到 Zephyr v4.4.0 时需要进行的更改。
其他更改(与应用迁移无直接关系)请参见 版本说明。
通用
要求的最低 Zephyr SDK 版本现为 1.0.0。
要求的最低 Python 版本现为 3.12(此前为 3.10)。
构建系统
Zephyr 现在正式默认使用 C17(ISO/IEC 9899:2018)作为最低要求的 C 标准版本。如果您的工具链不支持该标准,则需要使用现有且现已弃用的选项之一:
CONFIG_STD_C99或CONFIG_STD_C11。board.yml 文件中新开发板对应的
board/boards条目的full_name属性现为必填项。CMake 变量
BOARD_QUALIFIERS已与对应的CONFIG_BOARD_QUALIFIERS对齐,因此不再以/为前缀。这意味着任何使用${BOARD}${BOARD_QUALIFIERS}的地方都必须更新为包含/,例如:${BOARD}/${BOARD_QUALIFIERS}。SNIPPET_ROOT已与其他 Zephyr<type>_ROOT设置保持一致,这些设置默认不包含应用源目录。需要将应用源目录添加到SNIPPET_ROOT的示例,必须改为在zephyr/module.yml中使用snippet_root = <dir>条目添加应用源目录,或者手动将该文件夹追加到 CMake 变量SNIPPET_ROOT。Shell 自动补全(
west completion)应重新生成,因为开发板目标自动补全现在支持开发板版本。
内核
堆加固支持已通过添加构建时生成的
zephyr/heap_constants.h文件实现,该文件现由kernel.h包含。这可能会给以 CMake 库形式构建的下游应用带来构建竞态条件,CMake 可能会在头文件生成之前尝试构建它们;这些应用可能需要在 CMake 中额外添加add_dependencies(${lib} zephyr_generated_headers)条目,详情参见 GitHub #106439。__pinned_*属性族以及CONFIG_LINKER_USE_PINNED_SECTION/CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOTKconfig 选项已被移除(GitHub #108773)。内核镜像现在始终驻留在物理内存中;按需分页仅适用于通过k_mem_map()创建的匿名映射,以及通过CONFIG_LINKER_USE_ONDEMAND_SECTION放置在__ondemand_*链接器段中的符号。之前“默认可驱逐”的模型(任何未显式标记
__pinned_*的内核页都可能被换出)从设计上从来就不安全:某个构建能否幸存取决于代码和数据相对于缺页处理调度路径的偶然布局,而非任何保证。如果您的应用依赖旧模型,且它在现有版本上运行正常,建议继续使用该版本(最好是 长期支持 版本),而不是升级。迁移到更高版本很可能改变布局(新增代码、函数重排、新编译器),使未标记的页落入缺页调度路径,从而以难以诊断的方式破坏系统。正是这种潜在脆弱性,促使我们移除该模型而不是继续沿用。需要升级的应用必须进行以下更新:从开发板 defconfig 和 prj.conf 覆盖文件中删除任何
CONFIG_LINKER_USE_PINNED_SECTION=y或CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT=n行。从源代码中删除
__pinned_func、__pinned_data、__pinned_rodata、__pinned_bss和__pinned_noinit属性。需要支持按需分页的代码必须改用__ondemand_func/__ondemand_rodata;贡献者需自行确保这些符号不会从缺页处理程序的执行路径中被访问到。将汇编代码中对
PINNED_TEXT、PINNED_RODATA、PINNED_DATA、PINNED_BSS和PINNED_NOINIT的使用(作为SECTION_FUNC()/SECTION_VAR()的段名参数)替换为普通的TEXT、RODATA、DATA、BSS和NOINIT别名。将
K_KERNEL_PINNED_STACK_DEFINE、K_KERNEL_PINNED_STACK_ARRAY_DEFINE、K_KERNEL_PINNED_STACK_ARRAY_DECLARE、K_THREAD_PINNED_STACK_DEFINE和K_THREAD_PINNED_STACK_ARRAY_DEFINE的使用重命名为对应的非 pinned 版本(K_KERNEL_STACK_DEFINE、K_KERNEL_STACK_ARRAY_DEFINE、K_KERNEL_STACK_ARRAY_DECLARE、K_THREAD_STACK_DEFINE、K_THREAD_STACK_ARRAY_DEFINE)。提供了带 pinned 段(
pinned_text/pinned_rodata/pinned_data/pinned_bss/pinned_noinit)的自定义链接脚本的树外开发板,应将这些输入段匹配项合并回常规的 text / rodata / data / bss / noinit 输出段。依赖
lnkr_pinned_*链接器符号或lnkr_is_pinned()/lnkr_is_region_pinned()的树外代码必须移除这些引用。相应的app_smem_pinned*.ld包含文件以及scripts/build/gen_app_partitions.py的--pinoutput/--pinpartitions选项也已被移除。
开发板
OpenOCD runner 现在使用标准的
--file和--file-type接口来指定烧录文件,与其他 runner(如 JLink)保持一致。具体更改如下:--use-hex、--use-elf和--use-bin标志已弃用。请改用--file-type:--use-elf→--file-type=elf--use-bin→--file-type=bin--use-hex→--file-type=hex(默认即为 hex,可省略)
现在支持
--file选项来指定自定义文件路径,与 JLink runner 类似。使用已弃用标志的开发板 CMake 文件仍可继续工作,但会发出弃用警告。
--file-type选项现在可以在不使用--file的情况下使用,以在构建产物(hex、elf、bin)之间进行选择。
native_sim:主机 FUSE 访问:现在默认使用 libfusev3 而非 v2,但可通过
CONFIG_FUSE_LIBRARY_VERSION选择(GitHub #104965)。m5stack_fire:移除 UART2 未使用的 pinctrl 条目,并将 UART1 的引脚映射从 GPIO32/GPIO33 更新为 GPIO16/GPIO17,以匹配文档中描述的 Grove PORT.C 接线。
Ai-Thinker 的
ai_m62_12f和ai_wb2_12f开发板已分别重命名为ai_m62_12f_kit和ai_wb2_12f_kit。编译定义 'XIP_EXTERNAL_FLASH'、'USE_HYPERRAM' 和 'XIP_BOOT_HEADER_XMCD_ENABLE' 仅在 boards/nxp/mimxrt1180_evk/xip/evkmimxrt1180_flexspi_nor_config.c 和 boards/nxp/mimxrt1170_evk/xmcd/xmcd.c 中使用,我们已将它们改为各自开发板 CMakeLists.txt 文件中的局部作用域。依赖这些定义全局可用的应用可能需要更新。(GitHub #101322)
Renesas
ek_ra8t2/r7ka8t2lfecac/cm85已重命名为ek_ra8t2/r7ka8t2lflcac/cm85。NXP 调整了部分树内编译标志的作用域,将其可见性限制在真正需要的位置。依赖这些标志全局可用的树外应用或开发板可能需要将它们添加到自己的 CMakeLists.txt 文件中,以确保仍能正常构建。(GitHub #100252)受影响的标志如下:
对于 RT10xx 和 RT11xx 系列,编译标志
BOARD_FLASH_SIZE最初定义在boards/nxp/mimxrt10xx_evk/CMakeLists.txt和boards/nxp/mimxrt11xx_evk/CMakeLists.txt中,仅被 HAL 头文件fsl_flexspi_nor_boot.h使用,而该头文件由 soc/nxp/imxrt/imxrt10xx/soc.c 和 soc/nxp/imxrt/imxrt11xx/soc.c 包含。为避免与其他全局标志可能发生的冲突,该宏现在改为在 SoC 层通过 soc/nxp/imxrt/imxrt10xx/CMakeLists.txt 和 soc/nxp/imxrt/imxrt11xx/CMakeLists.txt 中的zephyr_library_compile_definitions()定义。此更改已应用于所有 RTxxxx 开发板。对于 RTxxx 系列,编译标志
BOARD_FLASH_SIZE最初定义在boards/nxp/mimxrtxxx_evk/CMakeLists.txt中,由于在 Zephyr 代码树中未被使用,因此已从所有 RTxxx 开发板的 CMakeLists.txt 文件中移除。对于 RTxxx 系列,编译标志
BOOT_HEADER_ENABLE此前定义在boards/nxp/mimxrtxxx_evk/CMakeLists.txt中并在boards/nxp/rtxxx/<boot_header>.c中使用,现已被 Kconfig 选项取代。因此,RTxxx 开发板 CMakeLists.txt 文件中的zephyr_compile_definitions(BOOT_HEADER_ENABLE=1)行已被移除。从 boards/nxp/rd_rw612_bga/CMakeLists.txt 中移除了编译标志
BOOT_HEADER_ENABLE定义,因为它在 Zephyr 代码树中未被使用。最初,编译标志
XIP_BOOT_HEADER_ENABLE和XIP_BOOT_HEADER_DCD_ENABLE在boards/nxp/rt1xxx/<boot_header>.c中使用。这些标志已在 NXP RTxxxx 评估板上全部转换为 Kconfig 选项,从而可以通过 Kconfig 构建系统而非编译期定义来配置启动头。因此,我们从 RTxxxx 开发板级 CMakeLists.txt 文件中移除了zephyr_compile_definitions(XIP_BOOT_HEADER_ENABLE=1)和zephyr_compile_definitions(XIP_BOOT_HEADER_DCD_ENABLE=1)。由于hal_nxp/rt10xx/fsl_flexspi_nor_boot.h和hal_nxp/rt11xx/fsl_flexspi_nor_boot.h也需要这些宏,因此已通过zephyr_library_compile_definitions()将它们添加到对应的 SoC 层 CMakeLists.txt 文件中,以限制其作用域。
以下 Nordic SoC Kconfig 已被弃用并替换;如果 Kconfig/CMake/代码中引用了这些已弃用的 Kconfig,则需要进行更新:
以下 Sifive Freedom SoC Kconfig 已被弃用并替换;如果 Kconfig/CMake/代码中引用了这些已弃用的 Kconfig,则需要进行更新:
CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FE300替换为CONFIG_SOC_SERIES_FE300CONFIG_SOC_SIFIVE_FREEDOM_FE310_G000替换为CONFIG_SOC_FE310_G000CONFIG_SOC_SIFIVE_FREEDOM_FE310_G002替换为CONFIG_SOC_FE310_G002CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FU500替换为CONFIG_SOC_SERIES_FU500CONFIG_SOC_SIFIVE_FREEDOM_FU540替换为CONFIG_SOC_FU540CONFIG_SOC_SIFIVE_FREEDOM_FU540_E51替换为CONFIG_SOC_FU540_E51CONFIG_SOC_SIFIVE_FREEDOM_FU540_U54替换为CONFIG_SOC_FU540_U54CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FU700替换为CONFIG_SOC_SERIES_FU700CONFIG_SOC_SIFIVE_FREEDOM_FU740替换为CONFIG_SOC_FU740CONFIG_SOC_SIFIVE_FREEDOM_FU740_S7替换为CONFIG_SOC_FU740_S7CONFIG_SOC_SIFIVE_FREEDOM_FU740_U74替换为CONFIG_SOC_FU740_U74
ITE
it515xx_evb已重命名为it51xxx_evb。使用
CONFIG_USE_DT_CODE_PARTITION或设置了zephyr,code-partitionchosen 节点的开发板,现在应改用新的zephyr,mapped-partitioncompatible。该绑定使用设备树单元地址来获取分区的内存映射地址,而无需手动向上遍历子节点、直到找到具有特定名称的节点才能计算;同时,使用zephyr,mapped-partition时不再允许使用CONFIG_FLASH_LOAD_OFFSET和CONFIG_FLASH_LOAD_SIZE,因为链接脚本现在可以自行计算出 NVM 偏移和大小,无需 Kconfig 作为中间步骤执行数学运算。此外,切换到zephyr,mapped-partition后,内存映射设备上不再需要fixed-subpartitions,因为它们可以原生地相互嵌套,并具有正确的地址和偏移(与设备树ranges属性一起使用时)。对于尚未更新为对zephyr,code-partitionchosen 设备使用zephyr,mapped-partition绑定的开发板目标,将设置CONFIG_FLASH_CODE_PARTITION_USING_FIXED_PARTITIONS。未来将弃用将 fixed-partitions 用作 chosenzephyr,code-partition节点的用法。基于 STM32N6x SoC(
CONFIG_SOC_SERIES_STM32N6X)的开发板或项目,当期望 Zephyr 应用在处理器的安全状态下执行时,现在需要显式启用CONFIG_TRUSTED_EXECUTION_SECURE。反之,如果期望 Zephyr 应用在处理器的非安全状态下执行,开发板或项目必须显式启用CONFIG_TRUSTED_EXECUTION_NON_SECURE。以下 WCH SoC Kconfig 已被重命名。如果 Kconfig/CMake/代码引用了旧 Kconfig,则需要进行更新:
CONFIG_SOC_SERIES_CH32V00X替换为CONFIG_SOC_SERIES_QINGKE_V2C
设备驱动与设备树
ADC
renesas,ra-adccompatible 已被renesas,ra-adc12取代。使用旧 compatible 的应用必须更新其设备树节点。新增了
renesas,ra-adc16compatible。在使用提供 16 位 ADC 分辨率的 EK-RA2A1 开发板时必须使用它。将
CONFIG_ADC_MCUX_SAR_ADC重命名为CONFIG_ADC_NXP_SAR_ADC。将驱动文件从
adc_mcux_sar_adc.c重命名为 drivers/adc/adc_nxp_sar_adc.c。使用 SAR ADC 驱动的应用需要更新设备树中的节点,加入
zephyr,input-positive以指定硬件通道。对于当前支持 SAR ADC 的 SoC,参考电压应使用ADC_REF_VDD_1而不是ADC_REF_INTERNAL。此驱动更新也修正了该问题,因此用户还需要相应更新设备树中该属性的值。(GitHub #100978)st,stm32-adc不再具有resolutions属性,取而代之的是st,adc-resolutions属性。对于 revision Y 的 STM32H7 器件,不再需要替换 14 位和 12 位分辨率的值。如果使用 14 位或 12 位分辨率,此更改可能会影响功耗。此前使用功耗优化值,现在使用标准值(未做功耗优化,但精度更好)。对其他系列没有影响。
DMA
移除了
CONFIG_DMA_MCUX_EDMA_V5(GitHub #100341)。该宏此前用于区分 nxp,version(5) 和 nxp,version(4)。现在它统一支持两个版本的维护。用户可以将DMA_MCUX_EDMA_V5改为DMA_MCUX_EDMA_V4。
EEPROM
为 I2C EEPROM 目标驱动新增了
eeprom_target_read_data()和eeprom_target_write_data(),它们接受偏移量和长度参数,并弃用了eeprom_target_program()。更新了
microchip,xec-eeprom的 PCR 和 GIRQ 属性,使其使用新的宏(GitHub #104591)。
ESP32-S3
原先的
espressif,esp32-lcd-cam绑定已重构。LCD_CAM 外设现在由通用的lcd_cam节点表示,其功能模块拆分为两个独立的子节点:用于 DVP(摄像头)输入模块的
espressif,esp32-lcd-cam-dvpcompatible 节点,标签为lcd_cam_dvp。用于 LCD 输出模块的
espressif,esp32-lcd-cam-mipi-dbicompatible 节点,标签为lcd_cam_disp。
原有的
espressif,esp32-lcd-camcompatible 节点保留通用的 pinctrl、时钟和中断属性,而摄像头专用属性已移至新的lcd_cam_dvp子节点。摄像头相关属性必须从
lcd_cam节点移至新的lcd_cam_dvp子节点,且zephyr,camerachosen 属性应指向lcd_cam_dvp。
GPIO
LiteX GPIO 驱动
litex,gpio已经过重构,以支持更改方向。该驱动现在使用 reg-names 属性来检测 GPIO 控制器支持的模式。设备树属性port-is-output已被移除。reg-names 现在直接取自 LiteX。(GitHub #99329)renesas,rz-gpio的irqs属性已经过重构,改为将引脚显式映射到中断 phandle,而不是中断索引(GitHub #101256)。/* Old (Zephyr ≤ 4.3) */ &gpio16 { /* Map port16 pin3 to tint7 */ irqs = <3 7>; }; /* New (Zephyr ≥ 4.4) */ &tint7 { status = "okay"; }; &gpio16 { /* Map port16 pin3 to tint7 */ irqs = <&tint7 3>; };
Infineon
Infineon 驱动文件名已重命名,从名称中去掉了
cat1,以支持在多个设备类别中复用。以下驱动已重命名(GitHub #99174):adc_ifx_cat1.c→adc_ifx.cclock_control_ifx_cat1.c→clock_control_ifx.ccounter_ifx_cat1.c→counter_ifx.cdma_ifx_cat1.c→dma_ifx.cdma_ifx_cat1_pdl.c→dma_ifx_pdl.cflash_ifx_cat1.c→flash_ifx.cflash_ifx_cat1_qspi.c→flash_ifx_qspi.cflash_ifx_cat1_qspi_mtb_hal.c→flash_ifx_qspi_mtb_hal.cgpio_ifx_cat1.c→gpio_ifx.ci2c_ifx_cat1.c→i2c_ifx.ci2c_ifx_cat1_pdl.c→i2c_ifx_pdl.cmbox_ifx_cat1.c→mbox_ifx.cpinctrl_ifx_cat1.c→pinctrl_ifx.crtc_ifx_cat1.c→rtc_ifx.cifx_cat1_sdio.c→ifx_sdio.csdio_ifx_cat1_pdl.c→sdio_ifx_pdl.cserial_ifx_cat1_uart.c→serial_ifx_uart.cspi_ifx_cat1.c→spi_ifx.cspi_ifx_cat1_pdl.c→spi_ifx_pdl.cuart_ifx_cat1.c→uart_ifx.cuart_ifx_cat1_pdl.c→uart_ifx_pdl.cwdt_ifx_cat1.c→wdt_ifx.c
相应的 Kconfig 符号和绑定文件也已更新:
CONFIG_*_INFINEON_CAT1→CONFIG_*_INFINEONcompatible: "infineon,cat1-adc"→compatible: "infineon,adc"
compatible 为
infineon,bt-hci-uart的 Infineon 蓝牙 HCI UART 驱动(CONFIG_BT_HCI_UART_INFINEON)现在明确限定为使用 HCI UART 传输的 AIROC 连接芯片。(GitHub #103871)相应的 Kconfig 符号和设备树 compatible 也已更新:
CONFIG_BT_CYW43XX→ :kconfig:option:` CONFIG_BT_HCI_UART_INFINEON`dtcompatible: "infineon,cyw43xxx-bt-hci"→dtcompatible: "infineon,bt-hci-uart"
MDIO
mdio_bus_enable()和mdio_bus_disable()函数已被移除。MDIO 总线的启用/禁用现在由 MDIO 驱动内部处理。(GitHub #99690)。MDIO 驱动区域已并入以太网驱动区域。驱动已从
drivers/mdio/移至 drivers/ethernet/mdio/。设备树绑定已从dts/bindings/mdio/移至 dts/bindings/ethernet/mdio/。(GitHub #103944)
MEMC
st,stm32-xspi-psram和st,stm32-ospi-psramcompatible 节点现在需要包含st,refresh属性,以内存时钟周期数指定 PSRAM 刷新率(GitHub #102735)。驱动中硬编码的默认值 320(st,stm32-xspi-psram)和 129(st,stm32-ospi-psram)已被移除。
NXP
NXP DTSI 文件已移至
dts/arm/nxp下按系列划分的子目录,以提高可维护性和可发现性,并与soc/nxp下的结构保持一致。被移动文件的设备树包含路径必须更新。请将#include <nxp/nxp_*.dtsi>形式的包含更新为使用正确的系列子目录。(GitHub #101243)。示例:
/* Before */ #include <nxp/nxp_rt1060.dtsi> /* After */ #include <nxp/imxrt/nxp_rt1060.dtsi>
此更改仅适用于从
dts/arm/nxp移出的 NXP ARM SoC 包含文件。不要更改位于其他位置(例如dts/arm64/nxp下)的 DTSI 文件的包含。要定位受影响的包含语句,可以搜索旧的包含前缀:
git grep "#include <nxp/nxp_" -- '*.dtsi' '*.dts' '*.overlay'nxp,lptmr节点用作系统定时器时,现在必须通过zephyr,system-timerchosen 属性指定。基于 i.MX95 和 MCX-W SoC 的开发板已在 SoC DTSI 中设置好此项,无需更改。所有其他使用CONFIG_MCUX_LPTMR_TIMER的开发板必须添加开发板覆盖文件:/ { chosen { zephyr,system-timer = &lptmr0; }; };
在 Kinetis KE1xF 上,启用
CONFIG_PM时也需要此覆盖文件。nxp,imx-flexspi-norcompatible 节点现在有一个soc-nv-flashcompatible 子节点来描述闪存。nxp,imx-flexspi-nor节点充当闪存控制器(重命名为flash-controller@0),erase-block-size、write-block-size属性以及partitions节点已移至闪存芯片节点中。树外开发板必须相应更新其设备树。zephyr,flashchosen 属性必须指向soc-nv-flashcompatible 节点。zephyr,flash-controllerchosen 属性必须指向nxp,imx-flexspi-norcompatible 节点。控制器节点上需要提供
ranges属性。
QSPI
使用
dual-flash属性配置的st,stm32-qspicompatible 节点现在还需要包含ssht-enable属性,以重新启用采样移位。采样移位现在可配置,且默认禁用。(GitHub #98999)。
Radio
以下设备树绑定已重命名,以与
radio-前缀保持一致:generic-fem-two-ctrl-pins现为radio-fem-two-ctrl-pinsgpio-radio-coex现为radio-gpio-coex
新增了
radio.yaml基础绑定,用于描述通用无线电硬件能力。为保持一致,tx-high-power-supported属性已重命名为radio-tx-high-power-supported。使用旧 compatible 字符串的设备树和覆盖文件必须更新为新名称。
SD 主机控制器
根据 SD Host Controller Specification,将额外字段
bus_4_bit_support、hs200_support和hs400_support从sdhc_host_caps移至sdhc_host_props。(GitHub #91701)
Shell
shell_set_bypass()现在需要传入用户数据指针。相应地,shell_bypass_cb_t现在具有用户数据参数。(GitHub #100311)
STM32
STM32 供电配置现在使用设备树属性进行。新增了
st,stm32h7-pwr、st,stm32h7rs-pwr和st,stm32-dualreg-pwr绑定,并移除了所有与供电配置相关的 Kconfig 符号:CONFIG_POWER_SUPPLY_LDOCONFIG_POWER_SUPPLY_DIRECT_SMPS,CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_LDOCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_LDO,CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXT_AND_LDOCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXT_AND_LDOCONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXTCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXTCONFIG_POWER_SUPPLY_EXTERNAL_SOURCE
STM32 专用的 chosen 属性
/chosen/zephyr,ccm已被/chosen/zephyr,dtcm取代。属性宏__ccm_data_section、__ccm_bss_section和__ccm_noinit_section已弃用,但为向后兼容而保留;它们将在 Zephyr 4.5 中移除。应改用通用的__dtcm_{data,bss,noinit}_section宏。(GitHub #100590)STM32 平台现在使用 MCUboot 的默认运行模式
swap using offset(SB_CONFIG_MCUBOOT_MODE_SWAP_USING_OFFSET)。为支持此引导加载程序模式,需要对开发板设备树进行一些更改。若干开发板已支持此模式(参见 GitHub #100385)。此前的swap using move模式仍可在 sysbuild 中通过启用SB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE来选择。对于 STM32F2x/F4x/F7x,不同的 PLL 绑定(
st,stm32f2-pll-clock、st,stm32f4-pll-clock、st,stm32f4-plli2s-clock、st,stm32f411-plli2s-clock、st,stm32f7-pll-clock和st,stm32fx-pllsai-clock)已合并为一个st,stm32fx-pll-clock。此合并带来了一些变化,特别是div-divq和div-divr属性已分别重命名为post-div-q和post-div-r。此外,在 SoC 适用时,如果使用了对应的div-q或div-r属性,则必须定义这些属性。对于 STM32L4x,
st,stm32l4-pllsai-clock绑定已被现有的st,stm32l4-pll-clock取代。此替代将div-divr属性重命名为post-div-r。当 MAC 设备树节点中使用以下属性之一时,STM32 平台在 drivers/ethernet/eth_stm32_hal_common.c 中的 MAC 地址生成现在使用
net_eth_mac_config:zephyr,random-mac-address(a)local-mac-address(b)nvmem-cells(c)(新增)
这会导致使用 (a) 或 (b) 属性的实现出现向后兼容性问题。此前在设备树中使用这些属性的实现,将 ST OUI 作为 MAC 地址的前 3 个最高有效字节,并使用随机 (a) 或显式 (b) 位作为后 3 个最低有效字节。现在,MAC 地址要么完全随机 (a),要么完全或部分由设备树写入 (b)。
新实现 (c) 允许引用存储在非易失性存储器中的 MAC 地址。例如:在 STM32N6x 平台上管理 OTP 熔丝的 BSEC 外设。更多详细信息请参见
net_eth_mac_load()。当 MAC 节点中未指定这些属性中的任何一个时,将使用旧版实现。(GitHub #102810)
备注
此更改使 STM32 平台的行为与 Zephyr 的通用行为保持一致。此前的实现尚未达到产品可用状态,因此应该不会造成太多麻烦。
Kconfig 选项
CONFIG_SPI_STM32_USE_HW_SS已被移除。SPI 运行模式现在根据设备树配置自动选择:具有cs-gpios或新增的st,soft-nss属性的实例以 “Soft NSS” 模式工作,而所有其他实例以 “Hard NSS” 模式工作。为确保 SPI 在任何频率下都能正常工作,所有 SPI 引脚现在默认配置为
very-high-speed压摆率。这可能会导致功耗升高。可以在开发板的 dts 或覆盖文件中将压摆率值改为较慢的速度,以降低功耗。CONFIG_NUM_IRQS现在通过新的dt_highest_controller_irq_numberKconfig 预处理函数,基于活动(status = "okay";)设备自动计算。注册自定义 ISR(使用IRQ_CONNECT())的应用可能会因CONFIG_NUM_IRQS取值偏低而遇到如下构建失败:gen_isr_tables.py: error: IRQ 114 (offset=0) exceeds the maximum of 106
请将
CONFIG_NUM_IRQS显式设置为适当的值以解决这些问题。(以下文档页面 说明了具体做法)
USB
maxim,max3421e_spi已重命名为maxim,max3421e-spi。USB 控制传输缓冲区分配已从 UDC 移至 USB device_next。树外 UDC 驱动需要相应重构。(GitHub #103493)。
UVC 设备应用 API 已修改:
uvc_set_video_dev已重命名为uvc_device_init()uvc_add_format已重命名为uvc_device_add_format()
USB-C
alert_handler_cb字段已从tcpc_driver_api结构体中移除,因为它未被使用,且与通过tcpc_set_alert_handler_cb()注册的回调重复。
中断控制器
swerv,pic现已通过添加厂商前缀变为cdns,swerv-pic。
以太网
以下驱动已引入使用
net_eth_mac_config的驱动 MAC 地址配置支持:atmel,sam-gmac和atmel,sam0-gmac(GitHub #96598)移除了
CONFIG_ETH_SAM_GMAC_MAC_I2C_EEPROM移除了
CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS移除了
CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS_SIZE移除了
mac-eeprom属性
st,stm32n6-ethernet、st,stm32h7-ethernet和st,stm32-ethernet(GitHub #102810、GitHub #105090)vnd,ethernet(GitHub #96598)
现在应将 MAC 地址设置为
nvmem-layout的子节点。请参阅 MAC 地址配置 文档。fixed-link属性已从ethernet-phy中移除。如果需要该功能,请改用新的ethernet-phy-fixed-linkcompatible。此时需要使用default-speeds属性指定固定链路参数(GitHub #100454)。microchip,ksz8081的reset-gpios属性已改为低电平有效,您可能需要在设备树中将该引脚设置为GPIO_ACTIVE_LOW(GitHub #100751)。CONFIG_ETH_INIT_PRIORITY现在默认设置为 60。CONFIG_PHY_INIT_PRIORITY和CONFIG_MDIO_INIT_PRIORITY现在默认取CONFIG_ETH_INIT_PRIORITY的值。CONFIG_PTP_CLOCK_INIT_PRIORITY也是如此,但仅在启用CONFIG_ETH_DRIVER时成立。这样,优先级便基于设备树中的依赖关系。(GitHub #104310)支持校验和卸载的驱动现在需要选择新的 Kconfig 选项
CONFIG_NET_CHECKSUM_OFFLOAD_SUPPORTED。要使用校验和卸载,需要启用CONFIG_NET_CHECKSUM_OFFLOAD。如果选择了CONFIG_NET_CHECKSUM_OFFLOAD_SUPPORTED,该选项默认启用。(GitHub #105051)microchip,lan865x的phy-handle属性现在必须设置为 phy 节点。CONFIG_NET_DSA_DEPRECATED已被移除。由于microchip,ksz8463、microchip,ksz8794和microchip,ksz8863这些 compatible 的驱动尚未迁移到新的 DSA 子系统,它们已被移除。(GitHub #105926)当通过
ETHERNET_CONFIG_TYPE_MAC_ADDRESS更改 MAC 地址时,以太网驱动不再需要自行调用net_if_set_link_addr()。(GitHub #105931)
定时器
通过兼容性宏
z_cms_lptim_hook_on_lpm_entry和z_cms_lptim_hook_on_lpm_exit实现旧版 Cortex-M SysTick 低功耗伴随接口的树外 SoC 或平台代码,应迁移到 include/zephyr/drivers/timer/system_timer_lpm.h 中的z_sys_clock_lpm_enter()和z_sys_clock_lpm_exit()。drivers/timer/cortex_m_systick.h 中的兼容性垫片已在 Zephyr 4.4.0 中弃用,目前计划在 Zephyr 4.6.0 中移除。以下旧版 Kconfig 选项也已弃用:CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_NONE、CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_COUNTER、CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_HOOKS和CONFIG_CORTEX_M_SYSTICK_RESET_BY_LPM。chosen 属性/chosen/zephyr,cortex-m-idle-timer已弃用,取而代之的是/chosen/zephyr,system-timer-companion。请迁移到CONFIG_SYSTEM_TIMER_LPM_COMPANION_NONE、CONFIG_SYSTEM_TIMER_LPM_COMPANION_COUNTER、CONFIG_SYSTEM_TIMER_LPM_COMPANION_HOOKS和CONFIG_SYSTEM_TIMER_RESET_BY_LPM。renesas,rza2m-ostm名称已由renesas,rza2m-ostm-timer取代。Kconfig 符号DT_HAS_RENESAS_RZA2M_OSTM_ENABLED已由DT_HAS_RENESAS_RZA2M_OSTM_TIMER_ENABLED取代(GitHub #100934)
控制器局域网(CAN)
移除了
CONFIG_CAN_MAX_FILTER、CONFIG_CAN_MAX_STD_ID_FILTER和CONFIG_CAN_MAX_EXT_ID_FILTER(GitHub #100596)。这些选项由以下驱动专用的 Kconfig 符号取代,其中一些符号的默认值已提高以满足典型的软件需求:将
nxp,flexcan和nxp,flexcan-fd的 Kconfig 选项CONFIG_CAN_MAX_MB替换为每个实例的number-of-mb设备树属性(GitHub #99483)。nxp,flexcan的clk-source设备树属性(如果存在)现在会自动在名为clksrc0和clksrc1的输入时钟之间选择,用作 CAN 协议引擎时钟。由于 NXP LPC 系列 MCAN 驱动并非基于 NXP MCUXpresso HAL,其 Kconfig 选项
CONFIG_CAN_MCUX_MCAN已重命名为CONFIG_CAN_NXP_LPC_MCAN(GitHub #103679)。为
ti,tcan4x5x新增了设备树属性ti,nwkrq-voltage-vio,用于配置nWKRQ引脚使用的电压轨。为保持驱动此前使用 VIO 的默认行为,必须设置该属性(GitHub #104182)。
文件系统
如果设备树中存在任何启用了
automount属性的zephyr,fstab,fatfs,则CONFIG_FS_FATFS_FSTAB_AUTOMOUNT现在默认启用。不想要此行为的应用需要显式禁用该选项。(GitHub #103139)NVS 和 ZMS 已移至新的键值存储系统(KVSS)子系统;此次调整涉及 NVS 和 ZMS 接口头文件路径,它们已从
zephyr/fs/移至zephyr/kvss/。NVS 和 ZMS 的 Kconfig 选项已从 “File Systems” 菜单下移至 “Key-Value Storage Systems” 菜单下,没有 Kconfig 受到影响。(GitHub #103244)
时钟控制
bflb,bl60x-pll、bflb,bl61x-root-clk、bflb,bl60x-root-clk、bflb,bl61x-wifipll、bflb,bl70x-root-clk和bflb,bl61x-flash-clk已分别替换为bflb,flash-clk、bflb,pll和bflb,root-clk。infineon,peri-div时钟控制绑定移除了resource-type、resource-instance和resource-channel属性。驱动不再使用这些属性,且已从驱动的内部数据结构中删除相应字段。使用该 compatible 的树外开发板必须从其设备树节点中删除这些属性。(GitHub #105393)
显示
对于 ILI9XXX 控制器,设备树中用于选择面板颜色格式的
ILI9XXX_PIXEL_FORMAT_x已更新为PANEL_PIXEL_FORMAT_x。树外开发板和扩展板应相应更新。(GitHub #99267)。对于 ILI9341 控制器,显示镜像配置已更新,以符合示例
samples/drivers/display所描述的行为。(GitHub #99267)。此更改会导致某些显示面板出现镜像问题,该问题将在 v4.4.1 版本中妥善修复。(GitHub #106862)PIXEL_FORMAT_BGR_565像素格式(及其对应的设备树宏PANEL_PIXEL_FORMAT_BGR_565)已重命名为PIXEL_FORMAT_RGB_565X(以及PANEL_PIXEL_FORMAT_RGB_565X),以正确反映它是 RGB-565 的字节交换版本,而不是红蓝通道交换格式。(GitHub #99276)使用PIXEL_FORMAT_BGR_565表示字节交换 RGB-565 的应用和库必须更新为使用PIXEL_FORMAT_RGB_565X。Kconfig 选项
CONFIG_SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_BGR_565和CONFIG_ST7789V_BGR565已分别重命名为CONFIG_SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_RGB_565X和CONFIG_ST7789V_RGB565X。(GitHub #99276)CONFIG_SSD1327符号已重命名为CONFIG_SSD1327_5,以同时支持SSD1325。solomon,ssd1327fb、solomon,ssd1306fb和solomon,ssd1309fb设备树 compatible 已分别重命名为solomon,ssd1327、solomon,ssd1306和solomon,ssd1309,以与其他显示控制器保持一致,并去掉与 Zephyr 无关的fb后缀。NXP eLCDIF 控制器(
nxp,imx-elcdif)现在正确地声明支持PIXEL_FORMAT_XRGB_8888而不是PIXEL_FORMAT_ARGB_8888。waveshare,7inch-dsi-lcd-c设备树 compatible 已被waveshare,dsi2dpi取代,CONFIG_WAVESHARE_7INCH_DSI_LCD_C选项已被CONFIG_WAVESHARE_DSI2DPI取代。(GitHub #100140)使用 STM32 LTDC 显示控制器的开发板必须更新其设备树,在
st,stm32-ltdc节点中将pixel-format设置为PANEL_PIXEL_FORMAT_RGB_888。(GitHub #99277)
步进电机
对于
adi,tmc2209,属性msx-gpios现已被m0-gpios和m1-gpios取代,以与其他 step/dir 步进电机驱动保持一致。多个 API 函数已重命名:
stepper_move_by重命名为stepper_ctrl_move_by()。stepper_move_to重命名为stepper_ctrl_move_to()。stepper_is_moving重命名为stepper_ctrl_is_moving()。stepper_run重命名为stepper_ctrl_run()。stepper_stop重命名为stepper_ctrl_stop()。stepper_set_reference_position重命名为stepper_ctrl_set_reference_position()。stepper_get_actual_position重命名为stepper_ctrl_get_actual_position()。stepper_set_microstep_interval重命名为stepper_ctrl_set_microstep_interval()。
以下事件已从
stepper_event移至stepper_ctrl_event:STEPPER_EVENT_STEPS_COMPLETED重命名为STEPPER_CTRL_EVENT_STEPS_COMPLETED。STEPPER_EVENT_LEFT_END_STOP_DETECTED重命名为STEPPER_CTRL_EVENT_LEFT_END_STOP_DETECTED。STEPPER_EVENT_RIGHT_END_STOP_DETECTED重命名为STEPPER_CTRL_EVENT_RIGHT_END_STOP_DETECTED。STEPPER_EVENT_STOPPED重命名为STEPPER_CTRL_EVENT_STOPPED。
step-gpios、dir-gpios、invert-direction和counter属性已从所有 step-dir 步进电机硬件驱动设备的绑定中移除(adi,tmc2209、ti,drv84xx和allegro,a4979),并移至新的通用步进电机运动控制器绑定zephyr,gpio-step-dir-stepper-ctrl。现在必须通过
zephyr,gpio-step-dir-stepper-ctrl设备执行运动控制,该设备通过stepper-driver属性引用步进电机硬件驱动设备树节点。应用必须更新其设备树,添加运动控制器节点并使用stepper_ctrl_*API,而不再直接在步进电机硬件驱动设备上调用运动控制函数。H 桥步进电机控制器中已移除步进电机硬件驱动专用 API:
zephyr,h-bridge-stepper已重命名为zephyr,h-bridge-stepper-ctrl,以反映它是步进电机运动控制器绑定,而不是步进电机硬件驱动绑定。stepper_enable()、stepper_disable()、stepper_set_micro_step_res()和stepper_get_micro_step_res()API 函数不再适用于zephyr,h-bridge-stepper-ctrlcompatible 设备。en-gpios属性已从zephyr,h-bridge-stepper-ctrl中移除。在
zephyr,h-bridge-stepper-ctrl中,micro-step-res属性已被lut-step-gap取代,以更好地反映 H 桥控制机制,该机制使用查找表插值而非硬件微步进。
使用 H 桥步进电机控制器的应用必须:
移除在 H 桥控制器设备上对步进电机硬件驱动专用 API 的调用
更新设备树,使用
lut-step-gap而不是micro-step-res删除
en-gpios属性(如果存在)
adi,tmc50xx和adi,tmc51xx设备现在建模为 MFD。移除了用于生成
CONFIG_STEPPER_*_GENERATE_ISR_SAFE_EVENTS和CONFIG_STEPPER_*_EVENT_QUEUE_LEN符号的 Kconfig.stepper_event_template 模板CONFIG_STEPPER_STEP_DIR_GENERATE_ISR_SAFE_EVENTS已被CONFIG_STEPPER_CTRL_ISR_SAFE_EVENTS取代CONFIG_STEPPER_STEP_DIR_EVENT_QUEUE_LEN已被CONFIG_STEPPER_CTRL_EVENT_QUEUE_LEN取代
看门狗
CONFIG_WDT_DISABLE_AT_BOOT的语义已明确:CONFIG_WDT_DISABLE_AT_BOOT=n时的预期行为此前不明确,且各驱动的实现不一致,现已在CONFIG_WDT_DISABLE_AT_BOOT的说明中明确记录(详情请参阅该说明)。所有树内看门狗驱动都已更新,以遵循现在已记录的语义。
值得注意的是,
CONFIG_WDT_DISABLE_AT_BOOT=n不能再用于在启动时 “自动” 启用看门狗。依赖此行为的用户必须更新其应用以显式配置看门狗,如 Watchdog 中所示。以下与此错误用法相关的 Kconfig 选项已被移除:CONFIG_IWDG_STM32_INITIAL_TIMEOUTCONFIG_WDT_RPI_PICO_INITIAL_TIMEOUTCONFIG_WDT_CC13XX_CC26XX_INITIAL_TIMEOUTCONFIG_WDT_CC23X0_INITIAL_TIMEOUTCONFIG_WDT_CC32XX_INITIAL_TIMEOUT
更新了
microchip,xec-watchdog的 PCR 和 GIRQ 属性,使其使用新的宏(GitHub #105668)。
视频
CONFIG_VIDEO_HIMAX_HM01B0已重命名为CONFIG_VIDEO_HM01B0。CONFIG_VIDEO_OV7670现已移除,由CONFIG_VIDEO_OV767X取代。这样可以同时支持 OV7670 和 0V7675。CONFIG_VIDEO_BUFFER_POOL_SZ_MAX已由CONFIG_VIDEO_BUFFER_POOL_HEAP_SIZE取代,后者表示分配给整个视频缓冲区池的大小(以字节为单位)。ovti,ov2640的复位引脚处理已修正,导致有效电平与之前相反,以匹配传感器期望的有效电平。为与数据保持一致,以下像素格式已重命名(GitHub #105522):
VIDEO_PIX_FMT_RGBA32(保持不变)VIDEO_PIX_FMT_ABGR32(保持不变)VIDEO_PIX_FMT_XRGB32(保持不变)VIDEO_PIX_FMT_XBGR32(新增)VIDEO_PIX_FMT_BGRX32(新增)VIDEO_PIX_FMT_RGBX32(新增)
计数器
实现
get_value_64API 的驱动现在需要选择CONFIG_COUNTER_SUPPORTS_64BITS_TICKS,应用则需要CONFIG_COUNTER_64BITS_TICKS才能启用该 API。(GitHub #94189)。NXP LPTMR 驱动(
nxp,lptmr)已更新,以修正分频器和毛刺滤波器配置错误:prescale-glitch-filter属性的有效范围从[0-16]改为[0-15]。值16在脉冲计数模式下无效,已被移除。使用值16的设备树必须更新为使用[0-15]范围内的值。新增了一个布尔属性
prescale-glitch-filter-bypass,用于显式控制分频器/毛刺滤波器旁路。此前,设置prescale-glitch-filter = <0>会隐式启用旁路模式,含义不明确。在 v4.4 及更高版本中,旁路仅由是否存在
prescale-glitch-filter-bypass控制。如果该属性不存在,则分频器/毛刺滤波器处于活动状态,并应用prescale-glitch-filter。分频器/毛刺滤波器的行为已明确如下:
定时器计数模式:分频器将时钟除以
2^(prescale-glitch-filter + 1)脉冲计数模式:毛刺滤波器在
2^prescale-glitch-filter个上升沿后识别到变化(毛刺滤波不支持值 0)
所有树内设备树节点均已更新为使用
prescale-glitch-filter-bypass;而不是prescale-glitch-filter = <0>;。树外开发板也应相应更新。如果同时设置了
prescale-glitch-filter-bypass和prescale-glitch-filter,则旁路模式优先,prescale-glitch-filter的值将被忽略。
迁移示例:
/* Old (deprecated) */ lptmr0: counter@40040000 { compatible = "nxp,lptmr"; /* Implicitly bypassed */ prescale-glitch-filter = <0>; }; /* New (correct) */ lptmr0: counter@40040000 { compatible = "nxp,lptmr"; /* Explicitly bypassed */ prescale-glitch-filter-bypass; };
Examples of using
prescale-glitch-filter备注
prescale-glitch-filter-bypass是一个布尔值。如果存在,则启用旁路;如果不存在,则禁用旁路并应用prescale-glitch-filter。在脉冲计数模式下,
prescale-glitch-filter = <0>不是受支持的毛刺滤波器配置。若要不进行滤波,请使用prescale-glitch-filter-bypass;。定时器计数模式:对计数器时钟进行分频
在定时器计数模式下,分频器除以
2^(N + 1)。/* Divide by 2^(0+1) = 2 */ lptmr0: counter@40040000 { compatible = "nxp,lptmr"; /* Time Counter mode */ timer-mode-sel = <0>; clk-source = <1>; clock-frequency = <32768>; /* /2 */ prescale-glitch-filter = <0>; resolution = <16>; }; /* Divide by 2^(3+1) = 16 */ lptmr1: counter@40041000 { compatible = "nxp,lptmr"; /* Time Counter mode */ timer-mode-sel = <0>; clk-source = <1>; clock-frequency = <32768>; /* /16 */ prescale-glitch-filter = <3>; resolution = <16>; };
定时器计数模式:显式旁路(不分频)
lptmr0: counter@40040000 { compatible = "nxp,lptmr"; /* Time Counter mode */ timer-mode-sel = <0>; clk-source = <1>; clock-frequency = <32768>; /* no prescaler */ prescale-glitch-filter-bypass; resolution = <16>; };
脉冲计数模式:毛刺滤波
在脉冲计数模式下,毛刺滤波器在
2^N个上升沿后识别到变化。毛刺滤波不支持值0;如果不想进行滤波,请使用旁路。/* Recognize change after 2^2 = 4 rising edges */ lptmr0: counter@40040000 { compatible = "nxp,lptmr"; /* Pulse Counter mode */ timer-mode-sel = <1>; clk-source = <1>; input-pin = <0>; prescale-glitch-filter = <2>; resolution = <16>; }; /* No filtering (explicit bypass) */ lptmr1: counter@40041000 { compatible = "nxp,lptmr"; /* Pulse Counter mode */ timer-mode-sel = <1>; clk-source = <1>; input-pin = <0>; prescale-glitch-filter-bypass; resolution = <16>; };
NXP i.MX GPT 计数器驱动(
nxp,imx-gpt)现在默认使用run-mode = "restart",而不是此前硬编码的自由运行行为。此前行为 (Zephyr ≤ 4.3):GPT 计数器始终以自由运行模式运行(
enableFreeRun = true)。计数器在比较事件时不会复位,而是持续计数。新行为 (Zephyr ≥ 4.4):除非显式配置,否则 GPT 计数器默认使用 restart 模式。新增的
run-mode设备树属性控制该行为:"restart"(默认):计数器达到比较通道 1 的值时复位为 0"free-run":计数器持续计数而不复位(此前行为)
需要迁移:使用 GPT 计数器的树外开发板和应用必须在其设备树节点中添加
run-mode = "free-run";,以保留此前行为。/* Out-of-tree boards: add this to preserve previous behavior */ gpt2: gpt@400f0000 { compatible = "nxp,imx-gpt"; /* Explicitly restore Zephyr ≤4.3 behavior */ run-mode = "free-run"; /* ... other properties ... */ };
警告
该驱动使用比较通道 1 实现 Zephyr 计数器闹钟功能。使用
run-mode = "restart"时,设置闹钟会导致计数器在闹钟比较点复位。如果您的应用依赖闹钟和连续计数,则必须使用run-mode = "free-run"。备注
此更改统一了 NXP 计数器驱动的运行模式配置。GPT 现在使用显式的设备树属性而非硬编码值,从而允许按实例进行自定义。
设备树
Devicetree bindings 不再允许为
status以及#address-cells、#size-cells属性指定任何默认值。这些属性的语义在 Devicetree Specification 第 2.3.4 节和 Specification 第 2.3.5 节中定义,用户不应尝试用自己的默认值覆盖它们。以下绑定语法现在会导致构建错误:
properties: "status": default: ... <---- any default is a build error "#address-cells": default: ... <---- any default is a build error "#size-cells": default: ... <---- any default is a build error
如果您此前依赖绑定中的默认值,现在必须在设备树源文件中显式指定这些值,以修复这些构建错误。
设备树 compatible
ilitek,ili9806e-dsi已重命名。请改用ilitek,ili9806e。
输入
CST816S 输入驱动已泛化,以支持 CST8xx 系列。驱动和 Kconfig 文件已重命名(GitHub #105348)
input_cst816s.c→input_cst8xx.cKconfig.cst816s→Kconfig.cst8xx
相应的设备树 compatible 已更新:
hynitron,cst816s→hynitron,cst8xx
相应的 Kconfig 也已更新:
CONFIG_INPUT_CST816S→ :kconfig:option:` CONFIG_INPUT_CST8XX`CONFIG_INPUT_CST816S_PERIOD→ :kconfig:option:` CONFIG_INPUT_CST8XX_PERIOD`CONFIG_INPUT_CST816S_INTERRUPT→ :kconfig:option:` CONFIG_INPUT_CST8XX_INTERRUPT`CONFIG_INPUT_CST816S_EV_DEVICE→ :kconfig:option:` CONFIG_INPUT_CST8XX_EV_DEVICE`
dt-binding 宏前缀也已从
CST816S_*更新为CST8XX_*。
键盘矩阵
通用的键盘矩阵设备树绑定已更新,轮询周期属性改用微秒而不是毫秒。
以下属性已重命名,其单位也已更改:
poll-period-ms->poll-period-usstable-poll-period-ms->stable-poll-period-us
使用这些属性的应用必须:
将旧属性名替换为新属性名,并且
将值从毫秒转换为微秒。例如,原先表示 10 ms 的值
10现在必须写为10000,表示 10,000 µs。
蓝牙
蓝牙主机
CONFIG_BT_SIGNING已弃用。BT_GATT_CHRC_AUTH已弃用。bt_conn_le_info.interval已弃用。请改用bt_conn_le_info.interval_us。注意单位已更改:interval的单位为 1.25 毫秒,而interval_us的单位为微秒。从蓝牙核心规范 v6.2 起,使用 passkey 输入方法的旧版蓝牙 LE 配对不再提供认证(MITM)保护。使用该方法生成的已存储绑定在从持久化存储加载时将被降级为未认证,从而导致安全级别降低。
蓝牙主机不再依赖
k_poll(),因此不再选择CONFIG_POLL。如果应用代码本身依赖它,则需要在配置中显式启用CONFIG_POLL。将任何
CONFIG_DEVICE_NAME_GATT_WRITABLE_NONE的使用替换为CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_NONE。将任何
CONFIG_DEVICE_NAME_GATT_WRITABLE_ENCRYPT的使用替换为CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_ENCRYPT。将任何
CONFIG_DEVICE_NAME_GATT_WRITABLE_AUTHEN的使用替换为CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_AUTHEN。将任何
CONFIG_DEVICE_APPEARANCE_GATT_WRITABLE_AUTHEN的使用替换为CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE_AUTHEN。bt_iso_chan中的required_sec_level字段已被移除。需要为 CIS 连接设置安全性的应用应在调用bt_iso_chan_connect()之前,对 ACL 连接调用bt_conn_set_security()。bt_iso_server中的sec_level字段已被移除。
蓝牙音频
bt_bap_broadcast_assistant_discover()现在不再在过程结束时读取远程 BASS 接收状态。用户必须在执行任何操作之前,自行调用bt_bap_broadcast_assistant_read_recv_state()读取现有的接收状态(如果有)。(GitHub #91587)CONFIG_BT_AUDIO现在依赖CONFIG_UTF8。启用CONFIG_BT_AUDIO的应用也必须启用CONFIG_UTF8。(GitHub #102350)bt_tbs_set_uri_scheme_list()现在只接受单个字符串值,而不是 URI 的列表/数组。应用需要将当前输入(例如{"tel", "skype"})修改为"tel,skype"。(GitHub #102724)CONFIG_BT_TBS_SUPPORTED_FEATURES已被移除。应用应使用已定义的宏BT_TBS_FEATURE_HOLD和BT_TBS_FEATURE_JOIN来设置其支持的特性。(GitHub #102666)bt_bap_unicast_server_foreach_ep()和bt_has_preset_foreach()现在可能在迭代提前停止或传入无效参数时返回错误。(GitHub #105462)bt_bap_unicast_server_foreach_ep()、bt_bap_unicast_group_foreach_stream()、bt_bap_broadcast_source_foreach_stream()、bt_cap_unicast_group_foreach_stream()、bt_cap_initiator_broadcast_foreach_stream()和bt_has_preset_foreach()的回调现在返回true表示继续迭代,返回false表示停止迭代。这些函数的所有回调都需要更新,以反映新的返回类型和返回值。(GitHub #105462)
蓝牙 Mesh
CONFIG_BT_MESH_MODEL_VND_MSG_CID_FORCE已弃用。启用它不再对消息处理性能产生任何影响。
蓝牙 HCI
网络
Wi-Fi
wifi_channel_info新增了用于设置信道的band字段。对于 2.4 GHz(信道 1–14)和 5 GHz(36–165),行为保持向后兼容:省略band或将其保留为WIFI_FREQ_BAND_UNKNOWN,驱动会推断频段。对于 6 GHz,请将band设置为WIFI_FREQ_BAND_6_GHZ(信道号与 2.4 GHz 的 1–14 重叠)。调用 net_mgmt 时请重新编译,以确保sizeof(struct wifi_channel_info)正确。WPA3 通过选择项
WIFI_NM_WPA_SUPPLICANT_WPA3_IMPLEMENTATION(Internal、External 或 None)进行配置。请将prj.conf中的任何CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3=y行替换为CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3_IMPLEMENTATION_INT=y(或按需使用_EXT/_NONE)。CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3现在没有提示符,仅在选择 Internal 时被选中;请勿直接赋值。在 C 代码中,建议使用CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3_COMMON来检测内部或外部 WPA3。网络 API 位于
以及
subsys/net中的相关代码等都已命名空间化。这意味着网络 API 名称会加上net_、NET_或ZSOCK_前缀。这样做是为了避免与 POSIX 或 libc 中可能定义同名符号而产生循环依赖。已创建兼容性头文件 include/zephyr/net/net_compat.h,提供旧符号,允许用户继续使用旧符号。外部网络应用可以继续使用 POSIX 定义的网络符号,并包含sys/socket.h等相关 POSIX 头文件来获取 POSIX 符号,因为 Zephyr 网络头文件将不再包含它们。如果应用或 Zephyr 内部代码无法使用 POSIX API,则需要在调用网络 API 的代码中加上相应的网络 API 前缀。net_icmp_handler_t的返回类型已从int改为net_verdict。(GitHub #104815)HTTP 服务器事务状态的枚举已从
http_data_status重命名为http_transaction_status,以更好地反映其用途。枚举值也已重命名如下:HTTP_SERVER_DATA_ABORTED→HTTP_SERVER_TRANSACTION_ABORTEDHTTP_SERVER_DATA_MORE→HTTP_SERVER_REQUEST_DATA_MOREHTTP_SERVER_DATA_FINAL→HTTP_SERVER_REQUEST_DATA_FINAL
动态资源的处理程序回调类型也已相应更新为使用新枚举及其重命名后的值。使用动态 HTTP 资源的应用必须更新其处理程序回调,以使用新枚举并处理重命名后的值。
HTTP 服务器现在会在响应完整发送给客户端后,为动态资源报告
HTTP_SERVER_TRANSACTION_COMPLETE状态。应用现在还应在其处理程序回调中处理该状态,以便在响应成功发送后正确重置资源状态。创建安全套接字时传递给
zsock_socket()的协议版本现在被强制要求用作 TLS 会话的最低 TLS 版本。已从
NET_SOCKETS_SOCKOPT_TLS中移除加密 Kconfig 的自动选择,因为它们很大程度上取决于最终应用的需求。因此,必须显式选择所需的 TLS 协议版本和密码套件。可使用CONFIG_MBEDTLS_CIPHERSUITE_TLS_.*Kconfig 辅助选项自动启用给定密码套件的所有依赖项,并可按需按照相同模式添加更多。
CoAP
CoAP
.well-known/core响应的资源相关元数据现在使用专用的coap_resource.metadata指针配置,而不再使用coap_resource.user_data,后者应保留供应用独占使用。实现 CoAP.well-known/core处理的应用应更新为使用新指针。COAP_RESPONSE_CODE_OK2.00 响应码定义已被移除,因为它不是有效的响应码——它未在 RFC 7252 中定义,也未在 IANA 注册表(https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#response-codes)中分配。
调制解调器
Modem HL78XX
与 HL78XX 启动时序相关的 Kconfig 选项已如下重命名为
CONFIG_MODEM_HL78XX_DEV_*:MODEM_HL78XX_DEV_POWER_PULSE_DURATION→MODEM_HL78XX_DEV_POWER_PULSE_DURATION_MSMODEM_HL78XX_DEV_RESET_PULSE_DURATION→MODEM_HL78XX_DEV_RESET_PULSE_DURATION_MSMODEM_HL78XX_DEV_STARTUP_TIME→MODEM_HL78XX_DEV_STARTUP_TIME_MSMODEM_HL78XX_DEV_SHUTDOWN_TIME→MODEM_HL78XX_DEV_SHUTDOWN_TIME_MS
默认启动时序已从 1000 ms 改为 120 ms,以提高所有受支持开发板的初始化可靠性。
依赖此前默认值的应用必须更新其配置。
LoRaWAN
LoRaWAN 区域的 Kconfig 符号已从
LORAMAC_REGION_*重命名为LORAWAN_REGION_*,以使其与后端无关。使用以下任何符号的应用必须更新其配置文件:CONFIG_LORAMAC_REGION_AS923→CONFIG_LORAWAN_REGION_AS923CONFIG_LORAMAC_REGION_AU915→CONFIG_LORAWAN_REGION_AU915CONFIG_LORAMAC_REGION_CN470→CONFIG_LORAWAN_REGION_CN470CONFIG_LORAMAC_REGION_CN779→CONFIG_LORAWAN_REGION_CN779CONFIG_LORAMAC_REGION_EU433→CONFIG_LORAWAN_REGION_EU433CONFIG_LORAMAC_REGION_EU868→CONFIG_LORAWAN_REGION_EU868CONFIG_LORAMAC_REGION_KR920→CONFIG_LORAWAN_REGION_KR920CONFIG_LORAMAC_REGION_IN865→CONFIG_LORAWAN_REGION_IN865CONFIG_LORAMAC_REGION_US915→CONFIG_LORAWAN_REGION_US915CONFIG_LORAMAC_REGION_RU864→CONFIG_LORAWAN_REGION_RU864
其他子系统
CFB
改用有符号值表示坐标。因此,
cfb_print()、cfb_invert_area()和cfb_position的定义有所变化。DAP 子系统的初始化和配置已更改。请参阅 CMSIS-DAP 示例,了解如何使用 USB 后端初始化 Zephyr DAP Link。
缓存
请使用
CONFIG_CACHE_HAS_MIRRORED_MEMORY_REGIONS而不是CONFIG_CACHE_DOUBLEMAP,因为前者更能描述该特性。
Flash
此前已弃用的
CONFIG_FLASH_AREA_CHECK_INTEGRITY_MBEDTLS现已移除。CONFIG_FLASH_AREA_CHECK_INTEGRITY_PSA也已被移除,因为现在加密库后端已没有其他选择。flash shell 命令
flash erase和flash write现在需要显式指定设备参数。这可以避免意外损坏设备的程序闪存。
闪存映射
以下 include/zephyr/storage/flash_map.h 宏已弃用并被替换:
已弃用宏
替代宏
这些新宏还增加了对
zephyr,mapped-partition绑定的支持。
JWT
此前已弃用的
CONFIG_JWT_SIGN_RSA_LEGACY已被移除。此次移除早于通常的两个版本弃用期,因为已达成共识(参见 GitHub #97660):Mbed TLS 属于外部模块,因此常规弃用规则在此情况下不适用。
Libsbc
Libsbc(sbc.c 和 sbc.h)已移至蓝牙子系统下。sbc.h 现在位于 include/zephyr/bluetooth 中。
管理
hawkBit
已弃用的 Kconfig 选项
CONFIG_HAWKBIT_DDI_NO_SECURITY已被移除。(GitHub #105150)
MCUmgr
如果使用
CONFIG_MCUMGR_TRANSPORT_UART,则现在还必须选择CONFIG_UART_MCUMGR,该依赖已从select改为depends on。
随机数
CONFIG_CSPRNG_AVAILABLE已重命名为CONFIG_ENTROPY_NODE_ENABLED。
跟踪
CTF:CTF 元数据事件头中的 uint8_t id 已改为 uint16_t id。这使事件 ID 占用的空间翻倍,但可支持 65,535 个事件,而不是 255 个。
此更改后,现有使用 8 位 ID 的 CTF 跟踪将不再兼容。
串行接口
pl011 UART 驱动:从
pl011_poll_in()中移除读取状态寄存器(RSR)错误处理。RSR 处理已在pl011_err_check()中实现,该函数是检测并报告接收错误状况的合适位置。(GitHub #101715)
Settings
CONFIG_SETTINGS_TFM_ITS已重命名为CONFIG_SETTINGS_TFM_PSA。
模块
HostAP
Kconfig 选项
CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_MBEDTLS_PSA现在默认启用。
Mbed TLS
Mbed TLS 已升级到 4.1.0 版本。此后,本仓库将只包含 TLS 和 X.509,加密支持已移至 TF-PSA-Crypto。后者新增了一个 west 模块,基于上游 1.1.0 版本。TF-M 仍继续使用 Mbed TLS 3.6.5 构建。此更改在加密方面带来了许多变化,因此强烈建议参阅官方 Mbed TLS 3.x to TF-PSA-Crypto 1.x migration guide。
CONFIG_MBEDTLS_ENTROPY_POLL_ZEPHYR已重命名为CONFIG_MBEDTLS_PSA_DRIVER_GET_ENTROPY。CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT已由其此前启用的底层选项取代:CONFIG_MBEDTLS_PEM_PARSE_C、CONFIG_MBEDTLS_PEM_WRITE_C和CONFIG_MBEDTLS_BASE64_C。CONFIG_MBEDTLS_SERVER_NAME_INDICATION已重命名为CONFIG_MBEDTLS_SSL_SERVER_NAME_INDICATION。CONFIG_MBEDTLS_TEST已重命名为CONFIG_MBEDTLS_DEBUG_C。以下与 PSA 相关的 Kconfig 符号已被移除,因为 TF-PSA-Crypto 不再支持它们:
CONFIG_PSA_WANT_KEY_TYPE_DESCONFIG_PSA_WANT_ECC_SECP_R1_192CONFIG_PSA_WANT_ECC_SECP_K1_192CONFIG_PSA_WANT_ECC_SECP_R1_224
以下 Mbed TLS Kconfig 符号已被移除:
CONFIG_CUSTOM_MBEDTLS_CFG_FILECONFIG_MBEDTLS_CHACHAPOLY_AEAD_ENABLEDCONFIG_MBEDTLS_CIPHER_AES_ENABLEDCONFIG_MBEDTLS_CIPHER_CAMELLIA_ENABLEDCONFIG_MBEDTLS_CIPHER_CCM_ENABLEDCONFIG_MBEDTLS_CIPHER_CHACHA20_ENABLEDCONFIG_MBEDTLS_CIPHER_DES_ENABLEDCONFIG_MBEDTLS_CIPHER_GCM_ENABLEDCONFIG_MBEDTLS_CIPHER_MODE_CBC_ENABLEDCONFIG_MBEDTLS_CIPHER_MODE_CTR_ENABLEDCONFIG_MBEDTLS_CIPHER_MODE_XTS_ENABLEDCONFIG_MBEDTLS_CMACCONFIG_MBEDTLS_DHM_CCONFIG_MBEDTLS_ECDH_CCONFIG_MBEDTLS_ECDSA_CCONFIG_MBEDTLS_ECDSA_DETERMINISTICCONFIG_MBEDTLS_ECJPAKE_CCONFIG_MBEDTLS_ECP_ALL_ENABLEDCONFIG_MBEDTLS_ECP_CCONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLEDCONFIG_MBEDTLS_ECP_DP_CURVE448_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLEDCONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLEDCONFIG_MBEDTLS_GENPRIME_ENABLEDCONFIG_MBEDTLS_HKDF_CCONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLEDCONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLEDCONFIG_MBEDTLS_KEY_EXCHANGE_RSA_ENABLEDCONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLEDCONFIG_MBEDTLS_MD5CONFIG_MBEDTLS_PKCS1_V15CONFIG_MBEDTLS_PKCS1_V21CONFIG_MBEDTLS_POLY1305CONFIG_MBEDTLS_RSA_CCONFIG_MBEDTLS_SHA1CONFIG_MBEDTLS_SHA224CONFIG_MBEDTLS_SHA256CONFIG_MBEDTLS_SHA384CONFIG_MBEDTLS_SHA512CONFIG_MBEDTLS_USE_PSA_CRYPTO
OpenThread
以下 Kconfig 选项已重命名:
CONFIG_OPENTHREAD_MBEDTLS_CHOICE重命名为CONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIGCONFIG_CUSTOM_OPENTHREAD_SECURITY重命名为CONFIG_OPENTHREAD_SECURITY_CUSTOM_CONFIG
CONFIG_OPENTHREAD_CRYPTO_PSA不再依赖CONFIG_PSA_CRYPTO_CLIENT,而是选择CONFIG_PSA_CRYPTO。在不使用 TF-M 的构建中,如果设置了
CONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIG和CONFIG_OPENTHREAD_CRYPTO_PSA,则现在会自动隐含CONFIG_SECURE_STORAGE。这保证了 PSA ITS 实现可用,并且需要为安全存储配置后端(Settings、ZMS 或自定义后端)。CONFIG_OPENTHREAD_CRYPTO_PSA现在默认启用。随着 Mbed TLS 升级到 4.1.0 版本,Zephyr 中不再提供旧版加密支持。因此
CONFIG_OPENTHREAD_CRYPTO_LEGACY_MBEDTLS_CONFIG已被移除。CONFIG_OPENTHREAD_CRYPTO_PSA_CONFIG此前已是加密支持的默认选择,现在则是唯一受支持的加密选项。
Trusted Firmware-M
SECURE_UART1TF-M 定义现在由 Zephyr 的CONFIG_TFM_SECURE_UART控制。该选项将覆盖此前在 TF-M 仓库中指定的任何平台值。
架构
将
CONFIG_ARCH_HAS_COHERENCE重命名为CONFIG_CACHE_CAN_SAY_MEM_COHERENCE,因为该特性与缓存相关,所以将其移至缓存下。请使用
sys_cache_is_mem_coherent()而不是arch_mem_coherent()。
CONFIG_RISCV现在要求设备树中存在riscv。riscv的riscv,isa-base和riscv,isa-extensions设备树属性现在用于设置基础整数指令集和 RISC-V 扩展。它们不再由 SoC 设置。设备树属性riscv,isa已弃用,取而代之的是这两个新属性。(GitHub #97540)CONFIG_SOC_CV64A6_IMAFDC和CONFIG_SOC_CV64A6_IMAC现在合并为CONFIG_SOC_CV64A6,因为 RISC-V 扩展现在由设备树设置。CONFIG_SOC_SERIES_AE350的以下选项已被移除,因为它们现在可以通过设备树设置:CONFIG_RV32I_CPUCONFIG_RV32E_CPUCONFIG_RV64I_CPUCONFIG_NO_FPUCONFIG_SINGLE_PRECISION_FPUCONFIG_DOUBLE_PRECISION_FPU