Zephyr V4.0.0发布
Zephyr v4.0.0 计划在 2024.11.15 发布,晚一天在2024.11.16正式发布。该版本支持截止日期为 2025.7.18。
- Release 文件 https://github.com/zephyrproject-rtos/zephyr/releases/tag/v4.0.0
- Relase Notes https://docs.zephyrproject.org/latest/releases/release-notes-4.0.html
- Release Blog https://www.zephyrproject.org/zephyr-4-0-is-generally-available/
- 迁移指南(从3.7.0迁移到4.0.0) https://docs.zephyrproject.org/latest/releases/migration-guide-4.0.html#migration-4-0
- 配套视频 https://www.youtube.com/watch?v=uEdZCWPftxQ
官方 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+主板和扩展板
内容摘要 链接到标题
修补漏洞 链接到标题
- CVE 2024-8798: 解禁日期 2024-11-22
- CVE 2024-10395: 解禁日期 2025-01-23
- CVE 2024-11263: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-jjf3-7x72-pqm9
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.h
和include/zephyr/arch/arm/cortex_a_r/cmsis.h
,现在直接使用cmsis_core.h
ceiling_fraction
:使用DIV_ROUND_UP
替代- 移除
include/zephyr/random/rand32.h
使用random.h
替代 - 移除已弃用的
EARLY
、APPLICATION
和SMP
初始化级别 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
- 增加返回接口物理设备的API
-
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
- 增加步进电机驱动控制shell
CONFIG_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