Updated FSFW #14

Merged
meierj merged 33 commits from mueller/master into develop 2021-01-23 17:24:35 +01:00
5 changed files with 105 additions and 45 deletions
Showing only changes of commit af43722ee8 - Show all commits

136
README.md
View File

@ -16,55 +16,118 @@ Target systems:
* Linux Kernel https://github.com/XiphosSystemsCorp/linux-xlnx.git * Linux Kernel https://github.com/XiphosSystemsCorp/linux-xlnx.git
* Host System * Host System
* Generic software components which are not dependant on hardware can also * Generic software components which are not dependant on hardware can also
be run. All host code is contained in the hosted folder be run on a host system. All host code is contained in the `bsp_hosted` folder
* Tested for Linux (Ubuntu 20.04) and Windows 10 * Tested for Linux (Ubuntu 20.04) and Windows 10
* Raspberry Pi * Raspberry Pi
* EIVE OBC can be built for Raspberry Pi as well (either directly on Raspberry Pi or by installing a cross compiler) * EIVE OBC can be built for Raspberry Pi as well (either directly on Raspberry Pi or by installing a cross compiler)
The steps in the primary README are related to the main OBC target Q7S. The steps in the primary README are related to the main OBC target Q7S.
The CMake build system can be used to generate build systems as well (see helper scripts in `cmake/scripts`:
- Linux (Raspberry Pi): Using the `bsp_rpi` BSP folder, and a very similar cross-compiler.
For running the software on a Raspberry Pi, it is recommended to follow the steps specified in
[the fsfw example](https://egit.irs.uni-stuttgart.de/fsfw/fsfw_example/src/branch/mueller/master/doc/README-rpi.md#top) and
using the TCF agent to have a similar set-up process also required for the Q7S.
- Linux Host: Uses the `bsp_hosted` BSP folder and the CMake Unix Makefiles generator.
- Windows Host: Uses the `bsp_hosted` BSP folder, the CMake MinGW Makefiles generator and MSYS2.
## Setting up development environment ## Setting up development environment
### Installing Vivado the the Xilinx development tools
* Install Vivado 2018.2 and Xilinx SDK from https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html. * Install Vivado 2018.2 and Xilinx SDK from https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html.
Install the Vivado Design Suite - HLx Editions - 2018.2 Full Product Installation instead of the updates. It is recommended to use the installer Install the Vivado Design Suite - HLx Editions - 2018.2 Full Product Installation instead of the updates. It is recommended to use the installer.
* Install settings. In the Devices selection, it is sufficient to pick SoC &rarr; Zynq-7000: <br> * Install settings. In the Devices selection, it is sufficient to pick SoC &rarr; Zynq-7000: <br>
<img src="./doc/img/xilinx-install.PNG" width="50%"> <br>
<img src="./doc/img/xilinx-edition.png" width="40%"> <br>
<img src="./doc/img/vivado-hl-design.png" width="40%"> <br>
<img src="./doc/img/xilinx-install.png" width="40%"> <br>
* For supported OS refer to https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug973-vivado-release-notes-install-license.pdf * For supported OS refer to https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug973-vivado-release-notes-install-license.pdf
* Add path of linux cross-compiler to environment variables SDK\2018.2\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin * Add path of linux cross-compiler to permanent environment variables (`.profile` file in Linux):
* Install make (only on windows, SDK on Linux can use the make installed with the SDK) `<XilinxInstallation>SDK\2018.2\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin`
or set up path each time before debugging.
### Installing make on Windows ### Installing CMake and MSYS2 on Windows
1. Install NodeJS LTS
2. Install xpm
```sh 1. Install [MSYS2](https://www.msys2.org/) and [CMake](https://cmake.org/download/) first.
npm install --global xpm
```
3. Install Windows build tools (after installation also linux commands like mkdir can be used from windows) 2. Open the MinGW64 console. It is recommended to set up aliases in `.bashrc` to navigate to the
software repository quickly
```sh 3. Run the following commands in MinGW64
xpm install --global @xpack-dev-tools/windows-build-tools@latest
```
## Building the software ```sh
pacman -Syuuu
```
It is recommended to install the full base development toolchain
```sh
pacman -S base-devel
```
It is also possible to only install required packages
```sh
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb python3
```
### Installing CMake on Linux
1. Run the following command
```sh
sudo apt-get install cmake
````
## Building the software with CMake
When using Windows, run theses steps in MSYS2.
1. Clone the repository with 1. Clone the repository with
```sh ```sh
git clone https://egit.irs.uni-stuttgart.de/eive/eive_obsw.git git clone https://egit.irs.uni-stuttgart.de/eive/eive_obsw.git
``` ```
2. Update all the submodules 2. Update all the submodules
```sh
git submodule init
git submodule sync
git submodule update
```
3. Open Xilinx SDK 2018.2 ```sh
4. Import project git submodule init
git submodule sync
git submodule update
```
3. Ensure that the cross-compiler is working with `arm-linux-gnueabihf-gcc --version`.
It is recommended to run the shell script `win_path_helper_xilinx_tools.sh` in `cmake/scripts/Q7S`
or to set up the [PATH and the CROSS_COMPILE variable permanently](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)
in the `.profile` file.
4. Run the CMake configuration to create the build system in a `Debug` folder.
Navigate into the `eive_obsw` folder first.
```sh
cd cmake/scripts/Q7S`
./create_cmake_debug.sh
cd ../../..
```
This will invoke a Python script which in turn invokes CMake with the correct
arguments to configure CMake for Q7S cross-compilation.
5. Build the software with
```sh
cd Debug
cmake --build . -j
```
## Building in Xilinx SDK 2018.2
1. Open Xilinx SDK 2018.2
2. Import project
* File &rarr; Import &rarr; C/C++ &rarr; Existing Code as Makefile Project * File &rarr; Import &rarr; C/C++ &rarr; Existing Code as Makefile Project
5. Set build command. Replace \<target\> with either debug or release. 3. Set build command. Replace \<target\> with either debug or release.
* When on Linux right click project &rarr; Properties &rarr; C/C++ Build &rarr; Set build command to `make <target> -j` * When on Linux right click project &rarr; Properties &rarr; C/C++ Build &rarr; Set build command to `make <target> -j`
* -j causes the compiler to use all available cores * -j causes the compiler to use all available cores
* The target is used to either compile the debug or the optimized release build. * The target is used to either compile the debug or the optimized release build.
@ -73,11 +136,13 @@ git submodule update
* Target name: all * Target name: all
* Uncheck "Same as the target name" * Uncheck "Same as the target name"
* Uncheck "Use builder settings" * Uncheck "Use builder settings"
* As build command type: `make -j <target> WINDOWS=1` * As build command type: `cmake --build .`
6. Run build command by double clicking the created target or by right clicking * In the Behaviour tab, you can enable build acceleration
4. Run build command by double clicking the created target or by right clicking
the project folder and selecting Build Project. the project folder and selecting Build Project.
## Debugging the software (when workstation is directly conncected to Q7S) ## Debugging the software (when workstation is directly conncected to Q7S)
1. Assign static IP address to Q7S 1. Assign static IP address to Q7S
* Open serial console of Q7S (Accessible via the micro-USB of the PIM, see also Q7S user maunal chapter 10.3) * Open serial console of Q7S (Accessible via the micro-USB of the PIM, see also Q7S user maunal chapter 10.3)
* Baudrate 115200 * Baudrate 115200
@ -96,6 +161,7 @@ git submodule update
* When IP address is set to 192.168.133.10 and the netmask is 255.255.255.0, an example IP address for the workstation * When IP address is set to 192.168.133.10 and the netmask is 255.255.255.0, an example IP address for the workstation
is 192.168.133.2 is 192.168.133.2
4. Run tcf-agent on Q7S 4. Run tcf-agent on Q7S
* Tcf-agent is not yet integrated in the rootfs of the Q7S. Therefore build tcf-agent manually * Tcf-agent is not yet integrated in the rootfs of the Q7S. Therefore build tcf-agent manually
```sh ```sh
@ -307,17 +373,6 @@ a permanent solution). If running the script before executing the binary does
not help or an warning is issue that the soft real time value is invalid, not help or an warning is issue that the soft real time value is invalid,
the hard real-time limit of the system might not be high enough (see step 1). the hard real-time limit of the system might not be high enough (see step 1).
## Building and running the software on a host system
The host build can be built with following command
```sh
make -f Makefile-Hosted all -j
```
If compiling on Windows, it is recommended to supply `WINDOWS=1` .
A release build can be built by using the `mission` target.
## Flight Software Framework (FSFW) ## Flight Software Framework (FSFW)
An EIVE fork of the FSFW is submodules into this repository. An EIVE fork of the FSFW is submodules into this repository.
@ -339,6 +394,7 @@ Alternatively, changes from other upstreams (forks) and branches can be merged l
the same way. the same way.
## PCDU ## PCDU
Connect to serial console of P60 Dock Connect to serial console of P60 Dock
```` ````
picocom -b 500000 /dev/ttyUSBx picocom -b 500000 /dev/ttyUSBx

View File

@ -1,13 +1,13 @@
# CROSS_COMPILE also needs to be set accordingly or passed to the CMake command # CROSS_COMPILE also needs to be set accordingly or passed to the CMake command
#if(NOT DEFINED ENV{Q7S_ROOTFS}) if(NOT DEFINED ENV{Q7S_SYSROOT})
# message(FATAL_ERROR # message(FATAL_ERROR
# "Define the Q7S_ROOTFS variable to " # "Define the Q7S_ROOTFS variable to "
# "point to the raspbian rootfs." # "point to the raspbian rootfs."
# ) # )
#else() else()
# set(SYSROOT_PATH "$ENV{Q7S_ROOTFS}") set(SYSROOT_PATH "$ENV{Q7S_SYSROOT}")
#endif() endif()
if(NOT DEFINED ENV{CROSS_COMPILE}) if(NOT DEFINED ENV{CROSS_COMPILE})
set(CROSS_COMPILE "arm-linux-gnueabihf") set(CROSS_COMPILE "arm-linux-gnueabihf")

View File

@ -0,0 +1,4 @@
export PATH=$PATH:"/c/Xilinx/SDK/2018.2/gnu/aarch32/nt/gcc-arm-linux-gnueabi/bin"
export CROSS_COMPILE="arm-linux-gnueabihf"
export Q7S_SYSROOT="/c/Xilinx/SDK/2018.2/gnu/aarch32/nt/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc"

BIN
doc/img/vivado-edition.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB