Zephyr V3.7.0-LTS3 正式发布

Zephyr v3.7.0 在 2024.7.26 按计划正式发布。v3.7.0是Zephyr项目的重要里程碑,该版本是下Zephyr下一个长期支持 (LTS) 版本,也是Zephyr第三个LTS版本。

以下数字显示了Zephyr吸引新用户和贡献者的能力:

  • 此版本就有超过 650 位贡献者向 Zephyr 主仓库做出了贡献(新功能、错误修复、文档……)。
  • 其中超过 35%(230 人)是首次贡献者。比 3.6 增加了 20%。
  • 从Zephyr 3.6 到 3.7,超过 7370 次提交,平均每小时合并 3 次提交!

Zephyr 通常每 4 个月发布一次,然而嵌入式软硬件产品的开发和维护周期通常都 4 个月更长的时间。基于Zephyr迭代进化的非常快速的现实,要从一个 Zephyr 版本切换到另一个版本,将处理很多问题:API 可能会发生变化,仍在使用的已弃用功能可能会被删除。这些问题将直接影响下游产品的开发,为解决该问题,Zephyr 社区每 2.5 年发布一次长期支持 (LTS) 版本。LTS中影响发布的重大错误或安全漏洞都将得到修复,这使得用户有信心使用LTS构建产品。

Zerphy v3.7.0的发布信息:

本次发布和上一次一样带有视频https://youtu.be/KbMaX69O1_0,视频说明 v3.7.0 版本的重大变化内容,并演示新增的重要功能。通过该视频可以很直观的看到v3.7.0的功能变化。

官方 Release 博客说明了 v3.7.0 的重大修改,Release note 可以找到细节,视频可以快速了解新导入技术的使用,本文一二级标题列出主要更新内容,正文文字列出个人关注的内容。

主要增加/改变的功能 链接到标题

  • 导入新的硬件模型Hwv2
  • 导入新的http server库
  • 扩展了Posix支持
  • 扩展了蓝牙Host的音视频部分
  • 传感器模型修改,支持更多类型的传感器和数据流
  • 增加EDK,用于制作LLEXT
  • Native simulator支持直接使用主机网络
  • 集成TF-M 2.1.0和Mbed TLS 3.6.0
  • PSA Crypto 替代 TinyCrypt
  • 支持PTP、IEEE 1588
  • 增加文档说明如何基于VSCode和CLion开发Zephyr

内容摘要 链接到标题

修补漏洞 链接到标题

CVE-2024-3077 https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-gmfv-4vfh-2mh8 CVE-2024-3332 https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-jmr9-xw2v-5vf4 CVE-2024-4785: 解禁日期2024-08-07 CVE-2024-5754: 解禁日期2024-09-04 CVE-2024-5931: 解禁日期2024-09-10 CVE-2024-6135: 解禁日期2024-09-11 CVE-2024-6137: 解禁日期2024-09-11 CVE-2024-6258: 解禁日期2024-09-05 CVE-2024-6259: 解禁日期2024-09-12 CVE-2024-6442: 解禁日期2024-09-22 CVE-2024-6443: 解禁日期2024-09-22 CVE-2024-6444: 解禁日期2024-09-22

API变化 链接到标题

删除:

  • pcie_probepcie_bdf_lookup
  • CONFIG_EMUL_EEPROM_AT2X
  • pm_device_state_lockpm_device_state_is_lockedpm_device_state_unlock
  • zephyr_smp_rx_reqzephyr_smp_alloc_rspzephyr_smp_free_buf

