OpenEmber 是一个专用于嵌入式 Linux 系统的应用程序开发框架,它也是 OpenEmber Core 规范 的标准 C 实现,另一个 C++ 实现是 OpenEmber-Plus。
OpenEmber 框架包含设备端应用程序常见的模块,包括消息通信、设备管理、数据采集、协议解析、状态监控、配置管理、日志记录、远程升级、图形界面等功能模块。模块之间采用消息通信机制进行同步,天生支持分布式部署,也就是说,功能模块可以部署在不同的硬件平台(包括异构多核平台)。
项目起源
我们曾经用 Linux 系统做过许多嵌入式/物联网项目,包括工业控制设备、通信终端、数据采集仪、高精传感器、物联网、车联网等。在多次重复开发之后,觉得有必要将一些通用的功能模块抽象出来,方便大家复用,加速开发更多有趣的项目。因此,我们创建了 OpenEmber 项目。
OpenEmber 项目默认实现了 Linux 系统监控功能,可通过 Web 查看系统状态。
框架结构
设计原则
- 第三库不依赖系统安装,默认使用 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 的通信模块拿数据、控制硬件。
