F´ (F Prime) 入门指南:组件驱动的飞行软件框架与首个应用搭建
【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprime
F´(F Prime)是一个组件驱动的软件框架,面向航天飞行软件及各类嵌入式应用的快速开发与部署,最初由美国喷气推进实验室(Jet Propulsion Laboratory)开发,并已在多个空间任务中得到实际部署。本文基于本仓库(fprime)的官方入门文档,系统讲解 F´ 的框架定位、核心特性、环境安装、项目创建流程与故障排查方法,并对照仓库源码说明这些能力在代码层面的落点,帮助读者快速完成从环境准备到运行第一个 Hello World 应用的完整链路。
F´ 是什么:面向飞行软件与嵌入式系统的组件驱动框架
F´ 的定位非常明确:通过组件化的架构,让开发者快速构建并部署航天飞行软件及其他嵌入式应用。官方入门文档(docs/getting-started/index.md)给出了如下定义:
F´(F Prime)是一个组件驱动的框架,支持航天飞行软件及其他嵌入式应用的快速开发与部署。它最初由喷气推进实验室开发,并已成功部署在多个空间应用上。它特别适合(但不限于)小规模航天系统,如立方星(CubeSat)、小卫星(SmallSat)和科学载荷(instruments)。
这意味着 F´ 并不是一个"通用嵌入式 RTOS",而是一套围绕组件、端口、拓扑组织软件的系统级框架:开发者把飞行软件拆解为若干具有清晰接口的组件,通过建模工具定义组件间的连接关系,再由代码生成器自动产出 C++ 骨架,最终把精力集中在领域业务逻辑的填充上。
从本仓库的顶层目录结构可以直观看到框架的四大支柱(对应 README.md 中的 "What does F´ provide" 一节):
| 仓库目录 | 职责 | 典型内容 |
|---|---|---|
Fw/ | C++ 核心框架 | 组件基类(Fw/Comp/)、端口抽象(Fw/Port/)、遥测/事件/命令/参数的数据结构(Fw/Tlm/、Fw/Log/、Fw/Cmd/、Fw/Prm/)、缓冲与时间等基础类型 |
Os/ | 操作系统抽象层 | 任务、队列、互斥量、信号量、文件系统、时间的跨平台接口(Os/Posix/、Os/Linux/、Os/Stub/等实现) |
Drv/ | 驱动与通信 | UART、I²C、SPI、GPIO 及 TCP/UDP 套接字等设备与链路驱动 |
Svc/ | 标准服务组件库 | 指令分发(Svc/CmdDispatcher/)、遥测通道(Svc/TlmChan/)、事件管理、参数数据库、文件上下行、速率组等飞行就绪组件 |
STest/ | 场景化测试框架 | 规则、场景、随机等单元测试辅助设施 |
cmake/autocoder/ | 自动代码生成 | FPP 模型到 C++ 的转换与代码生成脚本 |
五大核心特性:从组件架构到测试工具链
入门文档用五条特性概括了 F´ 的能力边界,配套的 docs/getting-started/features.md 则逐条展开了设计意图。这里结合仓库源码逐一解读:
1. 具有清晰接口的组件架构
组件是 F´ 的基本单元,组件之间通过**类型化端口(typed ports)**通信。docs/getting-started/features.md指出,这种组件化架构带来高度模块化与软件复用——为一个应用编写的组件可以无缝复用到其他应用。
在仓库中,这一特性体现在两处:
- 端口与接口定义:
Drv/Interfaces/下的*.fpp文件(如ByteStreamDriver.fpp、Gpio.fpp、I2c.fpp、Spi.fpp)定义了驱动的标准端口;Fw/Interfaces/定义了命令、遥测、事件、数据产品等框架级接口。 - 复用证据:
FppTestProject/FppTest/是一个专门的 FPP 测试工程,其中的组件、拓扑、接口测试覆盖了各种端口与组件形态,印证了"写一次、多处复用"的可测试性设计。
2. 提供核心能力的 C++ 框架
框架内置队列、线程与操作系统抽象等核心能力。features.md明确说明:框架与代码生成器提供了 F´ 部署所需的全部样板代码,包括线程管理、组件间通信、命令/遥测/参数处理。
在仓库中,Fw/Comp/下的ActiveComponentBase、QueuedComponentBase、PassiveComponentBase分别对应主动(自带任务线程)、队列化、被动三种组件模型;Os/目录则通过Task、Queue、Mutex、CountingSemaphore等抽象屏蔽了 Posix/Linux/裸机等平台差异。
3. 系统设计与代码自动生成工具
开发者用建模工具编写高层系统规格(FPP 模型),自动生成 C++ 实现骨架,再填充领域代码。仓库中:
- 建模语言与转换定义位于 Fpp/ToCpp.fpp;
- 代码生成流水线位于 cmake/autocoder/,包含 FPP 到 C++ 的转换脚本;
- 每个组件目录下的
.fpp文件(例如 Svc/ActiveRateGroup/ActiveRateGroup.fpp)就是这种"模型驱动"写法的直接体现:.fpp声明端口、命令、遥测与事件,同名.cpp/.hpp承载实现。
4. 飞行就绪的标准组件库
features.md强调:F´ 附带大量经过飞行验证的现成组件,覆盖嵌入式系统的大部分常规功能——指令、遥测采集、系统事件采集、地面交互等,"多数时候应用的大部分工作已经完成"。
仓库中 Svc/ 目录即为该组件库:CmdDispatcher(指令分发)、TlmChan(遥测通道)、EventManager(事件管理)、PrmDb(参数数据库)、FileUplink/FileDownlink(文件上下行)、BufferManager(缓冲区管理)、ActiveRateGroup(速率组调度)等;设备侧则由 Drv/ 提供 UART、I²C、SPI、GPIO 与 TCP/UDP 驱动。开发者通常只需为特定用例开发少量自有组件。
5. 单元级与系统级测试工具
框架自带单元测试与系统集成测试设施。仓库证据:
- STest/ 提供基于规则(Rule)与场景(Scenario)的测试框架;
- FppTestProject/FppTest/ 内含大量针对数组、枚举、结构体、组件、状态机、类型大小等的测试工程;
- TestDeploymentsProject/Ref/ 是参考部署(Reference Deployment),可作为系统级集成测试与部署结构的样例。
features.md还将这些能力总结为五类标准工具:样板代码自动生成(Autocoder)、基于 CMake 的跨平台构建系统、可对接真实硬件的开发用地面系统(GDS)、针对 F´ 代码的单元测试框架、以及系统级集成测试框架。
系统要求:安装前的环境清单
安装前请确认工作站满足以下要求(详见 docs/getting-started/installing-fprime.md):
- 操作系统:Linux、macOS,或 Windows 上的 WSL;
- git;
- 编译器:Clang 或 GNU C/C++(如
gcc、g++); - Python 3.10+、虚拟环境(venv)与 PIP;建议使用最新版 PIP(版本建议见下文故障排查表);
- (可选)Rust 工具链(
cargo、rustc):仅构建依赖 Rust 的组件时需要;当cargo不在PATH中时,相关组件会被自动跳过,框架其余部分正常构建。
此外,对于 x86_64/aarch64 之外的构建主机架构,或 PIP 版本较旧的系统,还需要安装 Java。Ubuntu/Debian 用户的 Python/PIP 安装注意事项见下文故障排查。
创建你的第一个 F´ 项目
F´ 的工具生态以 Python 包形式通过 PIP 分发,并由F´ Bootstrap 工具装入项目的虚拟环境(官方推荐每个项目一个虚拟环境)。整体流程如下。
第 1 步:安装 Bootstrap 工具
pip install fprime-bootstrap提示:部分 macOS 用户会遇到 SSL 错误,可先按下文"macOS 上的 SSL 错误"修正后再重试。
第 2 步:创建新项目
fprime-bootstrap project命令会交互式询问项目信息,示例应答如下:
[1/2] Project repository name [my-fprime-project]: my-project [2/2] Project top-level namespace [MyFprimeProject]: MyProject该命令执行两个动作:
- 创建一个带标准 F´ 项目结构的新 git 仓库;
- 在项目内创建虚拟环境并安装依赖。
从本仓库的部署样例可以预期新项目骨架的样子:TestDeploymentsProject/Ref/展示了典型参考部署的目录组织(拓扑.fpp、组件实现、CMakeLists.txt、settings.ini等);仓库根目录的 settings.ini 则演示了构建工具的配置文件格式。
第 3 步:激活虚拟环境
cd my-project . fprime-venv/bin/activate⚠️ 重要:每次使用该项目时都要记得先激活虚拟环境。
激活后即可使用fprime-util(构建/运行/测试)、FPP 编译等整套工具链。这一步也与本仓库 README 的 Getting Started 一节描述一致:pip install fprime-bootstrap后创建项目,随后进入 HelloWorld 教程走完开发全流程。
在已有项目中工作
对于已获取的 F´ 项目,安装其关联工具的步骤如下(同样见 installing-fprime.md):
- 先为该项目创建并激活虚拟环境;
- 获取项目代码——使用 git 且带子模块时,务必执行:
git submodule update --init --recursive- 安装指定版本的 F´ 工具:
pip install -r <project>/fprime/requirements.txt注意:如果项目自带
requirements.txt,优先使用项目自己的文件。
本仓库根目录恰好就有一份 requirements.txt,列出了 F´ 框架自身依赖的 Python 工具版本,是"既有项目按 requirements 安装"的实际样例。
故障排查:常见安装问题速查
installing-fprime.md的 Troubleshooting 章节按平台整理了已知问题,完整收录如下。
PIP 版本推荐表
部分 F´ Python 包建议用较新的 PIP 安装;不满足推荐版本的系统将需要 Java,并以较慢速度运行 FPP 工具:
| 系统 | 推荐的pip版本 |
|---|---|
| macOS (10.9+) | >= 21.0.1 |
| x86_64 | >= 19.3 |
| aarch64 | >= 20.3 |
fprime-util: command not found
若在虚拟环境中使用却提示"command not found",多半是新终端里没有 source 环境。先在终端中激活:
. <path/to/project>/fprime-venv/bin/activate如果不使用虚拟环境安装,PIP 有时会把用户工具装到$HOME/.local/bin,需要把该目录加入PATH。
Helper script 'fpp-redirect-helper' exited with reason: Permission denied
该错误通常是辅助脚本fprime/cmake/autocoder/fpp-wrapper/fpp-redirect-helper丢失了执行权限。先进入其目录确认:
cd fprime/cmake/autocoder/fpp-wrapper/ ls -l若确认不可执行,恢复权限:
chmod 700 fpp-redirect-helperWindows Subsystem for Linux (WSL) 版本 1:Bad CPIU Error
WSL 1 已不再受支持:在 WSL1 上生成与构建会非常慢,且常出现Bad CPIU Error。必须使用 WSL1 的用户需要直接安装 FPP 编译器。
Ubuntu / Debian:Java 与 Python PIP
Ubuntu 及多数 Debian 变体默认的 Python 3 并不包含 pip 包。在 Ubuntu/Debian 系系统上,先安装完整依赖:
sudo apt install git cmake default-jre python3 python3-pip python3-venv之后即可正常完成安装。
macOS 上 Python 3.8+ 的 SSL 错误
(Homebrew 安装的 Python 不适用此修复,建议改用 python.org 发布的 Python。)Python 3.8+ 自带的 OpenSSL 需要访问 macOS 根证书,若安装 fprime 时遇到:
Failed find expected download: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate在 macOS 终端中安装必要证书:
cd /Applications/Python\ 3.X/ ./Install\ Certificates.command然后重新尝试安装fprime-bootstrap。
Apple Silicon:Bad CPIU Error
未安装 Rosetta 的 Mac 用户会遭遇Bad CPIU Error,请安装 Rosetta,或直接安装 FPP 编译器。
下一步:Hello World 教程与进阶学习路径
入门文档强调,新用户应从 Hello World 教程开始:它完整走一遍 F´ 的安装过程、如何创建新项目,以及如何设计、实现并测试一个基本的 F Prime 应用。本仓库的教程索引位于 docs/tutorials/index.md,其中按推荐顺序列出了:
- Hello World:创建 F Prime 项目,设计、实现并测试基础组件——新用户首选;
- LED Blinker:面向嵌入式硬件的项目开发,覆盖管理组件、硬件驱动与交叉编译,目标是在 ARM 硬件上点亮 LED,并引入事件、遥测、命令与参数概念;
- Math Component:使用自定义端口与数据类型构建应用,深入事件、遥测、命令、参数的高级用法,并讲解组件单元测试;
- Cross-Compilation Setup:安装交叉编译所需依赖;
- Arduino LED Blinker:基于 LED Blinker,用
fprime-arduino工具链在 Arduino 微控制器上测试。
完成入门后,可继续深入以下资料:
- F´ 特性详解:了解框架在复用性、快速部署、可移植性、高性能、适应性、可分析性、标准组件库与标准工具链等方面的设计取舍;
- F´ 用户手册:涵盖技术总览、框架机制(拓扑构建、内存管理、状态机、支持的平台)、地面数据系统(GDS)使用、设计模式、CMake 构建系统与安全等章节;
- 安装与故障排查:安装细节与常见问题的最新说明。
结语:从入门文档到仓库代码的对应关系
入门文档描述的每一条能力都能在本仓库中找到具体落点:组件与端口定义对应Drv/Interfaces/、Fw/Interfaces/与各组件目录下的.fpp文件;C++ 框架对应 Fw/ 与 Os/;标准组件库对应 Svc/;测试工具对应 STest/ 与 FppTestProject/;自动代码生成对应 cmake/autocoder/ 与 Fpp/ToCpp.fpp。建议读者在跟随 Hello World 教程动手实践的同时,对照上述目录阅读源码,从而把"组件—端口—拓扑—生成—测试"的完整开发范式建立起来。
【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprime
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考