From 86b3d7f2b51fa0d1a54063821950544f4220e36e Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 16:12:17 +0200 Subject: [PATCH] updated README --- CMakeLists.txt | 13 +---- doc/README-bbb.md | 79 ++++++++++++++++++++++++++++++ doc/README-rpi.md | 119 ++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 180 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15976fc..9f63926 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,6 @@ ################################################################################ # CMake support for the Flight Software Framework # -# Developed in an effort to replace Make with a modern build system. -# # Author: R. Mueller ################################################################################ @@ -15,8 +13,8 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -if(NOT OS_FSFW) - set(OS_FSFW host CACHE STRING "OS for the FSFW.") +if(NOT FSFW_OSAL) + set(FSFW_OSAL host CACHE STRING "OS for the FSFW.") endif() if(TGT_BSP MATCHES "arm/raspberrypi" OR TGT_BSP MATCHES "arm/beagleboneblack") @@ -163,13 +161,6 @@ if(CMAKE_CROSSCOMPILING) post_source_hw_os_config() endif() -if(NOT CMAKE_SIZE) - set(CMAKE_SIZE size) - if(WIN32) - set(FILE_SUFFIX ".exe") - endif() -endif() - if(TGT_BSP) set(TARGET_STRING "Target BSP: ${TGT_BSP}") else() diff --git a/doc/README-bbb.md b/doc/README-bbb.md index 4350668..f0606ac 100644 --- a/doc/README-bbb.md +++ b/doc/README-bbb.md @@ -409,3 +409,82 @@ scp @:/lib/arm-linux-gnueabihf/libc.so.6 /li If any custom libraries are used which rely on symlinks, it might be necessary to copy them or create them manually as well. + +# Building a cross-compile toolchain with crosstool-ng + +If you want to cross-compile the toolchain for the Raspberry Pi, you can do so +with the `crosstool-ng` tool. + +Alternatively, you can also download a cross-compile toolchain built with +crosstool-ng for the Beagle Bone Black +[from here](https://www.dropbox.com/sh/zjaex4wlv5kcm6q/AAABBFfmZSRZ7GE7ok-7vTE6a?dl=0) +inside the `x-tools` folder. + +## Ubuntu + +1. Install prerequisites to build toolchains + + ```sh + sudo apt-get install automake bison chrpath flex g++ git gperf gawk help2man libexpat1-dev + libncurses5-dev libsdl1.2-dev libtool libtool-bin libtool-doc python2.7-dev texinfo + ``` + +2. Install `crosstool-ng`. You can checkout a concrete version in the git repository, we will + simply build the master branch here: + + ```sh + git clone https://github.com/crosstool-ng/crosstool-ng.git + cd crosstool-ng/ + ``` + +3. Install `crosstool-ng`. + ```sh + ./bootstrap + ./configure --enable-local + make + sudo make install + ``` + + You can also install `ct-ng` locally by supplying `--prefix=` to the `configure` + command. You don't need `sudo` for the `make install` command if you do this + +4. You can get a list of architectures by running + + ```sh + ./ct-ng list-samples > samples.txt + cat samples.txt + ``` + + `ct-ng` includes pre-configurations for the Raspberry Pis. For example you can display the + settings for the Raspberry Pi 3 with the command + + ```sh + ./ct-ng show-arm-cortex_a8-linux-gnueabi + ``` + + You can add the configuration with + + ```sh + ./ct-ng arm-cortex_a8-linux-gnueabi + ``` + + You can now customize the build with + + ```sh + ./ct-ng menuconfig + ``` + + It is recommended to go to `Paths and misc options` and disable `Paths and misc options`. + It is also recommended to go to `Target Options` → `Floating Points` and enable hardware + flaoting point support. + + Remember to save the configuration. + +5. Finally, after finishing the configuration you can build the toolchain with + + ```sh + ./ct-ng build + ``` + + This takes 20-30 minutes. You can find the toolchain in the `~/x-tools` folder after building + has finished diff --git a/doc/README-rpi.md b/doc/README-rpi.md index ebb7e38..c8dc46f 100644 --- a/doc/README-rpi.md +++ b/doc/README-rpi.md @@ -3,13 +3,13 @@ Image taken from [Raspberry Pi website](https://www.raspberrypi.org/trademark-rules/). Raspberry Pi is a trademark of the Raspberry Pi Foundation -# Getting started on the Raspberry Pi - +Getting started on the Raspberry Pi +====== The FSFW can be run on a Raspberry Pi with the Linux OSAL, using an ARM linux (cross) compiler. Instructions will be provided on how to do this. -## General Information +# General Information The following instructions will show how to build the example on the Raspberry Pi directly. It will also show how to cross-compile on a host machine and mirror the Raspberry Pi sysroot folder @@ -19,13 +19,13 @@ for the cross-compilation process. Some Eclipse project files were provided as well to help with setting up the indexer in Eclipse more quickly. -## Prerequisites for direct compilation and cross-compiling +# Prerequisites for direct compilation and cross-compiling 1. SSH connection to the Raspberry Pi working 2. Raspberry Pi linux environment set up properly 3. `CMake` installed -## Setting up general prerequisites for Linux systems +# Setting up general prerequisites for Linux systems 1. Install `CMake` and `rsync` @@ -44,7 +44,7 @@ more quickly. sudo apt-get install gpiod libgpiod-dev ``` -## Getting started on the Raspberry Pi +# Getting started on the Raspberry Pi Make sure to follow the steps above. Now you should be able to build the software on the Raspberry Pi. A ssh connection to the Raspberry Pi is assumed here @@ -58,15 +58,15 @@ cmake -DOS_FSFW=linux -DTGT_BSP=arm/raspberrypi -DLINUX_CROSS_COMPILE=OFF -DCMAK cmake --build . -j ``` -## Prerequisites for cross-compiling +# Prerequisites for cross-compiling These prerequisites are valid for Linux as well as Windows hosts. 1. ARM Linux cross compiler installed -2. Raspberry Pi sysroot folder mirrored on the host machine, using `rsync` +2. Raspberry Pi sysroot folder mirrored on the host machine, using `rsync` or `scp` 3. gdb-multiarch installed on host for remote debugging or `tcf-agent` running on Raspberry Pi -## Cross-Compiling on a Linux Host +# Cross-Compiling on a Linux Host Steps tested for Ubuntu 20.04. Adapt accordingly for used Linux distribution. The following steps are based on this @@ -76,13 +76,17 @@ based on Debian buster is used. If this is not the case, it is recommended to follow the steps in the stackoverflow post above and to make sure that the toolchain binaries are added to the path accordingly. -### Setting up prerequisites for cross-compiling +## Setting up prerequisites for cross-compiling + +You can skip step 1 if you already have a cross-compile toolchain or you can +cross-compile a toolchain yourself by following the steps in the +[crosstool-ng chapter](#ctng). 1. Install the pre-built ARM cross-compile with the following command - ```sh - wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz - ``` + ```sh + wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz + ``` Then extract to the opt folder: @@ -171,9 +175,9 @@ toolchain binaries are added to the path accordingly. 4. Perform the steps [in the cross-compile section](#cross-test) to build the software for the Raspberry Pi and test it. -## Cross-Compiling on a Windows Host +# Cross-Compiling on a Windows Host -### Additional Prerequites +## Additional Prerequites 1. [MSYS2](https://www.msys2.org/) installed. All command line steps shown here were performed in the MSYS2 MinGW64 shell (not the default MSYS2, use MinGW64!). @@ -182,7 +186,7 @@ toolchain binaries are added to the path accordingly. repository and to run `git config --global core.autocrlf true` for git in MinGW64. -### Setting up prerequisites for Windows +## Setting up prerequisites for Windows 1. Install CMake and rsync in MinGW64 after installing MSYS2 @@ -249,7 +253,7 @@ toolchain binaries are added to the path accordingly. 6. Perform the steps [in the following chapter](#cross-test) to build the software for the Raspberry Pi and test it. -## Testing the cross-compilation +# Testing the cross-compilation It is recommended to set the following environmental variables for the CMake build: - `CROSS_COMPILE`: Explicitely specify the name of the cross compiler @@ -321,13 +325,13 @@ Navigate into the `fsfw_example` folder first. ./fsfw_example ``` -### Setting up Eclipse for a Raspberry Pi remote target +## Setting up Eclipse for a Raspberry Pi remote target It is recommended to use the provided Eclipse project files and launch configurations to have a starting point. See the specific section in the [Eclipse README](README-eclipse.md#top) for information how to do this. -#### Windows +### Windows There are some additional steps necessary on Windows: The cross-compiler by default is configured to look for the cross-compiler in `/opt/cross-pi-gcc/bin`. @@ -335,7 +339,7 @@ The toolchain path needs to be corrected, for example like shown in the followin -## Setting up the TCF agent on the Raspberry Pi +# Setting up the TCF agent on the Raspberry Pi It is recommended to set up a [TCF agent](https://wiki.eclipse.org/TCF) for comfortable Eclipse remote debugging. The following steps show how to setup the TCF agent @@ -435,3 +439,78 @@ scp @:/lib/arm-linux-gnueabihf/libc.so.6 /li If any custom libraries are used which rely on symlinks, it might be necessary to copy them or create them manually as well. + +# Building a cross-compile toolchain with crosstool-ng + +If you want to cross-compile the toolchain for the Raspberry Pi, you can do so +with the `crosstool-ng` tool. + +Alternatively, you can also download a cross-compile toolchain built with +crosstool-ng for the Raspberry Pi 3 [from here](https://www.dropbox.com/sh/zjaex4wlv5kcm6q/AAABBFfmZSRZ7GE7ok-7vTE6a?dl=0) +inside the `x-tools` folder. + +## Ubuntu + +1. Install prerequisites to build toolchains + + ```sh + sudo apt-get install automake bison chrpath flex g++ git gperf gawk help2man libexpat1-dev + libncurses5-dev libsdl1.2-dev libtool libtool-bin libtool-doc python2.7-dev texinfo + ``` + +2. Install `crosstool-ng`. You can checkout a concrete version in the git repository, we will + simply build the master branch here: + + ```sh + git clone https://github.com/crosstool-ng/crosstool-ng.git + cd crosstool-ng/ + ``` + +3. Install `crosstool-ng`. + ```sh + ./bootstrap + ./configure --enable-local + make + sudo make install + ``` + + You can also install `ct-ng` locally by supplying `--prefix=` to the `configure` + command. You don't need `sudo` for the `make install` command if you do this + +4. You can get a list of architectures by running + + ```sh + ./ct-ng list-samples > samples.txt + cat samples.txt + ``` + + `ct-ng` includes pre-configurations for the Raspberry Pis. For example you can display the + settings for the Raspberry Pi 3 with the command + + ```sh + ./ct-ng show-armv8-rpi3-linux-gnueabihf + ``` + + You can add the configuration with + + ```sh + ./ct-ng armv8-rpi3-linux-gnueabihf + ``` + + You can now customize the build with + + ```sh + ./ct-ng menuconfig + ``` + + It is recommended to go to `Paths and misc options` and disable `Paths and misc options`. + Remember to save the configuration. + +5. Finally, after finishing the configuration you can build the toolchain with + + ```sh + ./ct-ng build + ``` + + This takes 20-30 minutes. You can find the toolchain in the `~/x-tools` folder after building + has finished