Zephyr V4.0.0发布

Zephyr v4.0.0 计划在 2024.11.15 发布,晚一天在2024.11.16正式发布。该版本支持截止日期为 2025.7.18。

官方 Release 博客详细概述 v4.0.0 新功能和亮点的摘要,Release note 可以找到细节,视频对新功能进行了demo演示,本文一二级标题列出主要更新内容,正文文字列出个人关注的内容。

这次大版本的更新,导入了步进电机, 触觉驱动,强化视频驱动,可以推断Zephyr将会在机器人领域,AR/VR领域有所发展和应用。

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

  • 安全存储子系统:secure_storage,提供通用的PSA API 来与安全存储交互
  • ZMS子系统:Zephyr Memory Storage,将经典的NOR(先擦后写)和新技术RRAM/MRAM(无需写入前擦除)
  • 模拟比较器(Analog Comparators)设备驱动
  • 触觉(Haptics)设备驱动
  • 多媒体功能:扩展音视频功能,支持新的图像传感器、视频接口、音频接口和编解码器
  • Prometheus 库:集成Prometheus–用于监控和警报的开源工具
  • 文档改进
  • 新增60+主板和扩展板

内容摘要 链接到标题

修补漏洞 链接到标题

API变化 链接到标题

删除

  • K_THREAD_STACK_MEMBER:使用K_KERNEL_STACK_MEMBER替代
  • CBPRINTF_PACKAGE_COPY_
  • _ENUM_TOKEN_ENUM_UPPER_TOKEN
  • 移除include/zephyr/arch/arm/cortex_a_r/cmsis.hinclude/zephyr/arch/arm/cortex_a_r/cmsis.h,现在直接使用cmsis_core.h
  • ceiling_fraction:使用DIV_ROUND_UP替代
  • 移除include/zephyr/random/rand32.h使用random.h替代
  • 移除已弃用的EARLYAPPLICATIONSMP初始化级别
  • net_pkt

弃用

  • 弃用了net_buf_put()net_buf_get(),使用k_fifo_put()k_fifo_get()替代
  • 键盘扫描子系统标记为弃用
  • 弃用 TinyCrypt shim 驱动程序CONFIG_CRYPTO_TINYCRYPT_SHIM
  • 弃用 native_posix,使用native_sim替代
  • include/zephyr/net/buf.h,使用include/zephyr/net_buf.h替代
  • 弃用net_buf_put()net_buf_get()

架构 链接到标题

  • 添加对 Cortex-M (arm_mpu_v8) 上设备内存属性的支持
  • ARM64
    • 添加对arch_stack_walk()的初始支持,仅支持通过 esf 展开
    • 添加对 ARM64 的 sys_arch_reboot() 支持
    • 添加对请求分页的支持。
    • 添加对动态模块 (LLEXT) 的支持。
  • RISC-V
    • 异常时支持打印堆栈指针 (sp) 或帧指针 (fp) 的地址
    • 异常堆栈帧 (arch_esf) 支持csf
  • x86添加对arch_stack_walk()的初始支持,仅支持通过 esf 展开

内核 链接到标题

Devicetree中的设备可以作为动态模块加载

蓝牙 链接到标题

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

  • 添加对周期广告同步传输 (PAST) 支持,支持发送和接收角色
  • 增加mesh专用队列,提高mesh消息的传输的可靠性

主板和 SoC 支持 链接到标题

增加的SOC

  • ESP32-C2 和 ESP8684 SoC
  • STM32U0系列
  • STM32WB0系列
  • STM32U545xx系列
  • NXP i.MX93的 Cortex-M33 core
  • NXP MCXW71, MCXC242, MCXA156, MCXN236, MCXC444, RT1180

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

  • 添加 ESP32 WROVER-E-N16R4 变体
  • STM32H5:通过 STMicroelectronics OpenOCD 分支添加对 OpenOCD 的支持
  • NXP IMXRT:修复由于闪存配置 Kconfig 导致的 flexspi 启动问题
  • NXP RT11xx:启用 FlexIO

