GitHub - openember/openember: 🔥 OpenEmber is an embedded linux distributed application group framework

OpenEmber 是一个专用于嵌入式 Linux 系统的应用程序开发框架,它也是 OpenEmber Core 规范 的标准 C 实现,另一个 C++ 实现是 OpenEmber-Plus

OpenEmber 框架包含设备端应用程序常见的模块,包括消息通信、设备管理、数据采集、协议解析、状态监控、配置管理、日志记录、远程升级、图形界面等功能模块。模块之间采用消息通信机制进行同步,天生支持分布式部署,也就是说,功能模块可以部署在不同的硬件平台(包括异构多核平台)。

项目起源

我们曾经用 Linux 系统做过许多嵌入式/物联网项目,包括工业控制设备、通信终端、数据采集仪、高精传感器、物联网、车联网等。在多次重复开发之后,觉得有必要将一些通用的功能模块抽象出来,方便大家复用,加速开发更多有趣的项目。因此,我们创建了 OpenEmber 项目。

OpenEmber 项目默认实现了 Linux 系统监控功能,可通过 Web 查看系统状态。

框架结构

设计原则

  1. 第三库不依赖系统安装,默认使用 FetchContent 方式,同时支持完全内置第三方库(企业/离线场景),可通过配置切换模式。

支持三种模式:

模式 说明 使用场景
Fetch 模式(默认) 构建时自动下载 开源用户
Vendor 模式 使用内置 third_party 离线/企业
System 模式(可选) 使用系统安装 Yocto/企业

目录结构

openember/
├── CMakeLists.txt
├── cmake/
│   └── Dependencies.cmake
├── third_party/
│   └── nng/          # 可选 vendor
├── src/
│   └── core/
└── transports/
    └── nng/

OpenEmber v0.1 就采用:

  • Fetch 默认
  • Vendor 可选
  • System 可选
  • Transport 插件化
  • 核心层零依赖

这会让项目一开始就具备工业级气质。

模块功能

模块名称 简介 说明
Log 日志服务系统 抽象日志输入接口,实现日志的统一管理,包括定时冲刷、自动滚动、磁盘管理等。
OTA 远程升级 包括在线升级、离线升级、状态脚本等功能
MSG 消息服务 支持 DBus、MQTT、ZeroMQ、rabbitMQ、DDS 等底层消息服务

开发计划

See TODO

应用案例

OpenEmber 适用于需要长期运行的智能设备,这些设备通常有这些特点:7×24 运行,有状态、有配置,模块长期在线,需要远程运维,升级、监控、日志比“算得快”更重要。例如无人值守终端(洗衣 / 充电 / 储物)、工业网关(Modbus / CAN / OPC UA 聚合)等。

下面是一些客户案例:

另外,OpenEmber 可作为 ROS 的“硬件隔离层”,ROS 通过 OpenEmber 的通信模块拿数据、控制硬件。