Last Updated on November 4, 2025
How to install and use the Reliable Embedded Systems – Robert Berger e.U. Yocto Project®/OpenEmbedded build framework
Objectives
This post shows you how to install and use the Reliable Embedded Systems – Robert Berger e.U. Yocto Project®/OpenEmbedded build framework.
Prerequisites
A somewhat recent Linux distro should be fine. I’ll show you how to install the framework on something like Ubuntu 18, 20 or 22.
Install the Build framework
Install docker
sudo apt install docker.io
sudo usermod -aG docker ${USER}
sudo reboot
Install git
sudo apt install git
Default gitconfig
In case you don’t already have a proper gitconfig you can use the one provided with here:
pushd ~
wget https://raw.githubusercontent.com/RobertBerger/manifests/master/gitconfig
mv gitconfig .gitconfig
popd
Create a directory where you have plenty of space
mkdir -p ~/projects/resy-playground
cd ~/projects/resy-playground
Convenient symlink on the host
sudo ln -sf ~/projects/resy-playground /workdir
You might need to fix some permissions.
Download the latest version
mkdir -p /workdir/sources
pushd /workdir/sources
git clone https://github.com/RobertBerger/manifests.git
popd
cd /workdir
ln -sf sources/manifests/resy.sh resy.sh
chmod +x resy.sh
./resy.sh
Pick e.g. experimental. The script pulls lot’s of meta-layers as well as a couple of “helper scripts”.
Let’s build something
Start the poky build container
./resy-poky-container.sh
This will pull the “container” when you do it the first time:
+ docker pull reliableembeddedsystems/poky-container:2021-05-07-master-local-gcc-9-gui-icecc-ub18
...
Digest: sha256:3f83f549071bfb1bdf1609b0bb977d4ba494ac5cdaa262e641a09a7d1827cb4a
Status: Downloaded newer image for reliableembeddedsystems/poky-container:2021-05-07-master-local-gcc-9-gui-icecc-ub18
docker.io/reliableembeddedsystems/poky-container:2021-05-07-master-local-gcc-9-gui-icecc-ub18
+ set +x
-- interactive mode --
source /workdir/resy-cooker.sh in container
+ press <ENTER> to go on
You should end up at a command line shell inside the container.
+ docker run --name poky_container --rm -it --add-host mirror:192.168.42.1 --net=host -p ::10245/tcp -p ::8765/tcp -p ::8766/tcp -p ::8765/udp -v /home/student/projects:/projects -v /opt:/nfs -v /workdir:/workdir -v /workdir:/workdir reliableembeddedsystems/poky-container:2021-05-07-master-local-gcc-9-gui-icecc-ub18 --workdir=/workdir
WARNING: Published ports are discarded when using host network mode
pokyuser@e450-6:/workdir$
You may want to inspect the script and adjust some settings on top of it. What I would suggest as a good starting point is this:
#!/bin/bash
# this enables building all the images
# for a specific MACHINE as defined in resy-cooker.sh
# set to "yes" if you want this to happen in non-interactive mode
BUILD_ALL_VAR="no"
USE_GUI="no"
USE_MIRROR="no"
DOCKER_PULL="yes"
USE_ICECC="no"
USE_QEMU="no"
This needs to be done from inside of the container
Get preconfigured build environments
pokyuser@e450-6:/workdir$ source /workdir/resy-cooker.sh
This is what is currently available:
/workdir /workdir
--> USAGE 1 <--
usage:
source /workdir/resy-cooker.sh MACHINE or MACHINE-sw-variant
source /workdir/resy-cooker.sh container-x86-64
available targets:
am335x-phytec-wega-mender
am335x-phytec-wega-wic
am335x-phytec-wega-wic-master
am335x-pocketbeagle-wic-master
am335x-regor-rdk-wic-master
beagle-bone-black-mender
beagle-bone-black-virt-wic
beagle-bone-black-wic
beagle-bone-black-wic-master
beagle-bone-green-wic
beagle-bone-green-wic-master
container-arm-v7
container-arm-v7-master
container-arm-v7-phoronix
container-arm-v7-tig
container-raspberrypi-4-64-ml-phoronix
container-x86-64
container-x86-64-golang
container-x86-64-golang-master
container-x86-64-java
container-x86-64-java-master
container-x86-64-master
container-x86-64-tensorflow
container-x86-64-tensorflow-master
container-x86-64-tig
container-x86-64-tig-master
de0-nano-soc-kit-wic-master
imx6q-phytec-mira-rdk-nand-mender
imx6q-phytec-mira-rdk-nand-virt-mender
imx6q-phytec-mira-rdk-nand-virt-wic
imx6q-phytec-mira-rdk-nand-virt-wic-mc
imx6q-phytec-mira-rdk-nand-virt-wic-mc-master
imx6q-phytec-mira-rdk-nand-wic
imx6q-phytec-mira-rdk-nand-wic-master
imx6sx-udoo-neo-full-wic-master
imx6ul-phytec-segin-systemd-wic-master
imx6ul-phytec-segin-virt-telegraf-wic-master
imx6ul-phytec-segin-wic-master
imx8mmevk-master
karo-imx6ul-txul
multi-v7-mender
multi-v7-ml
multi-v7-ml-bpf-master
multi-v7-ml-debug
multi-v7-ml-debug-training
multi-v7-ml-debug-training-libs
multi-v7-ml-debug-training-lic
multi-v7-ml-debug-training-pkgs
multi-v7-ml-master
multi-v7-ml-pkgs
multi-v7-ml-prt
multi-v7-ml-qt5
multi-v7-ml-virt
multi-v7-ml-virt-docker-master
multi-v7-ml-virt-podman-master
multi-v7-ml-xenomai
omap3-beagle-xm-wic-master
phyboard-polis-imx8mm-wic
phyboard-polis-imx8mm-wic-virt
qemux86-64-virt-master
raspberrypi-4-64-ml-kernel-wic
raspberrypi-4-64-ml-kernel-wic-virt-all-sdcard
raspberrypi-4-64-ml-kernel-wic-virt-tftp-nfs
raspberrypi-4-64-raspi-kernel-wic
stm32mp157c-dk2-systemd-wic-master
stm32mp157c-dk2-wic-master
--> $#: 0
pokyuser@e450-6:/workdir/build$
Pick one
e.g. imx6q-phytec-mira-rdk-nand-wic-master: This is an SD card image for an imx6q-phytec-mira-rdk-nand board from master git branches.
pokyuser@e450-6:/workdir/build$ source /workdir/resy-cooker.sh imx6q-phytec-mira-rdk-nand-wic-master
/workdir /workdir/build /workdir
MACHINE or MACHINE-sw-variant: imx6q-phytec-mira-rdk-nand-wic-master
initial SITE_CONF=../../sources/meta-resy/template-common/site.conf.sample
TEMPLATECONF: ../meta-u-boot-wic-bsp-master/template-imx6q-phytec-mira-rdk-nand-master
source ../sources/poky-master/oe-init-build-env imx6q-phytec-mira-rdk-nand-wic-master
You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to, for
example, select a different MACHINE (target hardware). See conf/local.conf
for more information as common configuration options are commented.
You had no conf/bblayers.conf file. This configuration file has therefore been
created for you with some default values. To add additional metadata layers
into your configuration please add entries to conf/bblayers.conf.
The Yocto Project® has extensive documentation about OE including a reference
manual which can be found at:
http://yoctoproject.org/documentation
For more information about OpenEmbedded see their website:
http://www.openembedded.org/
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
You can also run generated qemu images with a command like 'runqemu qemux86'
conf
├── bblayers.conf
├── local.conf
├── site.conf
└── templateconf.cfg
0 directories, 4 files
/workdir/build /workdir
--> $#: 1
pokyuser 74 21 0 11:29 pts/0 00:00:00 /bin/bash /workdir/killall_bitbake.sh
pokyuser 76 74 0 11:29 pts/0 00:00:00 grep bitbake
pokyuser 74 21 0 11:29 pts/0 00:00:00 /bin/bash /workdir/killall_bitbake.sh
pokyuser 81 74 0 11:29 pts/0 00:00:00 grep bitbake
rm -f /workdir/build/imx6q-phytec-mira-rdk-nand-wic-master/hashserve.sock
to ./resy-poky-container.sh:
-- non-interactive mode --
add the image you want to build to the command line ./resy-poky-container.sh <MACHINE> <image>
-- interactive mode --
enter it with - ./resy-poky-container.sh <no param>
bitbake <image>
source /workdir/resy-cooker.sh <MACHINE>
pokyuser@e450-6:/workdir/build$
Let’s build a “core-image-minimal” with BitBake:
pokyuser@e450-6:/workdir/build$ bitbake core-image-minimal
Please note, that since those are “master branches” it’s not guaranteed to build out of the box. You might want to use a “non-master” configuration for something which will build out-of-the-box with a much higher probability. Anyways, if you get lucky, you’ll see something like this:
NOTE: Started PRServer with DBfile: /workdir/build/imx6q-phytec-mira-rdk-nand-wic-master/cache/prserv.sqlite3, IP: 127.0.0.1, PORT: 41854, PID: 21366
Loading cache: 100% |##########################################################################################################################################################| Time: 0:00:00
Loaded 3676 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################| Time: 0:00:00
Parsing of 2394 .bb files complete (2393 cached, 1 parsed). 3677 targets, 137 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.49.2"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "arm-resy-linux-gnueabi"
MACHINE = "imx6q-phytec-mira-rdk-nand"
DISTRO = "resy"
DISTRO_VERSION = "3.3"
TUNE_FEATURES = "arm armv7a vfp thumb callconvention-hard"
TARGET_FPU = "hard"
meta
meta-poky
meta-yocto-bsp = "master:e1839b58ebe05242a52fe050aa9a08140136aa0a"
meta-multi-v7-ml-bsp-master = "master:00f716ef03a6d37489cf8f1704a566938d3c7c64"
meta-u-boot-wic-bsp-master = "master:4d38425039ff45f8e314f8d1127875b6694d5a1e"
meta-resy-master = "master:48562f43bed481ad342d92b9cdcb45fa75487f58"
meta-oe
meta-networking
meta-filesystems
meta-python = "master:a23fa069d0a60cf348dcc6399f7990de59105c21"
Initialising tasks: 100% |#####################################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 0 Local 0 Network 0 Missed 0 Current 1036 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 2843 tasks of which 2843 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 1 seconds
pokyuser@e450-6:/workdir/build/imx6q-phytec-mira-rdk-nand-wic-master/conf$
Conclusion
That’s just a small demo of how a “Build Container” can be used.
Appendix
For a blog post that describes how to build the upstream kernel without the Yocto Project® have a look here. If you want to learn how Embedded Linux works have a look here. To learn more about the Yocto Project® have a look here.