ROMEO Onboard Software (OBSW)
What is ROMEO?
For a broader introduction and documentation refer to the OBSW Wiki in the ROMEO Knowledge Base. This README gives a very brief introduction and aims to document the compile process for experienced developers. Research and Observation in Medium Earth Orbit (ROMEO) is the third small satellite of the Institute of Space Systems (IRS), University of Stuttgart with the objective of technology demonstration in Medium and Low Earth Orbit (MEO/LEO) with a mission duration of 1 year.
The Onboard Software (OBSW) is written in Rust for run-time stability. The implemented framework is losely based on the C++ Flight Software Framework (FSFW) developed at the IRS in cooperation with industry. The shift to Rust was discussed in Paul Nehlich's master thesis: Analysis and preparation of the transformation of the Flight Software Framework from C++ to Rust.
(design from IRS ROMEO Website)
How to Configure This Repository? TODO
First Stage Bootloader (FSBL)
FSBL code is at https://github.com/Xilinx/embeddedsw/tree/xilinx_v2024.1/lib/sw_apps/zynq_fsbl
Scope
This is the central repository for the flight software of the ROMEO satellite. It will eventually become the new base of a Rust Flight Software Framework replacing the C++ Flight Software Framework of the FLP, EIVE and SOURCE.
The current working steps are:
-
Build Toolchain (Daniel Philipp)
-
Hardware itnerfaces (Paul Nehlich)
- CAN Bus (Andy Hinkel)
- RS422 (Paul Nehlich, Joris Janßen)
-
Device Handling Fundamentals (Joris Janßen)
-
Framework Core Component Implementation (Paul Nehlich, Ulrich Mohr)
-
Integration of Space Packets and PUS Services (to be scheduled, Paul Nehlich)
-
OBC Board support and Linux Boot Management (Michael Steinert)
-
Device Integration
-
AOCS
-
TCS
-
Communications Interfaces
How to build the software?
Consider using Docker or setting up a local compile toolchain. Please refer to BUILD_WITH_DOCKER.md or BUILD_WITH_CMAKE.md.
Compiling Annotations
Bare metal rust on the Zynq requires the use of C-libraries, which affects the compilation.
The current setup includes cmake which calls cargoto compile the rust mission and framework creates as static libraries.
Then, gcc is used to link those two libraries , the Xilinx Board Support Packages (BSP) (incl. all hardware drivers), and supplier libraries in the final binary.
The canocial compiler is debian bookkworm's arm-none-eabi-gcc 12.2 using newlib 3.3.0.
The minimum set of compiler (not linker) flags (as used by Xilinx to build the First Stage Bootloader (FSBL)) are
- hardware (HW) type:
-mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard - function and data sections, to be able to garbage-collect unused code:
-ffunction-sections -fdata-sections - optimization for release:
-O2
Link Time Optimization (LTO) TBD
How to debug on hardware?
Please refer to DEBUG_ON_ZEDBOARD.md