标记弃用:

  • 蓝牙
    • BT_LE_ADV_OPT_USE_NAME
    • BT_LE_ADV_OPT_FORCE_NAME_IN_AD
    • BT_LE_ADV_CONN_NAME
    • BT_LE_ADV_CONN_NAME_AD
    • BT_LE_ADV_NCONN_NAME
    • BT_LE_EXT_ADV_CONN_NAME
    • BT_LE_EXT_ADV_SCAN_NAME
    • BT_LE_EXT_ADV_NCONN_NAME
    • BT_LE_EXT_ADV_CODED_NCONN_NAME
  • CAN
    • can_get_min_bitratecan_get_max_bitrate 替代为can_get_bitrate_mincan_get_bitrate_max
    • CAN_MAX_STD_IDCAN_MAX_EXT_ID 替代为 CAN_STD_ID_MASKCAN_EXT_ID_MASK
  • PM
    • CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE
  • POSIX, 存在大量弃用,参考https://docs.zephyrproject.org/3.7.0/releases/migration-guide-3.7.html#zephyr-3-7-posix-api-migration
  • SPI
    • spi_is_ready
    • spi_transceive_async
    • spi_read_async
    • spi_write_async

架构 链接到标题

  • 增加ARC MWDT 工具链支持
  • ARC增加针对多核的硬件内存屏障 API
  • 增加Cortex-M85 内核支持
  • ARM64通过CONFIG_SYMTAB允许backtrace显示符号
  • 增加Cortex-R82 compiler tuning
  • RISC-V fatal信息包含callee-saved-registers状态
  • RISC-V支持stack unwinding,可带符号
  • Xtensa支持save/restore HiFi AudioEngine 寄存器
  • Xtensa支持MPU
  • Xtensa支持自动生成中断程序,构建时生生中断向量表

内核 链接到标题

  • 增加 k_uptime_seconds 等同k_uptime_get() / 1000
  • 增加 k_realloc
  • 通过CONFIG_DEVICE_DT_METADATA来配置保存Devicetree元数据
  • Devicetree使用zephyr,deferred-init来支持设备延迟初始化
  • 使用 K_THREAD_STACK_LEN 声明静态线程堆栈
  • 修复k_thread_abortk_thread_join在SMP系统ISR竞争情况下可能导致的死锁
  • 修复 CONFIG_SCHED_SCALABLECONFIG_SCHED_DEADLINE 一起使用时会损坏调度队列的错误

蓝牙 链接到标题

涉及蓝牙音频,Host, HCI Driver.

  • 引入了对 NUS(Nordic UART 服务)的支持,可以将蓝牙作为Zephyr的console
  • 完全重新设计的 HCI Driver界面

开发板和 SOC 链接到标题

增加的SOC:

  • Ambiq Apollo3 Blue 和 Apollo3 Blue Plus SoC 系列
  • Synopsys ARC-V RMX1xx 仿真平台
  • STM32H7R/S SoC 系列
  • NXP mke15z7、mke17z7、mke17z9、MCXNx4x、RW61x
  • Analog Devices MAX32 SoC 系列
  • Infineon Technologies AIROC™ CYW20829 蓝牙 LE SoC 系列
  • MediaTek MT8195 音频 DSP
  • Nuvoton Numaker M2L31X SoC 系列
  • Microchip PolarFire ICICLE 套件 SMP 变体
  • 瑞萨 RA8 系列

对一些SOC进行了修改,详情查看release note, 下面仅列出我关注的

  • STM32:在兼容系列上启用 ART 加速器、I-cache、D-cache 和预取
  • STM32H5:添加了对 Stop mode和 CONFIG_PM 的支持。
  • STM32WL:Sub-GHz SPI 频率从 12MHz 降低至 8MHz
  • STM32C0:添加了对 CONFIG_POWEROFF 的支持。
  • NXP s32k146:将 RTC 时钟源设置为内部振荡器
  • GD32F4XX:修复了错误的 uart4 irq 编号
  • Nordic nRF54L:增加了对 FLPR(快速轻量级处理器)RISC-V CPU 的支持
  • 从所有 ESP32 SoC 变体中删除了 idf-bootloader 依赖项
  • 添加了对 ESP32 SoC 变体的简单启动支持,允许使用单个二进制映像加载应用程序,而无需第二阶段引导加载程序。
  • 重新设计并优化了所有ESP32 SoC 内存映射
  • rp2040:专有 UART 驱动程序已停产并由 PL011 取代

增加31种主板,17种shield, 对部分主板进行了修改,详情查看release note.

