openvela trunk-5.4
[ English | 简体中文 ]
一、概览
openvela 一直致力于引入更多的芯片的支持、增强系统的实时通信能力,并大幅提升了系统的健壮性、存储功能和可调试性。本次发布围绕以下核心主题进行了增强:
- 硬件生态扩展:新增对英飞凌 AURIX™ TC4、旗芯微 MCU 及 QEMU-R52 SIL 平台的支持,拓宽了平台适用范围。
- 系统内核加固:实现了 SMP 与 PM 的协同工作,引入了基于 MPU 的线程栈保护和 RPC 框架重构,系统更安全、更稳定。
- 关键能力集成:新增了 SocketCAN 和以太网协议栈;引入了高可靠性的 NVS2 存储方案。
- 开发者体验优化:提供了低开销的 FDX 实时追踪工具和多个 LVGL 应用范例,降低了开发和调试门槛。
二、主要新增功能与增强
1、平台支持 (Platform Support)
- 新增对英飞凌 AURIX™ TriCore™ TC4 芯片的支持
- 新增对旗芯微(Flagchip)MCU 的支持
- QEMU 平台下新增 Cortex-R52 核支持,支持 Vector SIL 平台
- 解决 nuttx boards 的编译问题,更好得支持原生 nuttx boards 平台
2、内核与安全 (Kernel & Security)
-
电源管理 (PM) & 对称多处理 (SMP):实现了 SMP 和 PM 功能的同时开启,并在
qemu-armv8a平台上完成功能验证,覆盖了 PM 基础功能和ostest的基础用例。 -
RPC
- 框架重构: 重构了 RPC 框架,使其具备更强的通用性,能够为其他 VirtIO 设备提供跨核通信能力。
- 对 Rptun/Rpmsg 进行了功能增强,引入多优先级机制以满足汽车场景的实时性需求,并修复了功能安全相关的代码扫描问题。
-
内存管理增强: 实现了 Task 独立的 Heap 空间,
libdbus等库已支持。 -
Binder 消息机制: 将 Binder 的 server/client fd 集成到
libuv事件循环中,通过回调进行消息处理,实现了与其他模块的统一管理。 -
新增 Rpmsg Battery & Gauge 驱动。
-
线程间隔离保护机制:内核现已支持基于硬件内存保护单元 (MPU) 的线程栈保护功能。当一个线程发生栈溢出时,该机制会触发硬件异常,阻止其破坏其他线程的栈空间或关键数据。
-
代码质量:完成了多项静态代码问题的修复,提升了代码库的整体质量。
3、通信 (Communication)
-
新增 SocketCAN、以太网支持:引入了遵循标准 Socket API 的 CAN 通信框架。用户现在可以使用
socket(),bind(),send(),recv()等标准接口进行 CAN 报文的收发和过滤。 -
WebSocket 功能增强:为 WebSocket Feature 新增了默认证书支持,简化了安全连接的建立流程。
4、存储 (Storage)
新增 NVS2 (Non-Volatile Storage v2):集成了一个全新的、全新高可靠性的 NVS2 存储方案。该存储方案针对嵌入式 Flash 介质进行了深度优化,支持磨损均衡、掉电安全和数据加密。
5、调试与诊断 (Debugging & Diagnostics)
新增基于 FDX 的实时性 Trace 功能:实现了一种基于 FDX (Fast Debug eXchange) 协议的低侵入式实时追踪工具。它能够以极低的系统开销,捕获并导出高精度的系统事件,如任务切换、中断响应、信号量操作等。
6、应用示例
-
新增打砖块游戏:基于 openvela 和 LVGL 开发的触屏打砖块游戏,已实现了基本游戏逻辑,增加了图片素材并实现了打击音效。
-
新增虚拟宠物应用:一个基于LVGL图形库的交互式演示程序,模拟了一个数字宠物的饲养过程。用户可以通过喂食、饮水、运动和休息等操作来照顾虚拟宠物,提升其心情和等级。
-
贪吃蛇游戏:一个使用 LVGL 图形库实现的自动贪吃蛇游戏。
-
电子木鱼:基于 openvela
nxaudio服务与上层 LVGL UI 框架,并实现了包含响应式布局和安全资源管理的完整交互链路,实现了一个动画效果流畅、资源安全管理、良好用户体验的一个应用展示。
7、开发工具
Ubuntu 环境 VS Code 插件支持:支持在 Ubuntu 环境下安装 openvela VS Code 插件,实现了从项目创建、编译构建、系统调试到应用开发的全流程支持,显著提升开发效率。(openvela VS Code 插件使用指南)
8、模拟器运行时参数扩展
-
emulator.sh 新增 -keep 参数支持
如果 emulator.sh 支持多实例配置时,可以通过
-keep参数接入指定的名称的实例(如果不存在则创建),并且在该实例退出时不会删除相关上下文# 使用方法 cp cmake_out/vela_goldfish-arm64-v8a-ap/nuttx* cmake_out/vela_goldfish-arm64-v8a-ap/vela_* cmake_out/vela_goldfish-arm64-v8a-ap/advancedFeatures.ini nuttx/ ./emulator.sh vela -keep -no-window # 测试举例,在/data目录创建 test 文件并写入内容 nsh> echo test > /data/test nsh> echo "openvvela qemu keep test" >> /data/test nsh> quit # 模拟器退出重新进入,上一次写入的内容仍然被保留 ./emulator.sh vela -keep -no-window nsh> cat /data/test test openvela qemu keep test -
emulator.sh 新增支持使用 Hostfs 功能,默认支持使用 9pfs,效果如下:
goldfish-armv8a-ap> df -h Filesystem Size Used Available Mounted on binfs 0B 0B 0B /bin fatfs 255M 78M 177M /data romfs 1152B 1152B 0B /etc hostfs 0B 0B 0B /host procfs 0B 0B 0B /proc v9fs 878G 626G 252G /share romfs 512B 512B 0B /system tmpfs 6K 1K 5K /tmp用法:
# 使用方法 cp cmake_out/vela_goldfish-arm64-v8a-ap/nuttx* cmake_out/vela_goldfish-arm64-v8a-ap/vela_* cmake_out/vela_goldfish-arm64-v8a-ap/advancedFeatures.ini nuttx/ ./emulator.sh vela