forked from ROMEO/fsw-ws
64 lines
3.6 KiB
Markdown
64 lines
3.6 KiB
Markdown
# ROMEO Onboard Software (OBSW)
|
|
## What is ROMEO?
|
|
|
|
[For a broader introduction and documentation refer to the OBSW Wiki in the ROMEO Knowledge Base](https://openproject.mm.intra.irs.uni-stuttgart.de/projects/romeo-phase-c/wiki/obsw). 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)_](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/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_](https://www.researchgate.net/publication/372439213_Analysis_and_preparation_of_the_transformation_of_the_Flight_Software_Framework_from_C_to_Rust).
|
|
|
|
<img src="https://egit.irs.uni-stuttgart.de/romeo/obsw/media/branch/main/romeo_design_from_website.bmp" alt="ROMEO Preliminary Design" width="400"/>
|
|
|
|
(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](./BUILD_WITH_DOCKER.md) or [BUILD_WITH_CMAKE.md](./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 `cargo`to 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
|
|
<!--Currently LTO is not enabled, as it might break linkage with the static STR library, TBC with STR supplier.
|
|
|
|
... to be completed ... TODO PAUL-->
|
|
## How to debug on hardware?
|
|
|
|
Please refer to [DEBUG_ON_ZEDBOARD.md](./DEBUG_ON_ZEDBOARD.md) |