OBSW for the EIVE project
Go to file
Robin Müller 23f3c1550b arduino update 2020-10-13 20:56:02 +02:00
arduino@3ea528dc5f arduino update 2020-10-13 20:56:02 +02:00
bsp_linux arduino stuff added 2020-10-01 02:06:39 +02:00
config arduino stuff added 2020-10-01 02:06:39 +02:00
etl@f6ce3f59bd added etl lib 2020-09-16 15:26:49 +02:00
fsfw@698023bf73 fsfw update 2020-10-13 20:25:39 +02:00
hosted arduino stuff added 2020-10-01 02:06:39 +02:00
mission arduino stuff added 2020-10-01 02:06:39 +02:00
test hosted build working 2020-09-30 20:52:51 +02:00
tmtc@ee295fa849 tmtc update 2020-09-30 17:48:52 +02:00
unittest linux working 2020-09-16 16:22:36 +02:00
.gitignore linux working 2020-09-16 16:22:36 +02:00
.gitmodules added arduino submodule 2020-10-12 20:19:04 +02:00
Makefile linux working 2020-09-16 16:22:36 +02:00
Makefile-Hosted binary renamed 2020-09-30 21:21:41 +02:00
README.md more similar to example now 2020-09-30 17:17:01 +02:00

README.md

EIVE On-Board Software

Linux

These steps were tested for Ubuntu 20.04. If not done yet, install the full C++ build chain:

sudo apt-get install build-essential

Linux has a limit to message queue message. Please see the section to set up UNIX environment for more information. Sometimes, special steps are necessary so the real-time functionalities can be used without root privileges. Instructions are contained in the setup section for UNIX as well.

Building the software

  1. Clone the repository with
git clone https://egit.irs.uni-stuttgart.de/fsfw/fsfw_example.git
  1. Update all the submodules
git submodule init
git submodule sync
git submodule update
  1. After that, the linux binary can be built with:
make -j all

to compile for Linux. All will build the debug version, which can also be built with the target debug. The optimized release version can be built with the target release.

  1. Run the binary located inside the _bin folder.

Setting up UNIX environment for real-time functionalities

Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities used by the UNIX pthread module are restricted, which will lead to permission errors when creating these tasks and configuring real-time properites like scheduling priorities.

To solve this issues, try following steps:

  1. Edit the /etc/security/limits.conf file and add following lines at the end:
<username>   hard   rtprio  99
<username>   soft   rtprio  99

The soft limit can also be set in the console with ulimit -Sr if the hard limit has been increased, but it is recommended to add it to the file as well for convenience. If adding the second line is not desired for security reasons, the soft limit needs to be set for each session. If using an IDE like eclipse in that case, the IDE needs to be started from the console after setting the soft limit higher there. After adding the two lines to the file, the computer needs to be restarted.

It is also recommended to perform the following change so that the unlockRealtime script does not need to be run anymore each time. The following steps raise the maximum allowed message queue length to a higher number permanently, which is required for some framework components. The recommended values for the new message length is 130.

  1. Edit the /etc/sysctl.conf file
sudo nano /etc/sysctl.conf

Append at end:

fs/mqueue/msg_max = <newMsgMaxLen>

Apply changes with:

sudo sysctl -p

A possible solution which only persists for the current session is

echo <newMsgMax> | sudo tee /proc/sys/fs/mqueue/msg_max

or running the unlockRealtime script.

  1. Run the shell script inside the linux folder
./unlockRealtime

This script executes the sudo setcap 'cap_sys_nice=eip' \<application\> command on the binaries, increases the soft real time limit of the current session and increases the maximum number of message queues by setting /proc/sys/fs/mqueue/msg_max. All changes are only applied for the current session (read 2. and 3. for 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, the hard real-time limit of the system might not be high enough (see step 1).