Zephyr V3.6.0 发布

Zephyr v3.6.0 在 2024.2.23 按计划正式发布。

本次发布增加了发布视频,说明该 v3.6.0 版本的重大变化内容,并相信说明增加内容的使用方法,让使用者可以快速学习到 v3.6.0 中新导入的技术。 https://www.youtube.com/watch?v=PeZp3ZcI5rg&t=1843s

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

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

  • 开始支持 LTO
  • 新增 GNSS 子系统
  • 新增矩阵键盘驱动框架
  • 集成了 TF-M 2.0, mbedTLS 更新到 3.5.2.
  • 改进 LLEXT 工具,易于创建动态模块
  • 重实现 socket 和 COAP
  • Xtensa 开始支持用户空间
  • 默认支持 Mesh 1.1

内容摘要 链接到标题

修补漏洞 链接到标题

架构 链接到标题

  • ARCv3 处理器 ( HS5x 和 HS6x ) 启用硬件预取器 ( hardware prefetcher ) 和共享集群缓存 ( SCM - Shared Cluster Memory )
  • 支持两组及以上寄存器 blank 的 ARC 平台禁用 TLS
  • ARM 初始化 MPU 前清空所有 MPU 配置 ( 早期会导致 Bug 参考 Zephyr 下 MPU 问题分析 )
  • z_arm_prep_c ( ) 重命名为 z_prep_c ( )
  • 统一所有 ARM 架构的 exception header 结构
  • 为 ARM 增加 GDB stubs ( 目前只支持 Zynq-7000 )
  • ARM 支持自定义中断控制器 CONFIG_ARM_CUSTOM_INTERRUPT_CONTROLLER
  • Cortex-A 和 Cortex-R 的 MMU 和 MPU 初始化移至 z_prep_c ( )
  • 通用 Cortex-M MPU 代码移至 arch/arm/core/mpu
  • Xtensa 通过 MMU 支持用户空间

蓝牙 链接到标题

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

  • Mesh 默认使用 1.1。
  • ESP32 controller 增加对 deinit 的支持 deinit。
  • 分离出 ST 的 HCI SPI 蓝牙驱动程序。

开发板和 SOC 链接到标题

新增加 68 个系列的 SOC 和 30 个开发板。

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

  • 增加 LTO 支持: CONFIG_LTO, CONFIG_ISR_TABLES_LOCAL_DECLARATION
  • 对中断解析表的 LTO 目前只支持 ARM+GCC https://github.com/zephyrproject-rtos/zephyr/issues/66392
  • 删除 COMPAT_INCLUDES
  • sysbuild 通过 PRE_IMAGE_CMAKEPOST_IMAGE_CMAKE 支持添加附加的 image 构建过程
  • 增加 CONFIG_ROM_END_OFFSET 搭配签名脚本用于缩小 Image 尺寸
  • sysbuild 产生包含 MCUboot 的 Image 可以进行缩减
  • 标记 CONFIG_BOOTLOADER_SRAM_SIZE 弃用,向设备树配置过渡
  • sysbuild 添加 SIGNING_SCRIPT 支持签名脚本
  • 弃用 CONF_FILE prj_<build>.conf 构建类型
  • -Wdouble-promotion 作为编译时的默认警告

驱动 链接到标题

涉及 ADC, Auxiliary Display, BBRAM, CAN, Clock control, Counter, Crypto, Display, DMA, Entropy, Ethernet, Flash, GNSS, GPIO, I2C, I2S, I3C, IEEE 802.15.4, Input, MDIO, MFD, PCIE, MEMC, MIPI-DBI, Pin control, PWM, Regulators, Retained memory, RTC, SMBUS, SDHC, Sensor, Sensor, SPI, USB, W1, Wi-Fi

  • STM32 ADC 开始支持电源管理
  • 添加 Sparkfun SerLCD 驱动
  • 添加 NXP DMIC 外设驱动
  • STM32WL 支持 BBRAM ( Battery backed up RAM )
  • esp32-twai 支持 CAN
  • STM32WB 设备通过 AES 模块支持 Crypto
  • STM32 LTDC 驱动程序引入帧缓冲区配置
  • TM32WBA 支持 GPDMA
  • NXP 的 eDMA IP 引入新的 DMA 驱动
  • 添加支持 PTP 的 NXP enet 驱动
  • NXP mcux 驱动添加 IPv4 多播
  • 添加 GNSS 设备驱动程序 API 和子系统,用于解析和发布位置、日期时间和卫星信息
  • STM32H7 开始支持 I2S
  • 添加对矩阵键盘驱动
  • gpio-keys focaltech,ft5336 gpio-qdec 支持电源管理
  • 添加新驱动 analog-axis
  • 添加 ESP32 触摸传感器驱动
  • 添加 NXP ENET 外设的 MDIO 驱动
  • 添加 NXP FlexRAM MEMC 驱动
  • 导入 MIPI DBI 驱动类
  • 修复 ESP32S3 PWM 低频问题
  • STM32 开始支持 SMBUS
  • iMX USDHC SDHC 驱动支持 SDIO 命令
  • 增加单总线驱动 zephyr,w1-gpio