构建系统和基础设施 链接到标题

  • 启用 CI 的黑盒测试
  • 引入了应用程序的 socs 文件夹,允许 Kconfig 片段和 devicetree 覆盖, 用于达到使用特定 SoC 和板限定符的目标
  • 添加了主板/SoC Flash配置设置,允许自定义在对板进行编程时使用的命令
  • 弃用全局 CSTD cmake 属性,使用 CONFIG_STD_C 选择 C ​​标准版本
  • 修复sysbuild有关问题
  • 添加 sysbuild 根支持
  • 修复修改overlay和Kconfig片段后CMake不重新构建的问题
  • 为 LinkServer 运行程序添加了对 Intel Hex 文件的闪存支持
  • 修复 armfvp 查找路径包含冒号分隔列表时的问题
  • 修复 version.cmake 字段大小未强制执行的问题
  • 针对丢失的 blob 的警告/错误消息
  • 对整个应用程序启用 LTO 的支持
  • 修复部分构建脚本问题
  • 增加 CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE 和CONFIG_OUTPUT_DISASSEMBLY_WITH_SOURCE
  • Twister 支持 –flash-before 参数,允许在打开串行端口之前刷新 DUT

驱动 链接到标题

涉及ADC,DAC, Battery,Battery backed up RAM,CAN,Charger,Clock control ,Counter,Disk,Display,DMA,DMIC,Entropy,EEPROM,eSPI,Ethernet,Flash,Fuel Gauge,GNSS,GPIO,Hardware info ,I2C,I2S,I3C,Input,LED,LED 灯带,LoRa,Mailbox,MDIO,MFD,Modem,PCIE,MIPI-DBI,MSPI,Pin control,PWM,Regulators,Reset,RTC,RTIO,SDHC,Sensors,Serial,SPI,USB,Video,Watchdog,Wi-Fi 详情查看release note, 下面仅列出我关注的

  • ADC 添加了对电压偏置的支持
  • 更新了 ESP32 ADC 驱动程序以与 hal_espressif 版本 5.1 配合
  • 添加了对 ESP32S3 和 ESP32C3 DMA 模式操作的支持
  • NXP LPADC 驱动程序中启用采集时间功能
  • 将 nxp,lpc-lpadc 绑定中的 phandle 类型 DT 属性 nxp,reference-supply 更改为 phandle 数组类型 DT 属性 nxp,references 。 NXP LPADC 驱动程序现在支持使用 nxp,references 传递参考电压值
  • 向 battery 绑定添加了 re-charge-voltage-microvolt 属性。这允许设置限制以自动再次开始充电
  • CAN 添加了主机通信测试套件
  • 重构 ESP32 时钟控制驱动以支持 ESP32-C6外部以太网网络接口已在 tests/net 测试中禁用动程序在运行时反转颜色的支持
  • 使用 inversion-off 属性在 ST7789V 驱动程序 ( sitronix,st7789v ) 中禁用反转模式。
  • 为 ILI9XXX 显示驱动程序添加了对 display_read() API 的支持
  • 添加了 NT35510 MIPI-DSI 显示控制器的驱动程序 ( frida,nt35510 )
  • EEPROM 添加了用于将 address-width 指定为 zephyr,i2c-target-eeprom 的属性
  • 重命名 eSPI 虚拟线路方向宏、枚举值和 Kconfig,以匹配 eSPI 1.5 规范中的新术语。
  • 允许在没有 zephyr L2 以太网层的情况下构建以太网驱动程序
  • 删除了以太网固定链路 DT 绑定
  • 从以太网驱动程序中删除了 VLAN 处理(由通用以太网 L2 代码处理)
  • 在 eth_mcux、eth_nxp_enet、eth_nxp_s32_gmac、eth_stm32 和 eth_nxp_s32_netc 驱动程序中实现/修改了硬件 MAC 地址过滤
  • 添加了对 esp32 以太网驱动程序的支持,以在运行时设置 MAC 地址
  • 向 w5500 以太网驱动程序添加了链路状态检测
  • 为 enc28j60 添加了 devicetree 属性以设置 RX 过滤器
  • 添加了对 SPI NOR 驱动程序 (spi_nor.c) 多实例的支持
  • 添加了对非擦除设备的初步支持
  • 添加了 GNSS 设备驱动程序 API 测试套件
  • 添加了对 u-blox UBX 协议的支持
  • 添加了 Broadcom 机顶盒 (brcmstb) SoC GPIO 驱动程序
  • 添加Ambiq Apollo3 的GPIO/Flash/I2C驱动支持
  • 扩展了 MCUX Flexcomm I2S驱动程序以支持其他通道和格式
  • 添加了I3C对查询总线和 CCC 命令的 shell 支持。
  • 添加了大量的Input驱动
  • 添加了 Reyax LoRa 模块的驱动程序
  • MIPI-DBI新增release API, 添加了对通过设备树选择模式的支持
  • 添加新的实验性 MSPI(多位 SPI)API,支持通常需要命令、地址和数据阶段以及可变传输延迟的高级 SPI 控制器和外设。该 API 现在以同步/异步方式支持从单线 SDR 到六线 DDR 通信
  • 在总线仿真器下添加了 MSPI 总线仿真器
  • 添加了 MSPI 闪存设备仿真器
  • 添加了 MSPI 异步传输和 JEDEC MSPI-NOR 闪存示例
  • 添加了 Raspberry Pi Pico RTC 驱动程序
  • 将无锁队列从 RTIO 移至 lib,将 rtio_ 前缀删除到 SPSC 和 MPSC 队列
  • 添加了 ESP32 SDHC 驱动程序
  • 添加了驱动程序以支持使用 NUS(Nordic UART 服务)通过蓝牙 LE 进行 UART
  • 添加 ESP32C6 SoC 的串口驱动
  • uart_mcux_lpuart,添加了对单线半双工通信的支持,添加了对反转 TX 和 RX 引脚信号的支持
  • 添加了对 ov7670 和 ov5640驱动
  • 在 ESP32 SoC 变体中添加了用于外部 32kHz 晶体的看门狗
  • 修复了 esp-at 的一些问题
  • esp-at 的UDP 套接字实现 bind() 和 recvfrom()
  • 修复了 ESP32 Wi-Fi 驱动程序内存泄漏

