15 KiB
Image taken from Beagle Board website and used in accordance with their trademark rules.
Getting started on the Beagle Bone Black
The FSFW can be run on a Beagle Bone Black with the Linux OSAL, using an ARM linux (cross) compiler. Instructions will be provided on how to do this.
General Information
The following instructions will show how to build the example on the Beagle Bone Black directly. It will also show how to cross-compile on a host machine and mirror the Beagle Bone sysroot folder on the host machine so that the same libraries and headers used on the BBB are used 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
- SSH connection to the Beagle Bone Black working
- Beagle Bone Black linux environment set up properly
CMake
installed
Setting up general prerequisites for Linux systems
-
Install CMake and rsync
sudo apt-get install cmake rsync
-
Configure the Beagle Bone Black Linux environment. The last section of the Linux README specifies how to set up a UNIX environment for the FSFW and is also applicable to the Beagle Bone Black. SSH into the BBB and follow the instructions in that section.
-
Install the
gpiod
librarysudo apt-get install gpiod libgpiod-dev
Getting started on the Beagle Bone Black
Make sure to follow the steps above. Now you should be able to build the software on the Beagle Bone Black. A ssh connection to the Raspberry Pi is assumed here
You can build the software with the following commands
mkdir build-Debug-BBB
cd build-Debug-BBB
cmake -DOS_FSFW=linux -DTGT_BSP=arm/beagleboneblack -DLINUX_CROSS_COMPILE=OFF -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . -j2
Prerequisites for cross-compiling
These prerequisites are valid for Linux as well as Windows hosts.
- ARM Linux cross compiler installed
- Beagle Bone Black sysroot folder mirrored on the host machine, using
rsync
- gdb-multiarch installed on host for remote debugging or
tcf-agent
running on the BBB
Cross-Compiling on a Linux Host
Setting up prerequisites for cross-compiling
-
Install
CMake
andrsync
sudo apt-get install cmake rsync
-
Configure the Beagle Bone Black linux environment. The last section of the Linux REAMDE specifies how to set up a UNIX environment for the FSFW and isalso applicable to the Raspberry Pi. SSH into the Beagle Bone Black and follow the instructions in that section.
-
Install the correct ARM Linux cross-compile toolchain. provided by Linaro.
Test the toolchain by running:
arm-linux-gnueabihf-gcc --version
-
Set up a sysroot folder on the local host machine. Make sure the SSH connection to the BBB is working without issues. Then perform the following steps
cd $HOME mkdir beaglebone cd beaglebone mkdir rootfs cd rootfs pwd
Store the result of
pwd
, it is going to be used byrsync
later.Now use
rsync
to clone the BBB sysroot to the local host machine. You can replace<ip-address>
withbeaglebone.local
to use DNS. Use the rootfs location stored from the previous steps as<rootfs-path>
.rsync -avHAXR --delete-after --info=progress2 --numeric-ids <user_name>@<ip_address>:/{usr,lib} <rootfs_path>
On Linux, it is recommended to repair some symlinks which can be problematic: Navigate to the folder containing the symlinks first:
cd <rootfs_path>/usr/lib/arm-linux-gnueabihf
You can now use
readlink libpthread.so
which will show an absolute location of a shared library the symlinks points to. This location needs to be converted into a relative path.
Run the following command to create a relative symlinks instead of an absolute ones. The pointed to location might change to check it with
readlink
first before removing the symlinks:rm libpthread.so rm librt.so ln -s ../../../lib/arm-linux-gnueabihf/libpthread.so.0 libpthread.so ln -s ../../../lib/arm-linux-gnueabihf/librt.so.1 librt.so
For more information on issues which can occur when cloning the root filesystem, see the troubleshooting section.
-
It is recommended to install
gdb-multiarch
. This tool will allow remote debugging on the host computer. This is not required if thetcf-agent
is used.sudo apt-get install multiarch
-
Perform the steps in the following chapter to build the software for the BBB and test it.
Cross-Compiling on a Windows Host
Additional Prerequites
- MSYS2 installed. All command line steps shown here
were performed in the MSYS2 MinGW64 shell (not the default MSYS2, use MinGW64!).
Replace
<UserName>
with respectively. It is recommended to set up aliases in the.bashrc
file to allow quick navigation to thefsfw_example
repository and to rungit config --global core.autocrlf true
for git in MinGW64.
Setting up prerequisites for Windows
-
Install CMake and rsync in MinGW64 after installing MSYS2
pacman -S mingw-w64-x86_64-cmake rsync
-
Configure the Beagle Bone Black linux environment. The last section of the Linux REAMDE specifies how to set up a UNIX environment for the FSFW and isalso applicable to the Raspberry Pi. SSH into the Beagle Bone Black and follow the instructions in that section.
-
Install the correct ARM Linux cross-compile toolchain. provided by Linaro.
Test the toolchain by running:
arm-linux-gnueabihf-gcc --version
-
Set up a sysroot folder on the local host machine. Make sure the SSH connection to the BBB is working without issues. Then perform the following steps
cd /c/Users/<UserName> mkdir beaglebone cd beaglebone mkdir rootfs cd rootfs pwd
Store the result of
pwd
, it is going to be used byrsync
later.Now use rsync to clone the BBB sysroot to the local host machine. You can replace
<ip-address>
withbeaglebone.local
to use DNS. Use the rootfs location stored from the previous steps as<rootfs-path>
.rsync -avHAXR --numeric-ids --info=progress2 <username>@<ip-address>:/{lib,usr} <rootfs-path>
Please note that
rsync
sometimes does not copy shared libraries or symlinks properly, which might result in errors when cross-compiling and cross-linking. It is recommended to run the following commands in addition to thersync
command on Windows:scp <user_name>@<ip-address>:/lib/arm-linux-gnueabihf/{libc.so.6,ld-linux-armhf.so.3,libm.so.6} <rootfs_path>/lib/arm-linux-gnueabihf scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/{libpthread.so,libc.so,librt.so} <rootfs_path>/usr/lib/arm-linux-gnueabihf
For more information on issues which can occur when cloning the root filesystem, see the troubleshooting section.
-
It is recommended to install
gdb-multiarch
. This tool will allow remote debugging on the host computer. Replacex86_64
with the correct processor architecture for other architectures. This is not required if thetcf-agent
is used.pacman -S mingw-w64-x86_64-gdb-multiarch
-
Perform the steps in the following chapter to build the software for the BBB and test it.
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 compilerBBB_ROOTFS
: Explicitely set the path to the local BBB rootfs
For example with the following commands
export CROSS_COMPILE="arm-linux-gnueabihf"
It is recommended to test whether the environmental variables were set correctly, for example by running
echo $BBB_ROOTFS
These variables can either be set every time before a debugging session to
keep the environment clean (should be done before starting Eclipse)
or permanently by adding the export
commands to system files.
A helper script has been provided in cmake/scripts/BBB
to perform
setting up the environment. The scripts need to be source
d instead of
being run like regular shell scripts.
You can also set up the environmental variables permanently by adding the
export commands to the .profile
or .bashrc
file in the $HOME
folder.
On Windows, MinGW64 was used to set up the build system, so you can use the
MinGW64 .bashrc
file to do this. If you are using Eclipse to build
the software, Eclipse will have the system variables from Windows,
so it is recommended to either permanently set the three environmental
variables in the Windows system environmental variables or add them in
Eclipse. See the Eclipse README for more information.
Now we can test whether everything was set up properly by compiling the example
and running it on the BBB via command line. Navigate into the fsfw_example
folder first.
-
Build the software locally to test the cross-compilation process. A debug build directory is created first.
mkdir build-Debug-BBB cd build-Debug-BBB
-
Configure the build system. On Linux, run the following command:
cmake -G "Unix Makefiles" -DOS_FSFW=linux -DTGT_BSP=arm/beagleboneblack -DLINUX_CROSS_COMPILE=ON -DCMAKE_BUILD_TYPE=Debug ..
On Windows, replace
-G "Unix Makefiles"
with-G "MinGW Makefiles"
.Alternatively, you can use the helper shell scripts located inside
cmake/scripts/BBB/crosscompile
or the Python helper scriptcmake_build_config.py
inside thecmake/scripts
folder. TheBBB
folder also contains template shell files which can besource
d to quickly set up the environmental variables if you want to keep the system path clean. -
Run the binary to test it
scp fsfw_example <username>@beaglebone.local:/home/fsfw_example ssh <username>@beaglebone.local ./fsfw_example
Setting up Eclipse for a BBB 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 for information how to do this.
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
.
The toolchain path needs to be corrected, for example like shown in the following image:
Setting up the TCF agent on the BBB
It is recommended to set up a TCF agent for comfortable Eclipse remote debugging. The following steps show how to setup the TCF agent on the Raspberry Pi and add it to the auto-startup applications. The steps are taken from this guide
-
Install required packages on the RPi
sudo apt-get install git uuid uuid-dev libssl-dev
-
Clone the repository and perform some preparation steps
git clone git://git.eclipse.org/gitroot/tcf/org.eclipse.tcf.agent.git cd org.eclipse.tcf.agent.git/agent
-
Build the TCF agent
make
and then test it by running
obj/GNU/Linux/arm/Debug/agent –S
-
Finally install the agent for auto-start with the following steps. And set it up for auto-start.
cd org.eclipse.tcf.agent/agent make install sudo make install INSTALLROOT= sudo update-rc.d tcf-agent defaults
The Eclipse README specifies how to perform remote debugging using the TCF agent.
Troubleshooting
Cloning the root filesystem
There might be some issues with the pthread symbolic links. Navigate to the folder containing the symlinks
cd <rootfs_path>/usr/lib/arm-linux-gnueabihf
Type more libpthread
, press TAB
and check whether the symbolic
link libpthread.so
is shown. If it is not, we are going to set it up
manually to avoid issues when linking against pthread
later.
Now you can find out where libpthread.so
points with readlink libpthread.so
.
This information is used to convert the absolute symlink to relative ones, for example with:
Run the following command to copy the symlink libpthread.so.0
if it does not exist yet:
scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/libpthread.so .
Alternatively, you can correct the symlinks to use relative paths, for example with:
ln -s ../../../lib/arm-linux-gnueabihf/libpthread.so.0 libpthread.so
ln -s ../../../lib/arm-linux-gnueabihf/librt.so.1 librt.so
Please note that there might also be issues with some symlinks or libraries not being copied
properly, especially on Windows. This has occured with files like libc.so.6
.
If there are linker issues at a later stage, you can try to copy the symlinks manually from the
Linux board to the sysroot with scp
.
For example, you can copy libc.so.6
from the Linux board to the sysroot with
the following command
If there are issues with the cross-compilation process, manually copying the following symlinks can help:
scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/libc.so <rootfs_path>/usr/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/libc.a <rootfs_path>/usr/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/librt.a <rootfs_path>/usr/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/usr/lib/arm-linux-gnueabihf/librt.so <rootfs_path>/usr/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/lib/arm-linux-gnueabihf/librt.so.1 <rootfs_path>/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/lib/arm-linux-gnueabihf/libpthread.so.0 <rootfs_path>/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3 <rootfs_path>/lib/arm-linux-gnueabihf
scp <user_name>@<ip-address>:/lib/arm-linux-gnueabihf/libc.so.6 <rootfs_path>/lib/arm-linux-gnueabihf
If any custom libraries are used which rely on symlinks, it might be necessary to copy them or create them manually as well.