新增60+主板和扩展板,对部分主板进行了修改,详情查看release note.

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

  • jlink、pyocd 和 linkserver 的 west flash 命令支持 .elf 文件
  • pickled EDT 生成从 gen_defines.py 移到 gen_edt.py 中
  • 在构建系统中直接使用使用 imgtool 对image签名
  • 通过SB_CONFIG_MCUBOOT_MODE选择MCUboot的操作模式
  • 构建系统添加对 RAM-load MCUboot 操作模式的支持
  • Twister 添加脚本参数以启用硬件特定参数

文档 链接到标题

  • 用户能够按名称、架构、供应商或 SoC 等标准搜索主板
  • 可以根据名称和描述快速查找代码示例
  • 在Devicetree 绑定文档中添加与绑定兼容字符串匹配的驱动程序源代码的链接
  • 代码示例自述文件页面中增加一个按键,允许直接浏览 GitHub 上的示例源代码
  • Zephyr C API 文档移出了主文档
  • 添加了两个新的构建命令make html-live和make html-live-fast

驱动 链接到标题

涉及ADC,DAC, CAN,Clock control ,Audio Codec, Comparator, Counter,Crypto, Disk,Display,DMA,EPROM,Entropy,Ethernet,Flash,GPIO,Haptics,I2C,I2S,I3C,Input,Interrupt,LED,LED 灯带,Mailbox,MDIO,MEMC,Modem,MIPI-DBI,MSPI-CSI,Pin control,PWM,Regulators,RTC,SDHC,Sensors,Serial,SPI,Steppers,Timer,USB,Video,W1,Watchdog,Wi-Fi 详情查看release note, 下面仅列出我关注的

  • ADC

    • ESP32 中添加了合适的 ADC2 校准项
    • 修复了 ESP32-S3 ADC的校准方案
    • 增加瑞萨 RA8 /ADI MAX32 SoC系列/NXP S32 /Ambiq Apollo3 系列 ADC驱动
  • CAN

    • 增加瑞萨 RA CANFD /NXP S32Z27x Flexcan驱动
  • 时钟控制

    • STM32 MCO可通过Devicetree配置时钟控制
    • 增加瑞萨 RA 时钟控制驱动
    • 添加Silabs Series 2+时钟管理单元
    • 增加nRF54H 系列时钟控制驱动
  • 音频

    • 增加 Wolfson WM8904 音频编解码器驱动
  • Comparator

    • 新增比较器驱动CONFIG_COMPARATOR
    • 新增比较器shell命令CONFIG_COMPARATOR_SHELL
    • 增加 nRF COMP/nRF LPCOMP/NXP Kinetis ACMP设备驱动
  • Counter

    • 增加瑞萨 RA8 AGT/ADI MAX32 SoC counter驱动
    • 更新NXP counter_mcux_lptmr/nxp_sys_timer驱动
  • Crypto

    • 增加对 STM32L4 AES 的支持
  • DAC

    • DAC API支持指定使用内部通道, STM32的DAC驱动以实现
  • Disk

    • STM32F7 SDMMC 驱动支持使用 DMA
    • SDMMC 在磁盘去初始化时将关闭 SD 卡电源
  • Display

    • NXP LCDIF 驱动支持使用 PXP 沿水平或垂直轴翻转图像
    • ST7789V 支持BGR565
    • 增加SSD1327/SSD1322/IST3931 驱动
  • DMA

    • 增加ADI MAX32 SoC 系列
    • NXP EDMA开始支持eDMAv5 和循环模式
    • NXP PXP DMA支持翻转模式
  • EEPROM

    • 嵌入式 C 标准库可直接使用EEPROM 模拟器
  • Entropy

    • 增加瑞萨 RA8 /ADI MAX32 SoC 系列 的Entropy驱动
  • Ethernet

    • 增加返回接口物理设备的API get_phy ()
    • Ethernet capabilities api 增加2.5G和5G的链接速度
    • 增加synopsis dwc_xgmac/NXP iMX NETC 驱动
    • 各网卡驱动的bug修复
    • 增加和修改部分PHY Driver
  • Flash

    • 修复了 SPI NOR 驱动启用 SFDP 时,Devicetree初始化WP、HOLD 和 RESET 引脚不正确的问题
    • 更新Espressif SoC 初始化驱动,支持新芯片组和八进制闪存
    • 允许选择 SPI NOR 驱动程序初始化优先级
    • 添加 flash_copy () 函数,可在两个闪存设备之间执行直接数据复制
    • STM32 OSPI 驱动程序以支持 QUAL、DUAL 和 SPI 模式,支持自定义写入和SFDP:BFP opcodes
    • STM32F7 SoC 实现读出保护处理(RDP 级别)
    • 增加瑞萨 RA8/ADI MAX32 SoC Flash驱动
    • NXP MCUX Flexspi增加支持W25Q512JV 和 W25Q512NW - IQ/IN
  • Haptics

    • 新增触觉驱动CONFIG_HAPTICS
    • 增加TI DRV2605驱动和示例
  • I2C

    • 加了瑞萨 RA8 I2C 驱动
  • I2S

    • 增加 ESP32 - S3 和 ESP32 - C3 I2S驱动
  • Input I2S驱动

    • 增加新特性zephyr,input-double-tap
    • 增加新驱动ilitek,ili2132a
    • 增加矩阵键盘驱动的电源管理
    • 添加新的触摸屏框架
    • 修复ESP32触摸驱动
    • 修复GT911驱动
  • 中断

    • 更新ESP32系列中断分配器
    • 提供函数为Arm GIC设置pending interrupts
    • 为多OS共享GIC增加配置项
  • mailbox

    • 增加ESP32和ESP32-S3 mailbox驱动
  • MDIO

    • 添加 LiteX MDIO 驱动
  • MEMC

    • 基于NXP FLEXSPI增加APS6404L PSRAM驱动
  • Modem

    • 增加 U-Blox LARA-R6 modem
    • 初始化期间可设置modem的UART波特率
  • MIPI-DBI

    • 增加 bitbang MIPI-DBI驱动,支持8080和6800模式
    • 支持STM32 FMC内存控制器
    • 支持NXP LCDIC控制器8080模式
  • MIPI-CSI

    • NXP CSI/MIPI_CSI2Rx支持可变帧率
  • pin-ctrl

    • 增加Microchip MEC5/NXP i.MX SCMI/i.MX93 M33/ESP32C2支持
  • PWM

    • rpi_pico自适配置分频比
    • 增加瑞萨 RA8 /ADI MAX32 SoC PWM驱动
  • Regulators

    • 更新CP9314驱动
    • 增加MPS MPM54304驱动
  • RTC

    • 新增NXP IRTC驱动
  • SDHC

    • 添加ESP32-S3 SDHC驱动
  • 传感器:详见release note

  • Serial

    • 增加支持 Synopsys Designware 8250 UART
    • 增加瑞萨SCI UART驱动
    • 增加Ganymed SY1XX UART驱动
  • SPI

    • 增加 Renesas RA8 SPI驱动
    • Analog Devices MAX32 SPI驱动增加RTIO支持
    • 增加Silabs EUSART支持
  • 步进电机

    • 增加步进电机驱动CONFIG_STEPPER
    • 增加步进电机驱动控制shellCONFIG_STEPPER_SHELL
    • 增加ADI TMC5041 驱动
    • 增加gpio-stepper-controller支持
    • 添加stepper相关测试套件
  • Timer

    • 添加对Silabs Sleeptimer支持
  • USB

    • STM32U59x/STM32U5Ax SoC 变体支持 USB HS
    • 添加用于 Smartbond、NuMaker USBD 和 RP2040 设备控制器的 UDC 驱动
    • 在 NXP USB 驱动程序 (UDC) 中启用 SoF
    • 在 NXP EHCI USB 驱动程序中启用缓存维护
  • Video

    • 增加控制帧率的API
    • 增加传输部分帧的API
    • 增加用于多堆视频缓冲区分配的 API
    • video-interfaces.yaml中引入了常见视频链接属性的绑定
    • 增加GalaxyCore GC2145/ESP32-S3 LCD-CAM/NXP MCUX SMARTDMA /OV2640/OV5640支持
    • STM32:实现video_get_ctrl()和video_set_ctrl()
    • 增加NXP smartdma视频驱动
    • 添加帧间隔 API 以支持可变帧速率
  • Watchdog

    • 添加 Analog Devices MAX32 SoC 系列驱动
  • WIFI

    • 支持Wi-Fi Easy Connect (DPP)
    • 支持Wi-Fi 凭证库
    • station企业级支持
    • Wi-Fi shell 支持regulatory domain/WPS/802.11r连接命令/显示 RTS 阈值
    • hostap 状态消息含有当前PYH速率
    • 允许通过Wi-Fi shell 重置 Wi-Fi 统计数据
    • 添加 ESP32-C2 Wi-Fi/NXP RW612 /nRF70 Wi-Fi 支持
    • 添加 ESP32 驱动程序 APSTA 支持

