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的发布信息:
- Release 文件 https://github.com/zephyrproject-rtos/zephyr/releases/tag/v3.7.0
- Relase Notes https://docs.zephyrproject.org/3.7.0/releases/release-notes-3.7.html
- Release Blog https://zephyrproject.org/announcing-zephyr-3-7-new-long-term-support-release-of-zephyr-rtos/
- 迁移指南 https://docs.zephyrproject.org/latest/releases/migration-guide-3.7.html#migration-3-7
本次发布和上一次一样带有视频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_probe
和pcie_bdf_lookup
CONFIG_EMUL_EEPROM_AT2X
pm_device_state_lock
、pm_device_state_is_locked
和pm_device_state_unlock
zephyr_smp_rx_req
、zephyr_smp_alloc_rsp
和zephyr_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_bitrate
和can_get_max_bitrate
替代为can_get_bitrate_min
和can_get_bitrate_max
CAN_MAX_STD_ID
和CAN_MAX_EXT_ID
替代为CAN_STD_ID_MASK
和CAN_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_abort
和k_thread_join
在SMP系统ISR竞争情况下可能导致的死锁 - 修复
CONFIG_SCHED_SCALABLE
和CONFIG_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 测试中禁用