网络 链接到标题

涉及以下增加的内容和很多未列出细节修改以及 bug 修复

  • ARP
    • 支持gratuitous ARP
    • 改进了 ARP 调试日志
  • CoAP
    • 增加了 CoAP 重传的上限 ( CONFIG_COAP_MAX_RETRANSMIT )
    • 添加了新的 CoAP 客户端 coap_client_cancel_requests() API,允许取消活动观察。
  • Connection manager
    • 加了对新 net_mgmt 事件的支持,允许独立跟踪 IPv4 和 IPv6 连接
  • DHCPv4
    • 添加对封装的供应商特定选项的支持
    • NTP 服务器可用于设置系统时间
    • 设置系统日志服务器地址可配置
    • 重新实现 DHCPv4 客户端 RENEW/REBIND 逻辑以符合 RFC2131
    • 改进 DHCPv4 服务器中拒绝的地址管理,在配置的时间后可重复使用
    • 添加 CONFIG_NET_DHCPV4_SERVER_NAK_UNRECOGNIZED_REQUESTS ,允许覆盖 RFC 定义的行为以及来自无法识别的客户端的 NAK 请求。
  • DHCPv6
    • 添加 CONFIG_NET_DHCPV6_DUID_MAX_LEN ,配置支持的最大 DUID 长度
    • 添加 DHCPv6 的文档
  • DNS/mDNS/LLMNR: DNS/mDNS/LLMNR
    • 重新设计 LLMNR 和 mDNS 响应器以及 DNS 解析器以使用套接字和套接字服务 API
    • 添加 ANY 查询资源类型
    • 添加对 mDNS 的支持,可在运行时提供记录
    • 对缓存 DNS 记录的支持
  • gPTP/PTP: gPTP/PTP
    • 支持 IEEE 1588-2019 PTP
    • 支持 SO_TIMESTAMPING 套接字选项,获取套接字辅助数据中的时间戳信息
  • HTTP
    • 添加 HTTP/2 服务器库和示例应用程序,支持静态、动态和 Websocket 资源类型
    • 添加 HTTP shell 组件
    • 改进 HTTP 客户端错误报告
    • 添加在 HTTP 客户端发送响应时的 POLLOUT 监控
  • IPSP
    • 删除了 IPSP 支持
  • IPv4
    • 根据 RFC 5227 实施 IPv4 地址冲突检测
    • 新增 net_ipv4_is_private_addr()
    • IPv4 网络掩码为每个地址单独设置
  • IPv6
    • 根据 RFC 8981 实施 IPv6 隐私扩展
    • 新增 net_ipv6_is_private_addr()
    • 实现 IPv6 的可达性提示
    • 添加 CONFIG_NET_IPV6_MTU ,允许设置自定义 IPv6 MTU
    • 添加 CONFIG_NET_MCAST_ROUTE_MAX_IFACES ,允许为多播转发条目设置多个接口
    • 添加 CONFIG_NET_MCAST_ROUTE_MLD_REPORTS ,允许在 MLDv2 报告中报告多播路由
  • LwM2M
    • 现在可以使用不注册回调的资源进行块传输
    • 删除了已弃用的 API 函数和定义
  • MQTT
    • 添加对 MQTT TLS 后端的 ALPN 支持
    • 在 mqtt_client 上下文结构中添加了用户数据字段
  • Network Interface
    • 改进网络接口代码中的调试日志记录
    • 向 net_if_addr 结构添加引用计数器
    • 为 OpenThread 接口添加了唯一的默认名称
  • Sockets
    • 实现新的网络 POSIX API:if_nameindex(),inet_ntoa(),inet_addr()
    • 支持tracing socket API
    • 改进使用 DTLS 套接字时的 sendmsg() 支持
  • Syslog
    • 向 syslog 网络后端添加了结构化日志记录支持
    • syslog 网络后端支持 TCP
  • TCP
    • 弃用 CONFIG_NET_TCP_ACK_TIMEOUT
    • 改进了调试日志
    • 使用 SHA-256生成ISN
    • 改进了在不存在 PSH 标志的情况下的 ACK 回复逻辑,以减少冗余 ACK
  • Websocket
    • 添加新API websocket_register() websocket_unregister()
    • 使用zsock_* API实现Websocket
    • 添加对 Websocket 套接字的对象核心支持
    • 添加发送时的 POLLOUT 监控
  • Wi-Fi
    • 减少 5 GHz 频道列表的内存使用
    • 增加AP模式下通道有效性检查
    • 对连接调用中 BSSID 配置的支持
    • 支持WPA自动个人安全模式
    • 收集单播接收/发送的网络数据包统计信息
    • 支持配置 RTS 阈值
    • 支持配置AP参数
    • 支持配置 max_inactivity/inactivity_poll/max_num_sta BSS 参数