网络 链接到标题

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

  • 802.15.4
    • 实现beacons的无关联Bit
    • 支持beacons的playload
    • 修复问题&改进日志
  • Coap
    • Client中未知查询使用 CoAP RST 响应进行回复
    • 运行时可配置ACK随机因子参数
    • 添加对无相应CoAP选项支持
    • 修复问题&改进
  • DHCPv4
    • 支持解析从 DHCP 服务器接收到的多个 DNS 服务器
    • DHCPv4 服务器中添加对 DNS 服务器选项的支持
    • 添加对 DHCPv4 服务器中的路由器选项的支持
    • 允许在 DHCPv4 服务器中分配自定义地址
    • 修复问题
  • ARP/DHCPv6/gPTP/PTP/IPv4修复问题
  • DNS/mDNS/LLMNR
    • 支持收集 DNS 统计信息
    • 修复问题
  • HTTP
    • 支持对应用程序指定响应标头和响应代码
    • 在 HTTP 服务器示例中添加对 netusb 的支持
    • 支持从应用程序回调访问 HTTP 请求标头
    • 支持在 HTTP 服务器中处理通过 IPv6 套接字的 IPv4 连接
    • 支持不指定本地主机的情况下创建 HTTP 服务器实例
    • 支持HTTP 服务器中静态文件系统资源
    • 修复问题&重构
  • IPv6
    • 支持多播侦听器发现 API 的公共标头
    • 新增net_ipv6_addr_prefix_mask()
    • 可配置IPv6 路由器请求超时
    • 修复问题
  • LwM2M
    • Location object现在允许可选使用高度、半径和速度等资源
    • 将 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 添加到 DTLS 密码列表
    • LwM2M shell 添加列出资源/观察结果的命令
    • 接受解码为整数的 SenML-CBOR 浮点数
    • 支持对 X509 主机名验证
    • 修复问题&改进
  • 其它
    • 支持网络数据包分配统计
    • 添加库支持Prometheus 监控
    • 支持捕获接口的丢包统计信息
  • OpenThread
    • 支持NAT64 发送和接收回调
    • 添加Kconfig配置项
    • 修复问题
  • Shell
    • 支持使用 Kconfig 启用/禁用单个网络 shell 命令
    • 添加用于 DHCPv4/6 客户端管理net dhcpv4/6 client命令
    • 添加用于虚拟接口管理的新net virtual命令
    • 添加net cm命令用于连接管理
    • 修复问题和改进
  • socket
    • 添加专用的net_socket_service_handler_t回调函数类型
    • 支持 TLS 1.3
    • 修复和改进
  • Wi-Fi
    • 将 80211R 快速 BSS 转换参数用法添加到 wifi shell 的连接命令
  • zperf
    • zperf 示例中添加对 USB CDC NCM 的支持

