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