USB 链接到标题

新的USB Deice软件栈

  • 支持HID设备
  • 引入速度的配置并实现符合 USB2.0 规范的高速支持
  • 添加通知支持和初始 BOS 支持

Devicetree 链接到标题

添加了一些访问设备树的宏

Kconfig 链接到标题

添加了一些kconfig预处理

库/子系统 链接到标题

  • 调试
    • 启用 CONFIG_SYMTAB ,在链接阶段生成符号表
  • MMU(Demand Paging)
    • 更新NRU(最近未使用)驱逐算法
    • 添加LRU(最近最少使用)驱逐算法
  • 格式化输出,修复使用 ARCMWDT 编译 cbprintf 时出现的警告
  • Management
    • 重新设计hawkBit 子系统
    • MCUmgr
      • 删除已弃用的 mcumgr go 工具
      • 使用PSA 进行 SHA 计算
  • Logging系统
    • 在 POSIX 上使用实时时钟作为时间戳
    • 添加syslog (POSIX) 支持
    • 添加 LOG_WRN_ONCE 用于记录警告消息
    • 添加 log_thread_trigger() 用于触发日志消息的处理
  • Modem 系统
    • 添加了调制解调器管道链接模块
    • 简化了调制解调器管道模块的同步机制,仅保护回调和用户数据
    • 添加了 modem_stats 模块,用于跟踪整个调制解调器子系统中缓冲区的使用情况
  • 电源管理
    • 添加设备电源管理的 shell 支持
    • 可以声明哪些系统电源状态导致断电
    • 设备电源管理与系统电源管理分离
    • 可以使用 zephyr,pm-device-disabled 单独禁用每个电源状态的系统设备电源管理
  • Crypto
    • 使用PSA Crypto取代TinyCrypt,以增强安全性和性能
    • mbed TLS 已更新至 3.6.0
  • CMSIS-NN 从 v4.1.0 更新到 v6.0.0
  • FPGA
    • 改进对缺少 reset 、 load 、 get_status 和 get_info 方法的驱动程序的处理
    • 添加对 Agilex 和 Agilex 5 的支持
  • 重新设计SDMMC 和 SDIO 频率和时序选择逻辑
  • 状态机框架
  • Storage
    • 可以开启FATFS的格式化功能
    • fs_open() 开始支持 FS_O_TRUNC
    • 添加 flash_area_flatten() ,用于随机数据写入准备设备
    • 添加了 CONFIG_NVS_DATA_CRC ,为数据添加 CRC 保护
    • 允许Flash Map从Devicetree节点获取固定分区信息
  • 添加Task Watchdog Shell
  • POSIX: IEEE 1003-2017 系统接口的大多数选项以及 PSE51、PSE52 和 PSE53 所需的大多数选项和选项组均获得支持
  • LoRa/LoRaWAN
    • 添加了碎片数据块传输服务
    • 添加了一个示例来演示 LoRaWAN 固件无线升级 (FUOTA)
  • zbus
    • 改进 VDED 流程:优化消息订阅者传送通知期间传送的克隆的通道引用复制
    • 减少了 zbus 初始化时间:静态启动信号量和运行时观察者列表改
    • 添加一种隔离频道消息订阅者池的方法。一些通道可以共享一个隔离池,以避免传输失败并缩短通信延迟

