1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年12月16日 |
---|
#47 in #sys
13KB
93 行
Rust中的CFS应用
此crate提供了Rust绑定到NASA的核心飞行执行程序(CFE)和操作系统抽象层(OSAL)。这些提供了一组核心软件组件,用于构建飞行软件系统,以及一种通过称为核心飞行软件(CFS)应用来扩展系统的机制。使用cfs-sys crate,您可以在Rust中编写您的CFS应用!
这是由bindgen生成的基本绑定。可以编写一个Rust接口来包装所有调用的不安全FFI和原始指针。
目的是通过一个集成到CFS构建过程中的Rust crate生成这些绑定。此构建过程将设置必要的环境并启动使用cargo构建CFS应用的过程,这将在当时生成必要的绑定。这确保了Rust绑定与其运行的CFS版本。
我正在开发一个示例CFS系统,该系统使用这些绑定来包含用Rust编写的CFS应用,以展示您如何将Rust包含在CFS系统中。该项目是一个正在进行中的项目,但可以在这里找到。
构建
此项目的目的是将其包含在集成到CFS构建过程中的CFS应用中。在这种情况下,生成的绑定将特定于CFS的安装,包括某些项目和板级特定定义。这还将提供指向CFS安装的环境变量,如下所述。
目标
该项目已通过使用POSIX版本的OSAL构建i686-unknown-linux-gnu目标进行测试。
要使用rustup获取此目标,请输入
rustup target add i686-unknown-linux-gnu
我尚未尝试使用Rust应用为嵌入式系统交叉编译CFS。
环境变量
要构建此项目,您需要定义以下环境变量
- OSAL_DIR
- PSP_DIR
- CFE_FSW
- CFE_CORE_SRC
- CFS_MISSION
- CFS_MISSION_INC
定义这些变量的最简单方法是克隆cFE github存储库及其子模块(至少OSAL - 应用目录中的子模块不是必需的)。
然后转到您克隆的cFE存储库,并输入以下命令以设置必要的环境变量
. ./setvars.sh
在此阶段,Rust应用将能够构建cfs-sys绑定。
关于共享对象大小的说明
当使用cfs-sys crate编写CFS应用时,我注意到我默认得到一个3MB的.so文件,其中lto=true和panic='abort'。剥离后降至约200KB。
为了参考,其他CFS应用的大小在8KB到20KB左右。这在某些环境中运行良好,但在空间上,如果能够拥有小型的对象文件,将有助于通过缓慢、间歇性的连接上传新的代码会更好。
使用xz压缩可以将大小减少到79KB,这已经不错了,但仍然不如C模块。
CFS中的宏
在特定的CFE模块中使用了带参数的宏(也称为内联函数)。Bindgen没有翻译这些,因此它们在绑定中缺失。它们可以作为C中的函数或在Rust中添加,但当前它们只是简单地缺失。以下列出了这些宏
- ccsds.h
- cfs_es.h
- cfs_evs.h
- cfs_tbl_filedef.h
- cfs_sb.h
- common_types.h
- cfe_platform_cfg.h
- cfe_psp_module.h
无运行时依赖
~0–2MB
~40K SLoC