- 嵌入式
- 系统编程
【免费下载链接】fprime
F´ - A flight software and embedded systems framework
F´(F Prime)是由 NASA 喷气推进实验室(JPL)开发、面向航天飞行软件与嵌入式系统的组件驱动框架。本文基于仓库根目录 README.md,结合仓库内的安装指南、用户手册与参考应用源码,系统讲解 F´ 的安装、项目创建、构建运行与核心概念,帮助你快速上手用 F´ 搭建一套具备指令(Command)、遥测事件(Event)与通道(Channel)能力的嵌入式系统。
F´ 是什么:一个面向航天与嵌入式系统的组件驱动框架
F´ 是一个组件驱动的框架,旨在加速航天飞行软件及其他嵌入式软件应用的开发与部署。它最初在 NASA 喷气推进实验室开发,已成功部署于多个空间任务,特别适配 CubeSat、SmallSat 和科学载荷等小型航天系统的开发需求,但也适用于任意规模、任意领域的嵌入式系统。
F´ 提供以下核心能力(见 README.md):
- 架构分解:将飞行软件拆分为接口清晰、职责单一的离散组件(Component);
- C++ 框架:提供消息队列、线程等嵌入式系统核心能力的基础框架;
- 建模工具:用于定义组件与连接关系、并自动生成代码的建模工具;
- 现成组件库:持续扩充的、开箱即用的功能组件集合;
- 测试工具:支持单元级与集成级的飞行软件测试。
从源码结构看,这些能力在仓库中有清晰的组织:Fw/目录存放框架核心(缓冲、指令、通信、日志、遥测、时间等基础类型),Svc/目录存放服务组件(指令分发、事件记录、遥测管理、健康监控等),Autocoders/目录实现了建模到 C++ 代码的自动生成。
核心技术概念:组件、端口、拓扑与数据构造
要理解 F´,首先要掌握它划分系统的三大抽象(详见 用户手册完整介绍):
- 组件(Component):系统中一个离散的功能单元,负责管理系统的某一部分,例如负责射频通信的 Radio 组件;
- 端口(Port):组件之间通信的通道,一个组件通过端口与其他组件交互;
- 拓扑(Topology):由端口连接起来的所有组件构成的完整网络图,封装了整个系统。
以框架内置的 Command Dispatcher 组件为例:它接收地面通信并转换为动作,将动作派发给其他组件处理,通过 Event 上报派发与完成状态,并用 Channel 统计已派发指令的数量。由此可见,一个组件可定义三类数据构造(详见 Commands, Events, Channels, and Parameters):
- 命令(Command):组件能够处理的、来自地面的动作;
- 事件(Event):系统操作历史的记录,例如"已建立通信";
- 通道(Channel):系统当前状态的命名分段,例如"当前温度:3C";
- 参数(Parameter):可在运行时配置的持久化设置。
F´ 通常运行于带线程调度器的单核操作系统之上,但也可用于 baremetal 与多核系统,只是设计时需要理解执行上下文(参见 F´ On Baremetal and Multi-Core Systems)。
系统需求
根据 README.md 与 安装指南,使用 F´ 前需准备以下环境:
| 需求 | 说明 |
|---|---|
| 操作系统 | Linux、Windows(配合 WSL)或 macOS |
| git | 版本控制与项目拉取 |
| CMake | 3.16 及以上,CLI 工具须在系统 PATH 中 |
| C/C++ 编译器 | Clang 或 GNU 编译器(如 gcc、g++) |
| Python | 3.8 及以上,支持虚拟环境与 PIP |
注意事项:
- 强烈建议使用最新版 PIP;非 x86_64/aarch64 架构或旧版 PIP 环境需要 Java;
- Ubuntu/Debian 用户若遇 Python/PIP 问题,可参考 troubleshooting.md;
- macOS 用户需确保 CMake 命令行工具在 PATH 中。
快速开始:安装引导工具并创建项目
F´ 的工具链以 Python 包形式通过 PIP 分发,并由 F´ Bootstrap 工具在项目的虚拟环境中统一安装,官方推荐每个项目使用独立的虚拟环境(详见 安装指南)。
第 1 步:安装 fprime-bootstrap 引导工具
pip install fprime-bootstrap第 2 步:创建新项目
fprime-bootstrap project该命令会提示输入项目名,例如:
[1/1] Project name (MyProject): MyProjectfprime-bootstrap project会执行以下动作:
- 以标准 F´ 项目结构创建新的 git 仓库;
- 在项目内创建虚拟环境并安装全部依赖。
第 3 步:激活虚拟环境
cd MyProject . fprime-venv/bin/activate之后每次在项目中工作前都记得先激活虚拟环境。至此,你就拥有了一个包含完整 F´ 工具链的独立项目环境。
与已有 F´ 项目协作
若需使用他人已有的 F´ 项目,安装指南 提供了两种方式:
方式 a:使用 fprime-bootstrap clone
pip install fprime-bootstrap fprime-bootstrap clone <project_url>其中<project_url>是托管在远程 git 仓库中的项目地址。
方式 b:手动克隆
- 为项目创建并激活虚拟环境;
- 下载项目(使用 git 子模块时记得执行
git submodule update --init --recursive); - 安装项目指定的 F´ 工具版本:
pip install -r <project>/fprime/requirements.txt若项目自带requirements.txt,则以项目自身文件为准。本仓库根目录即提供了一份 requirements.txt,列出 F´ 框架所需的全部 Python 依赖。
构建与运行:fprime-util 与 CMake 构建体系
F´ 自带基于 CMake 的构建系统,用于处理 Autocoder 依赖并将生成的代码与用户代码组装(见 用户指南)。为标准化开发流程,F´ 提供了fprime-util辅助工具,将常用命令映射到底层构建系统。其完整用法见 fprime-util 用户指南。
核心子命令
| 子命令 | 作用 |
|---|---|
generate | 生成构建缓存目录;默认生成 release 构建缓存,加--ut生成单元测试构建缓存。这是使用 F´ 构建系统的第一步 |
purge | 删除全部构建缓存;当构建系统未正确检测到变更时用于重新开始 |
build | 构建当前目录;在组件目录编译组件库,在部署目录生成二进制并复制构建产物 |
impl | 依据*Ai.xml自动生成组件骨架实现(加--ut生成单元测试骨架),节省大量开发时间 |
check | 构建并运行当前目录单元测试;--all运行部署中所有已知单元测试 |
coverage | 类似check,额外生成单元测试覆盖率报告 |
new | 创建新组件或新端口,通过--component/--port指定类型 |
hash-to-file | 当断言配置为输出文件哈希(FW_ASSERT_LEVEL = FW_FILEID_ASSERT)时,将哈希转换回完整文件路径 |
info | 打印当前目录的构建缓存位置与可用命令信息 |
常用通用参数
-j JOBS, --jobs JOBS:并行编译任务数,默认 1,建议设为机器核心数 +1,例如fprime-util build -j 10;--all:以部署全局作用域运行命令,例如fprime-util check --all运行所有可用单元测试;--ut:对单元测试目标生效,例如fprime-util build --ut编译项目单元测试;-v, --verbose:输出详细调试信息;-p PATH, --path PATH:手动指定fprime-util运行目录,例如fprime-util check -p SigGen;-d DEPLOY, --deploy DEPLOY:手动指定部署目录,例如fprime-util build -d ~/fprime。
以 Ref 参考应用为例
仓库中的 Ref 是一个完整组装、可直接在 Linux 与 macOS 上运行的参考应用,用于在嵌入式硬件就绪前快速验证安装与运行。构建流程如下:
cd fprime/Ref fprime-util generate生成一次构建目录后,无需重复执行generate(除非构建目录被删除)。随后执行:
fprime-util build即针对当前系统平台构建出可运行的二进制。
运行地面系统(GDS)
F´ 附带一个基于浏览器的测试用地面系统,可快速测试 F´ 代码,且会自动启动 Ref 应用二进制:
cd fprime/Ref fprime-gds之后可在 "Commanding"、"Event"、"Channels" 标签页观察 F´ 代码的实际运行;"Logs" 标签页中的Ref.log记录 Ref 应用标准输出。若只想运行地面系统而不启动应用:
fprime-gds --no-app随后可手动从构建产物目录启动 Ref 应用:
cd fprime/Ref/build-artifacts/<platform>/bin/ ./Ref -a 127.0.0.1 -p 50000F´ GDS 默认使用 50000 端口,更多信息可通过fprime-gds --help查看。
Ref 应用的完整拓扑(组件实例及其连接)定义在 Ref/Top/topology.fpp,其中可以看到cmdDisp(指令分发)、eventLogger(事件记录)、tlmSend(遥测发送)、rateGroup1Comp等组件实例与Ports_RateGroups、Ports_StaticMemory等端口枚举,是理解 F´ 拓扑建模的直观样例。
目标平台与交叉编译
fprime-util默认以native平台构建(即宿主机平台)。需要交叉编译时,可将平台名作为位置参数传入(见 fprime-util 用户指南),例如为树莓派交叉编译:
fprime-util generate raspberrypi fprime-util build raspberrypi仓库中的 RPI 参考应用演示了面向树莓派(Raspberry Pi 2 Model B)的完整交叉编译流程,其构建步骤包括:在树莓派配置菜单中启用 SPI 与 UART、在宿主机(如 Ubuntu)安装gcc-arm-linux-gnueabihf与g++-arm-linux-gnueabihf交叉编译器,然后生成并构建针对raspberrypi平台的构建目录。由于 RPI 示例在 CMakeLists 中设置了默认工具链文件,生成时无需在命令行额外指定工具链。
用 settings.ini 定制部署构建
每个 F´ 部署可通过根目录下的 settings.ini 文件配置构建默认值(配置详解见 settings.ini 配置指南)。该文件采用 Pythonconfigparser兼容的 INI 格式,位于包含项目根CMakeLists.txt(含project()调用)的部署目录中,仅对所在部署生效。
[fprime]段可配置的关键项:
| 配置项 | 说明 |
|---|---|
project_root | F´ 项目根路径 |
framework_path | F´ 框架根路径 |
library_locations | 附加 F´ 库与组件的路径,多个路径以:分隔 |
default_toolchain | 默认构建平台,缺省为native |
default_ut_toolchain | 默认单元测试构建平台,缺省为native |
environment_file | 构建期间设置环境变量的 ini 文件 |
config_directory | 配置头文件目录 |
此外可用与平台同名的段(如[gr712-vxworks6])为特定平台覆盖config_directory、install_destination、environment_file等设置。注意:修改settings.ini仅在fprime-util generate阶段生效,改动后必须重新生成构建。
仓库内开箱即用的框架内容
除了建模工具与构建体系,用户指南 还总结了 F´ 仓库自带的核心框架内容:
- 服务组件(Svc):提供指令收发、事件记录、遥测管理等航天嵌入式系统最基础的指令与通信功能,仓库中
Svc/目录下的CmdDispatcher、ActiveLogger、TlmChan、Health、FatalHandler等组件即属此类; - Autocoder 自动编码器:定义可扩展的 XML schema,用户可据此以组件、端口、拓扑等高层抽象描述飞行软件应用,Autocoder 自动将模型翻译为 C++ 类,大幅减少构建嵌入式系统所需的样板代码(实现位于 Autocoders/);
- 操作系统抽象层(OSAL):以通用方式提供 RTOS 与非实时操作系统 API 的实现,抽象线程、互斥锁、消息队列、文件、定时器与时钟等特性,使上层代码可无修改地切换操作系统。仓库开源实现覆盖 Linux 与 macOS(Windows 下经 WSL 使用 Linux 实现),对应目录为 Os/ 下的
Linux/、MacOs/、Posix/等平台实现; - 地面数据系统(GDS):开箱即用的地面系统解决方案,可在 Linux、macOS、Windows 上运行,提供 GUI 工具与集成测试 API,用于集成测试与遥测快速查看。其工作方式为:用户定义组件与遥测后,字典(dictionary)由设计自动生成并被 GDS 读取;
- Linux 驱动组件:
Drv/目录下提供 UART、I2C、SPI 等标准硬件的基础驱动实现示例,方便选用 Linux 的用户直接对接常用外设。
资源与帮助
- 入门后可继续阅读 用户指南,其中分用户手册、最佳实践、开发者文档三部分,覆盖端口/组件/拓扑、数据类型、单元测试、开发流程、GDS 使用、FPP 建模与 CMake 指南等主题;
- 新用户建议按 HelloWorld 教程 走完 F´ 项目的完整开发流程;
- 设计理念与架构细节可参阅 软件架构设计 等设计文档;
- 遇到安装问题可查阅 troubleshooting.md;
- 项目版本历史与发布产物记录在 Releases 中,仓库根目录同时提供 CITATION.cff 用于学术引用。
总而言之,从安装引导、项目创建到fprime-util构建、GDS 联调与交叉编译,F´ 提供了一条从零到可运行飞控系统的完整路径。其组件/端口/拓扑的架构抽象与命令、事件、通道、参数的内置数据构造,使得开发者可以专注于业务组件本身,而把通信、调度、遥测等基础设施交给框架。
- 嵌入式
- 系统编程
【免费下载链接】fprime
F´ - A flight software and embedded systems framework
相关推荐
F´(F Prime)快速上手指南:NASA 组件化飞行软件框架的安装、架构与开发入门
F´(F Prime)快速上手指南:NASA 组件化飞行软件框架的安装、架构与开发入门 F´(F Prime)是一个源自美国宇航局喷气推进实验室(JPL)的组件
嵌入式系统编程F´ (F Prime) 入门指南:组件驱动的飞行软件框架与首个应用搭建
F´ F Prime 入门指南:组件驱动的飞行软件框架与首个应用搭建 F´(F Prime)是一个组件驱动的软件框架,面向航天飞行软件及各类嵌入式应用的快速开发
嵌入式系统编程F´(F Prime)C++ 文档体系与核心软件包架构导航指南
F´(F Prime)C++ 文档体系与核心软件包架构导航指南 本文是 F´(F Prime)飞行软件框架自动生成的 C++ API 文档主页( docs/do
嵌入式系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考