Skip to content

Core Flight System

The core Flight System is a flight software product line developed by the Flight Software Systems Branch at NASA GSFC. It replaces per-mission software with a layered framework plus a set of pluggable applications, and it has flown on spacecraft from a 6U CubeSat to Class A observatories [1][2]. Where the Mars Exploration Rover software is one team’s 93 modules and 300,000 source lines built for one vehicle [6], cFS is built so that a component can be reused with no source change at all, using compile-time configuration parameters for every point of variation [1].

Four layers [1][2]:

LayerContentsInterface
1Real-time operating system and board support packageOS Abstraction Layer and Platform Support Package APIs
2core Flight Executive (cFE)cFE API
3Applications and shared librariescFE API
ToolsGround system, build system, unit test framework, timing analyzer

The cFE provides five services that the heritage analysis found common to most flight software projects: a Software Bus, Time Services, Event Services, Table Services and Executive Services [1][3]. The Software Bus is a publish and subscribe inter-application messaging system built on CCSDS packet formats, supporting single and multi-processor configurations. Table Services manage binary files of application-defined parameters that the ground can load and dump at runtime [3]. Event Services carry time-stamped parameterized text messages in four severity classes, filterable per message and per class [1]. Executive Services supply the runtime environment, and because cFE resources are tracked per application, an individual application can be started, stopped or loaded while the vehicle is flying. The framework is developed and maintained to the NASA Class B software process, and the open source release includes all Class B artifacts alongside the source.

The community applications carried by most missions are Checksum, Data Storage, File Manager, Housekeeping, Limit Checker, Memory Dwell, Memory Manager, Scheduler, Stored Command, Health and Safety, CFDP file transfer and a Software Bus network application [3]. Which application object files load at startup is decided by a script file read from a file system in EEPROM, so the load list is data rather than a link map [1][3].

The eight architecture goals stated for the framework are reducing time to deploy high quality flight software, reducing schedule and cost uncertainty, facilitating formalized reuse, enabling collaboration across organizations, simplifying on-orbit software maintenance over mission lifetimes exceeding ten years, scaling from small instruments to Hubble-class observatories, providing a platform for prototyping, and creating common standards and tools across the center [3]. Features are deprecated only on major versions, with tooling that warns applications using a deprecated feature.

Ported operating systems in the 6.4.2 baseline were POSIX Linux for development, RTEMS, VxWorks, VxWorks SMP and FreeRTOS, each with its own platform support package [1]. The reference distribution ships PROM boot flight software and board support package beneath that layer, and the framework itself has no boot responsibility [3].

The Global Precipitation Measurement observatory, launched 27 February 2014, is a NASA Class B mission with articulating solar arrays, a gimbaled high gain antenna and nearly fully redundant hardware under flight software control [1]. It flies a RAD750 under VxWorks with 4 MB of EEPROM in two duplicate 2 MB banks and 24 MB of SRAM.

ComponentLogical lines of code, non-tableConfiguration parametersEEPROM bytes
cFE12,930139 across five services341,561
CFDP8,5593385,812
Checksum2,8731535,242
Data Storage2,4292740,523
File Manager1,8532216,272
Health and Safety1,5314515,071
Housekeeping57588,059
Limit Checker2,0741331,026
Memory Dwell1,03588,617
Memory Manager1,9582515,840
Scheduler1,1641935,809
Stored Command, 124 command sequences2,31426104,960

Source: [1], Table 3.

EEPROM is the most constrained resource on GPM and the cFS occupies about 35 percent of one 2 MB bank; the cFE image and application table images in that column are uncompressed while the application code images are compressed [1]. By lines of code the cFS accounts for 42 percent of the GPM flight software, excluding the VxWorks operating system.

The development cost avoided was estimated with SEER-SEM tuned for NASA missions: building the complete cFS suite from scratch for a Class B mission of GPM’s complexity is 49 person years [1]. Adopting it still costs tuning configuration parameters and adjusting task priorities, put at about 2 person years for a mission of that complexity and class [1].

MissionLaunchProcessorRTOSRole of cFS
Lunar Reconnaissance Orbiter2009RAD750VxWorkscFE co-developed; cFE API unchanged since
Radiation Belt Storm Probes, JHU APL2012cFE
Morpheus, JSC2013 test flightscFS
GPM2014RAD750VxWorkscFS co-developed
LADEE, Ames2014cFS
Magnetospheric Multiscale2015custom Coldfire command and data handlingRTEMScFS
Dellingr 6U CubeSat2017cFS

Sources: [1] and [2]. As of 2016 the cFE application programming interface had not changed since the Lunar Reconnaissance Orbiter launch in 2009. Missions then in development ranged from NASA JSC Orion backup flight computer to Dellingr, spanning NASA software classes A through D [1]. The framework exists because the earlier Goddard practice of clone-and-own reuse, copying components from previous missions by functional similarity, left the scope of changes uncontrolled, forced a full verification and validation effort on each new mission and kept no single maintained lineage per component [2].

The open source release of February 2015 covered twelve commonly used applications and completed the stack [1]. A NASA-wide configuration control board drawn from Ames, Glenn, Goddard, Johnson, Langley, Marshall and JHU APL then took ownership, and is responsible for keeping all baseline products at NPR 7150.2B Class B [1].