USB 链接到标题

  • 添加 USB CDC 网络控制模型实现
  • 实现Enhanced USB Audio class 2
  • USB 设备堆栈具有高带宽感知能力
  • 实现Enhanced CDC ACM 和 HID class

Devicetree 链接到标题

  • 支持符串数组和数组类型属性为枚举
  • 增加了一些宏

库/子系统 链接到标题

  • 调试
    • Rust的嵌入式工具包probe-rs添加到west runner中
  • Demand Paging
    • 添加 LRU(最近最少使用)驱逐算法
    • 添加 on-demand内存映射支持 ( CONFIG_DEMAND_MAPPING )
  • Management
    • 支持Enumeration Management Group
    • 支持img mgmt slot info 命令,列出设备上的image和slot的信息
    • 系统现在可以通过通知钩子的方式,支持自定义的操作系统管理引导加载程序信息响应
    • 支持LoRaWAN MCUmgr 传输

电源管理 链接到标题

  • 支持ESP32-C6 电源管理,有浅睡眠和深度睡眠功能

Crypto 链接到标题

  • Mbed TLS 更新至版本 3.6.2
  • 修改部分Kconfig项

Shell 链接到标题

  • 重组织命令kernel thread list和kernel thread stacks
  • 添加多个 shell 命令配置 CPU 亲和力/在运行时绑定线程

