Raspberry Pi Cross-Compiler in a Docker Container
An easy-to-use all-in-one cross compiler for the Raspberry Pi.
Please raise any issues on the GitHub issue tracker as I don't get notified about Docker Hub comments.
- The gcc-linaro-arm-linux-gnueabihf-raspbian-x64 toolchain from raspberrypi/tools
- Raspbian sysroot from sdhibit/docker-rpi-raspbian :new:
- Easy installation of raspbian packages into the sysroot using the customised qemu arm emulator from resin-io-projects/armv7hf-debian-qemu :new:
- Easy-to-use front end wrapper program
This image is not intended to be run manually. Instead, there is a helper script which comes bundled with the image.
To install the helper script, run the image with no arguments, and redirect the output to a file.
docker run sdthirlwall/raspberry-pi-cross-compiler > ~/bin/rpxc chmod +x ~/bin/rpxc
rpxc [command] [args...]
Execute the given command-line inside the container.
If the command matches one of the rpxc built-in commands (see below), that will be executed locally, otherwise the command is executed inside the container.
rpxc -- [command] [args...]
To force a command to run inside the container (in case of a name clash with a built-in command), use
-- before the command.
rpxc install-debian [--update] package packages...
Install native packages into the docker image. Changes are committed back to the sdthirlwall/raspberry-pi-cross-compiler image.
rpxc install-raspbian [--update] package packages...
Install raspbian packages from the raspbian repositories into the sysroot of thedocker image. Changes are committed back to the sdthirlwall/raspberry-pi-cross-compiler image.
Pull the latest version of the docker image.
If a new docker image is available, any extra packages installed with
install-raspbian will be lost.
Update the installed rpxc script with the one bundled in the image.
Update both the docker image and the rpxc script.
The following command-line options and environment variables are used. In all cases, the command-line option overrides the environment variable.
RPXC_CONFIG / --config <path-to-config-file>
This file is sourced if it exists.
RPXC_IMAGE / --image <docker-image-name>
The docker image to run.
RPXC_ARGS / --args <docker-run-args>
Extra arguments to pass to the
docker run command.
rpxc install-debian and
rpxc install-raspbian are really only intended for getting a build environment together. Once you've figured out which debian and raspbian packages you need, it's better to create a custom downstream image that has all your tools and development packages built in.
Create a Dockerfile
FROM sdthirlwall/raspberry-pi-cross-compiler # Install some native build-time tools RUN install-debian scons # Install raspbian development libraries RUN install-raspbian libboost-dev-all
Name your image with an RPXC_IMAGE variable and build the image
export RPXC_IMAGE=my-custom-rpxc-image docker build -t $RPXC_IMAGE .
With RPXC_IMAGE set, rpxc will automatically use your new image.
# These are typical cross-compilation flags to pass to configure. # Note the use of single quotes in the shell command-line. We want the # variables to be interpolated in the container, not in the host system. rpxc sh -c 'CFLAGS=--sysroot=$SYSROOT ./configure --host=$HOST' rpxc make
Another way to achieve this is to create a shell script.
#!/bin/sh CFLAGS=--sysroot=$SYSROOT ./configure --host=$HOST make
And call it as
See the examples directory for some real examples.