Contents of This Book
This document introduces several concepts that can be used in bare-metal development as well as shows how they can be implemented using features of latest (at the time of writing) C++11 standard.
The code of generic components is implemented as part of “Embedded C++ Library” project called “embxx” and can be found at https://github.com/arobenko/embxx. It has GPLv3 licence.
There is also a project that implements multiple simple bare metal applications using embxx which can run on RaspberryPi platform. The source code can be found at https://github.com/arobenko/embxx_on_rpi. It also has GPLv3 licence.
Both projects require gcc version 4.7 or higher, because of C++11 support requirement. They also use CMake as their build system. The code has been tested with following free toolchains:
GNU Tools for ARM Embedded Processors on Launchpad
The whole document is ARM platform centric. At this moment I do not try to cover anything else.
To compile Raspberry Pi example applications in Linux environment use the following steps: 1. Checkout embxx_on_rpi project
Create separate build directory and cd to it
Generate makefiles
Note that last parameter to cmake is relative or absolute path to the root of the source tree.
Also note that embxx library will be checked out as external git submodule during this process.
Build the applications
Take the generated image from
<build_dir>/image/<app_name>/kernel.img
The CMake provides the following build types, which I believe are self-explanatory:
None (default)
Debug
Release
MinSizeRel
RelWithDebInfo
To specify the required build type use -DCMAKE_BUILD_TYPE=<value>
option of cmake utility:
cmake -DCMAKE_BUILD_TYPE=Release ..
If no build type is specified, the default one is None, which is similar to Debug, but without “-g” compilation option, i.e. no optimisations and no debugging information is generated.
It is possible to specify the cross-compilation toolchain prefix. By default arm-none-eabi-
is expected, i.e. arm-none-eabi-gcc
, arm-none-eabi-g++
and arm-none-eabi-as
are used to compile the sources. If these utilities cannot be found in environment search paths, then you should specify the prefix passing -DCROSS_COMPILE=<prefix>
option to cmake:
cmake -DCROSS_COMPILE=/opt/arm-none-eabi-2013.05/bin/arm-none-eabi- ..
To see the commands used to compile the sources, prefix make
with VERBOSE=1
:
VERBOSE=1 make
The embxx library has doxygen generated documentation. It can be found here.
Last updated