HAL 链接到标题

  • Nordic
    • nrfx 更新到 3.5.0
    • 添加 nRF 服务 (nrfs) 库
  • STM32: 不同系列的更新不同cube版本,详情参考release note
  • ADI: 导入 hal_adi 模块
  • 乐鑫: AL 更新到版本 v5.1

MCUboot 链接到标题

  • 进行了大量issue修复,详见release note
  • 重构image依赖函数以减少代码大小
  • 添加对 ESP32-C6 的 MCUboot 支持
  • 添加 MCUboot boot banner选项
  • 添加受保护区域的TLV查询
  • 添加内置密钥用于bootutil
  • 添加对 PSA Crypto 后端的内置 ECDSA 密钥支持
  • 更新 imgtool version.py 以获取命令行参数
  • 为 dumpinfo 添加 imgtool 改进
  • MCUboot 版本更新到 2.1.0+0-dev

OSDP 链接到标题

修复了 CP 安全通道握手中的问题

Trusted Firmware-M 链接到标题

TF-M更新至2.1.0 添加对 RSA-3072 以外的 MCUboot 签名类型的支持

LVGL 链接到标题

LVGL 更新至 8.4.0,同时对Zephyr集成LVGL做了一些调整

测试和示例 链接到标题

  • 添加了代码片段,可通过在 west build 期间传递 -S nus-console 轻松启用通过蓝牙 LE 的 UART
  • 删除GSM_PPP 设备驱动程序,用新的 MODEM_CELLULAR 设备驱动程序取代了它
  • 删除了 net/gsm_modem 示例
  • BT LE 编码 PHY 在 CI 中使用 nrf5x bsim 目标进行运行时测试
  • 外部以太网接口在 tests/net 测试中禁用