An independent static architecture analysis by the Fraunhofer Center for Experimental Software Engineering, using the SAVE tool on the cFS source, checked the design rules that the reuse claim rests on [5]. Two held: cFE applications depend on the cFE core and not the reverse, and no two applications interact directly rather than through the Software Bus. Two deviations were found: a cyclic dependency from the operating system layer back to the core, avoidable by moving one header, and two applications, Memory Manager and File Manager, that reached past the cFE API to include an OS abstraction header directly. Of the six applications examined, Housekeeping, Memory Dwell, Memory Manager, Checksum, File Manager and Limit Checker, all six use Executive Services to initialize, Event Services to report, and the Software Bus to send and receive; only some use Table, File and Time Services directly, but none of the three can be dropped from a build because the first three services depend on them. The analysis was static only, and the authors listed dynamic dependency extraction, message ordering and timing measurement of software bus bottlenecks as work not yet done.

Resource Prospector, the canceled lunar volatiles mission managed at Ames with the rover built at NASA JSC, ran its rover flight software on cFS. The team’s stated reason was reuse: cFE, the Operating System Abstraction Layer and cFE-compliant applications supplied the core spacecraft functions while rover-specific applications were developed against them. The architecture was exercised on the RP15 rover testbed, taken from concept to a rover driving in the Johnson lunar rock yard within one year and operated by a team distributed across Ames, Johnson and Kennedy; the 2015 build 1 delivered hardware interfaces, basic mobility, waypoint driving, odometry and inertial measurement unit localization, basic error checking and camera services [4].

Three costs recur in the published accounts. The framework does not supply flight command ingest or telemetry output applications; the open source release carries only UDP-based laboratory versions, and every mission has had to write its own transport-specific versions, which new users report as the hardest part of deployment [1]. The framework is stated to provide Class B artifacts in full and only a subset of what a Class A mission needs [3]. There is no reusable device plug-in design pattern, so hardware interface applications are written from scratch each time [1]. And the coupling runs both ways: as the number of supported platforms grows, applications become harder to keep portable, and as the number of applications grows, supporting a platform becomes harder [3].

References

  1. McComas, D., Wilmot, J. and Cudmore, A. (2016). The Core Flight System (cFS) Community: Providing Low Cost Solutions for Small Spacecraft. Source
    BibTeX
    @inproceedings{mccomas2016core,
      author = {McComas, David and Wilmot, Jonathan and Cudmore, Alan},
      title = {The Core Flight System (cFS) Community: Providing Low Cost Solutions for Small Spacecraft},
      booktitle = {30th Annual AIAA/USU Conference on Small Satellites},
      year = {2016},
      url = {https://ntrs.nasa.gov/citations/20160010300}
    }
  2. McComas, D. (2018). Increasing flight software reuse with OpenSatKit. IEEE. Source archived copy
    BibTeX
    @inproceedings{mccomas2018core,
      author = {McComas, David},
      title = {Increasing flight software reuse with OpenSatKit},
      booktitle = {2018 IEEE Aerospace Conference},
      year = {2018},
      pages = {1--8},
      publisher = {IEEE},
      doi = {10.1109/AERO.2018.8396631},
      url = {https://doi.org/10.1109/AERO.2018.8396631}
    }
  3. NASA. (2020). Core Flight System (cFS) Training. NASA, NASA/TM-20205000691 Rev 1. Source
    BibTeX
    @techreport{nasa2020core,
      title = {Core Flight System (cFS) Training},
      year = {2020},
      institution = {NASA},
      number = {NASA/TM-20205000691 Rev 1},
      url = {https://ntrs.nasa.gov/citations/20205011588},
      author = {{{NASA}}}
    }
  4. Andrews, D., Colaprete, A., Quinn, J., Bluethmann, W. and Trimble, J. (2015). Resource Prospector (RP) - Early Prototyping and Development. NASA, 20150018395. Source
    BibTeX
    @inproceedings{andrews2015resource,
      title = {Resource Prospector (RP) - Early Prototyping and Development},
      author = {Andrews, Dan and Colaprete, Anthony and Quinn, Jacqueline and Bluethmann, William and Trimble, Jay},
      year = {2015},
      booktitle = {AIAA SPACE 2015 Conference and Exposition},
      address = {Pasadena, CA},
      publisher = {American Institute of Aeronautics and Astronautics},
      institution = {NASA},
      number = {20150018395},
      url = {https://ntrs.nasa.gov/citations/20150018395}
    }
  5. Ganesan, D., Lindvall, M. and McComas, D. (2009). Analyzing the Core Flight Software (CFS) with SAVE. ntrs.nasa.gov/citations/20090004613 archived copy
    BibTeX
    @misc{ganesan2009analyzing,
      author = {Ganesan, Dharmalingam and Lindvall, Mikael and McComas, David},
      title = {Analyzing the Core Flight Software (CFS) with SAVE},
      year = {2009},
      organization = {Fraunhofer Center for Experimental Software Engineering and NASA Goddard Space Flight Center},
      url = {https://ntrs.nasa.gov/citations/20090004613}
    }
  6. Reeves, G. E. (2005). An Overview of the Mars Exploration Rovers Flight Software. Source
    BibTeX
    @inproceedings{reeves2005overview,
      author = {Reeves, Glenn E.},
      title = {An Overview of the Mars Exploration Rovers Flight Software},
      booktitle = {2005 IEEE International Conference on Systems, Man and Cybernetics},
      year = {2005},
      address = {Waikoloa, Hawaii},
      url = {https://hdl.handle.net/2014/37499}
    }