网络 链接到标题

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

  • COAP
    • 添加对 Echo 和 Request-Tag CoAP 选项 ( RFC 9175 ) 的支持
    • 引入 CoAP 服务库,简化 CoAP 服务器功能实现
    • 使用 CoAP 服务库重实现 CoAP 服务器示例
    • 添加 CoAP 服务器 shell 命令
    • 添加了 CoAP 观察者/服务 Network Event
  • 添加通用 Wi-Fi 连接后端
  • DHCP
    • 添加支持 DHCP server
    • 关闭接口后删除 DHCP 的 IPv4 地址
  • DNS
    • 支持在所有网络接口上启用 mDNS 侦听器
    • 允许启动时禁用默认 DNS 上下文自动初始化,CONFIG_DNS_RESOLVER_AUTO_INIT
  • Ethernet
    • 支持手动注册 ARP
    • 设备树支持 PHY 模式选择
    • 支持 TX 注入模式
  • ICMP 支持 Pv6 Neighbor reachability hints
  • IP
    • 可以为单播和组播包单独设置 IPv4 TTL 值和 IPv6 跳数限制值
    • 添加验证 IPv6 站点本地地址和全局地址的功能
  • LwM2M
    • 配置 LwM2M 更新周期,CONFIG_LWM2M_UPDATE_PERIOD
    • 增加删除对象和资源的 shell 命令
    • 增加对 DTLS 标识的支持
  • OpenThread
  • MQTT-SN
  • PPP
  • Shell
    • 增加 net sockets 命令
    • 增加 net dhcpv4 server 命令
    • 增加管理 TLS 凭据的功能
  • Socket
    • 添加对 v4-mapping-to-v6 的支持
    • 添加对 IPV6_V6ONLY IP_PKTINFOIPV6_RECVPKTINFO IP_TTL SO_DOMAIN 套接字选项的支持
    • 添加对 SO_ERROR 套接字选项的支持
    • 添加 objectcore 对 socket 进行统计
    • 增加 recvmsg ( )
    • 添加对 IPv4 多播 IP_ADD_MEMBERSHIPIP_DROP_MEMBERSHIP 套接字选项的支持
    • 添加对 IPv6 多播 IPV6_ADD_MEMBERSHIPIPV6_DROP_MEMBERSHIP 套接字选项的支持
    • 添加套接字服务库
  • TCP 添加 TCP Keep-Alive 功能
  • TFTP
  • Wi-Fi
    • Wi-Fi shell 中添加了 Wi-Fi 驱动版本信息和 AP 模式支持
    • 添加 Regulatory channel information
    • 向连接管理器添加了 Wi-Fi 绑定
  • zperf

USB 链接到标题

导入新的 USB Audio 2 实现,使用设备树进行实例化。增加 SetFeature ( TEST_MODE ) 。

设备树 链接到标题

引入新的 SPI 属性 spi-cpolspi-cphaspi-hold-cs

库和子系统 链接到标题

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

  • Management
  • Logging
  • Modem
  • Picolibc
    • 更新至 1.8.6
    • 删除 _POSIX_C_SOURCE,如果应用要使用 Zephyr 要求之外的 API,需要自行添加 `_POSIX_C_SOURCE
    • 添加新的 printf ( ) 模式、 CONFIG_PICOLIBC_IO_LONG_LONGCONFIG_PICOLIBC_IO_MINIMAL
    • 增加 CONFIG_PICOLIBC_ASSERT_VERBOSE 控制 assert ( ) 函数是否显示详细信息 ( 文件名、行号、函数名称和失败表达式文本 )
    • 允许使用 CONFIG_THREAD_LOCAL_STORAGE
  • 电源管理
  • Crypto
    • Mbed TLS 更新至 3.5.2
  • Retention
  • SD 添加对 SDIO 设备的支持
  • Storage
    • LittleFS 更新至 2.8.1
  • POSIX API
    • 完成对 POSIX_THREADS_EXTXSI_THREADS_EXTPOSIX_CLOCK_SELECTIONPOSIX_SEMAPHORES 选项组的支持
    • 完成对 _POSIX_MESSAGE_PASSING_POSIX_PRIORITY_SCHEDULING 选项的支持
    • 解决 Coverity-CID 211585、334906、334909 和 340851
    • pthread_attr_t 分配和释放堆栈最高支持到 8M
    • 添加对延迟和异步线程取消的支持
    • 添加对命名信号量的支持
    • 添加对异步线程取消和 SIGEV_THREADCLOCK_REALTIME 的支持
    • 添加编译时间常数 sysconf ( ) 实现
  • LoRa/LoRaWAN
    • 添加 CONFIG_LORAWAN_REMOTE_MULTICAST LoRaWAN 远程多播支持
  • ZBus

HAL 链接到标题

主要涉及 STM 系列的 HAL 修改

MCUboot 链接到标题

版本更新到 2.1.0+0-dev, 增加了一些配置功能和修复 Bug.

zcbor 链接到标题

更新到 0.8.1

LVGL 链接到标题

更新到 8.3.11, Zephyr 中添加 zephyr,lvgl-keypad-input 兼容键盘输入

测试和示例 链接到标题

  • 修正了测试中的一些 bug,调整基于 nrf5340_bsim 的 CI 测试,添加了 ESP32 的测试。
  • 添加了 ESP32/ESP32S3 部分示例,mbox 示例增加了一些 NXP 板支持,添加了 LVGL 显示示例。