Storage 链接到标题

  • LittleFS更新至2.9.3
  • FAT FS增加配置选项(CONFIG_FILE_SYSTEM_LIB_LINK),允许在不启用完整的文件系统子系统的情况下,直接链接和使用文件系统支持库
  • FAT FS启用对 64 位 LBA 和 GPT 的支持
  • FAT FS启用对使用 GPT 或 MBR 分区的设备的支持
  • FAT FS上文件时间戳可使用RTC时间
  • 新增ZMS,涵盖所有的非易失性存储,经典的NOR Flash和RRAM,MRAM

Tracing 链接到标题

  • 支持用户event

POSIX 链接到标题

  • 支持POSIX_DEVICE_IO & POSIX_SIGNALS
  • 支持_POSIX_SYNCHRONIZED_IO & _POSIX_THREAD_PRIO_PROTECT
  • 支持open()中的O_TRUNC标志
  • 支持rmdir()和remove()
  • 支持asctime_r() 、 ctime_r()和localtime_r()
  • pool synchronization 使用用户空间信号量

JWT (JSON Web Token) 链接到标题

  • 增加Kconfig项指定签名算法和加密库

Firmware 链接到标题

引入对 ARM 系统控制和管理接口的基本支持,包括

  • 时钟管理协议命令子集
  • 引脚控制协议命令的子集
  • 共享内存和基于邮箱的传输

HAL 链接到标题

  • nrfx更新至3.7.0
  • STM32不同soc更新到不同的cube,详见release note
  • Espressif更新至v5.1.4
  • NXP MCUX HAL SDK更新至2.16.000
  • Silabs Series 2更新为 Simplicity SDK 2024.6

MCUboot 链接到标题

增加和修复若干小的功能,详见release note

Trusted Firmware-M (TF-M) 链接到标题

TF-M 更新至版本 2.1.1

Nanopb 链接到标题

nanopb模块更新到版本0.4.9

LVGL 链接到标题

  • 添加LV_ATTRIBUTE_MEM_ALIGN,以便库内部数据结构可以与特定边界对齐
  • 提供对齐定义以适应某些 GPU 的对齐要求

zcbor 链接到标题

zcbor 库更新至版本 0.9.0

Tests and Samples 链接到标题

  • fatfs API 测试中添加对测试 SDMMC 设备的支持
  • 通过添加颜色条以实现自动化,增强相机夹具测试
  • 使用 NXP ADSP 板的优化库添加数字运算(数学,例如 FFT、回声消除)示例
  • 启用视频示例以运行视频捕获
  • 演示如何将状态机框架与 LVGL 结合使用来创建简单的计算器应用程序
  • 其它详见release note