Last Updated on December 2, 2025
Reliable Embedded Systems – Robert Berger e.U. build framework & qemux86-64-master & bitbake-setup tool
Key Takeaways
- The article discusses the implications of the poky master branch being no longer updated as of November 7th, 2025.
- It introduces two options: individual clones of BitBake and layers, or using the new bitbake-setup tool for building ‘images’, but focuses on the bitbake-setup tool.
- The focus is on building a ‘core-image-minimal’ for the ‘qemux86-64’ emulator using the Reliable Embedded Systems build framework.
- Users can expect a step-by-step guide on installing Docker, setting up the build environment, and running QEMU.
- The conclusion highlights the utility of a ‘Build Container’ for creating images suitable for QEMU emulation.
Objectives
Can the Reliable Embedded Systems – Robert Berger e.U. Yocto Project®/OpenEmbedded build environment and QEMU work together? Or do we need real hardware? Let’s have a look! We’ll build an image – a “core-image-minimal” – for the qemux86-64 emulator. We’ll try to execute the image with the emulator. As of November 7th 2025 the poky repository master branch is no longer being updated! Explore the reasons behind why the poky master branch is gone and how to build the default targets now.
The master branch of poky is no longer being updated!

Option 1: Individual clones of BitBake and layers
One way to deal with it is via individual clones of bitbake, openembedded-core, meta-yocto and yocto-docs. Take a look here. We’ll not deal with this approach in the article.
Option 2: Use the new bitbake-setup tool
For more detailed information please refer to the official documentation here. Some further information on the background of this change can be found here and here. We’ll take a closer look at this.
Prerequisites to use the RES build framework (RES)
Assuming you already have the Reliable Embedded Systems – Robert Berger e.U. Yocto Project®/OpenEmbedded build framework installed you are in a good position and can skip the chapter “Install a minimal Build framework”. I am describing this, since its the way I work, but that is not necessarily what you would like to do.
Install a minimal Build framework (RES)
Install docker
sudo apt install docker.io
sudo usermod -aG docker ${USER}
sudo reboot
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 manifests
mkdir -p /workdir/sources
pushd /workdir/sources
git clone https://github.com/RobertBerger/manifests.git
popd
Convenient symlink on the host to start the build container
cd /workdir
ln -sf sources/manifests/resy-poky-container.sh resy-poky-container.sh
chmod +x resy-poky-container.sh
On host machine
Download the BitBake repository
In order to use the bitbake-setup tool we need to get it and it’s part of the BitBake repository.
mkdir -p /workdir/sources/bitbake-new
cd /workdir/sources/bitbake-new
git clone https://github.com/openembedded/bitbake.git
Start docker build container and initialize the build environment
cd /workdir
./resy-poky-container.sh
In container
bitbake-setup --help
Let’s check out the bitbake-setup tool.
cd /workdir/sources/bitbake-new/bitbake
./bin/bitbake-setup --help
usage: bitbake-setup [-h] [-d] [-q] [--color COLOR] [--no-network] [--global-settings PATH] [--setting SECTION SETTING VALUE] {list,init,status,update,install-buildtools,settings} ...
BitBake setup utility. Run with 'init' argument to get started.
positional arguments:
{list,init,status,update,install-buildtools,settings}
list List available configurations
init Select a configuration and initialize a setup from it
status Check if the setup needs to be synchronized with configuration
update Update a setup to be in sync with configuration
install-buildtools Install buildtools which can help fulfil missing or incorrect dependencies on the host machine
settings List current settings, or set or unset a setting in a settings file (e.g. the default prefix and name of the top directory, the location of configuration registry,
downloads directory and other settings specific to a top directory)
options:
-h, --help show this help message and exit
-d, --debug Enable debug output
-q, --quiet Print only errors
--color COLOR Colorize output (where COLOR is auto, always, never)
--no-network Do not check whether configuration repositories and layer repositories have been updated; use only the local cache.
--global-settings PATH
Path to the global settings file.
--setting SECTION SETTING VALUE
Modify a setting (for this bitbake-setup invocation only), for example "--setting default top-dir-prefix /path/to/top/dir".
Use bitbake-setup <subcommand> --help to get help on a specific command
bitbake-setup init
./bin/bitbake-setup --setting default top-dir-prefix /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64 init
Bitbake-setup is using /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds as top directory.
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds looks like a new top directory. If you would like to use a different directory, answer "n" below and either:
1) Change the default bitbake-setup settings:
bitbake-setup settings set default top-level-prefix <PATH>
bitbake-setup settings set default top-level-name <NAME>
2) Pass one or more options on the command line to change the top level directory in that invocation only:
bitbake-setup --setting default top-dir-prefix <PATH> ...
bitbake-setup --setting default top-dir-name <NAME> ...
A common site.conf file will be created, please check it is correct before running builds
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/site.conf
Proceed? (y/N): y
Available configurations:
1. poky-master Poky - The Yocto Project testing distribution configurations and hardware test platforms
2. oe-nodistro-master OpenEmbedded - 'nodistro' basic configuration
3. oe-nodistro-whinlatter OpenEmbedded - 'nodistro' basic configuration, release 5.3 'whinlatter' (supported until 2026-05-31)
4. poky-whinlatter Poky - The Yocto Project testing distribution configurations and hardware test platforms, release 5.3 'whinlatter' (supported until 2026-05-31)
Please select one of the above configurations by its number:
1
Available bitbake configurations:
1. poky Poky - The Yocto Project testing distribution
2. poky-with-sstate Poky - The Yocto Project testing distribution with internet sstate acceleration. Use with caution as it requires a completely robust local network with sufficient bandwidth.
Please select one of the above bitbake configurations by its number:
1
Target machines:
1. machine/qemux86-64
2. machine/qemuarm64
3. machine/qemuriscv64
4. machine/genericarm64
5. machine/genericx86-64
Please select one of the above options by its number:
1
Distribution configuration variants:
1. distro/poky
2. distro/poky-altcfg
3. distro/poky-tiny
Please select one of the above options by its number:
1
Run 'bitbake-setup init --non-interactive poky-master poky distro/poky machine/qemux86-64' to select this configuration non-interactively.
Enter setup directory name: [poky-master]
Enter setup directory name: [poky-master]
Initializing a setup directory in
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master
Continue? (y/N): y
Fetching layer/tool repositories into /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/layers
bitbake
openembedded-core
meta-yocto
yocto-docs
Setting up bitbake configuration in
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build
This bitbake configuration provides:
Poky - The Yocto Project testing distribution
Usage instructions and additional information are in
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/README
To run builds, source the environment using
. /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/init-build-env
Run 'bitbake-config-build enable-fragment <fragment-name>' to enable additional fragments or replace built-in ones (e.g. machine/<name> or distro/<name> to change MACHINE or DISTRO).
The bitbake configuration files (local.conf, bblayers.conf and more) can be found in
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/conf
Setup Build environment attempt 1
source /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/init-build-env
Poky - The Yocto Project testing distribution
Check for configuration fragments
bitbake-config-build --help
NOTE: Starting bitbake server...
usage: bitbake-config-build [-d] [-q] [--color COLOR] [-h] <subcommand> ...
BitBake build configuration utility
options:
-d, --debug Enable debug output
-q, --quiet Print only errors
--color COLOR Colorize output (where COLOR is auto, always, never)
-h, --help show this help message and exit
subcommands:
<subcommand>
list-fragments List available configuration fragments
enable-fragment Enable a fragment in the local build configuration
disable-fragment Disable a fragment in the local build configuration
show-fragment Show the content of a fragment
disable-all-fragments
Disable all fragments in the local build configuration
Use bitbake-config-build <subcommand> --help to get help on a specific command
List fragments
bitbake-config-build list-fragments
NOTE: Starting bitbake server...
Available built-in fragments:
machine/... Sets MACHINE = ...
distro/... Sets DISTRO = ...
Enabled built-in fragments:
distro/poky Sets DISTRO = "poky"
machine/qemux86-64 Sets MACHINE = "qemux86-64"
Available fragments in core layer located in /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/layers/openembedded-core/meta:
Unused fragments:
core/yocto/root-login-with-empty-password Log in as root without password on serial console and over ssh (use with caution).
core/yocto/sstate-mirror-cdn Use prebuilt sstate artifacts for standard Yocto build configurations.
core/yocto-autobuilder/autobuilder-resource-constraints Resource constraint variables used on the Yocto Projects autobuilder
core/yocto-autobuilder/autobuilder Default variables used on the Yocto Projects autobuilder builds
core/yocto-autobuilder/multilib-mips64-n32 Enable a MIPS64 triarch multilib
core/yocto-autobuilder/multilib-x86-lib32 Enable an x86 lib32 multilib
core/yocto-autobuilder/multilib-x86-lib64 Enable an x86 lib64 multilib
Enable global sstate
bitbake-config-build show-fragment core/yocto/sstate-mirror-cdn
NOTE: Starting bitbake server...
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/layers/openembedded-core/meta/conf/fragments/yocto/sstate-mirror-cdn.conf:
BB_CONF_FRAGMENT_SUMMARY = "Use prebuilt sstate artifacts for standard Yocto build configurations."
BB_CONF_FRAGMENT_DESCRIPTION = "The Yocto Project has prebuilt artefacts available for standard build configurations. \
This fragment enables their use. This will mean the build will query the \
the network to check for artefacts at the start of builds, which does slow it down \
initially but it will then speed up the builds by not having to build things if they are \
present in the cache. It assumes you can download something faster than you can build it \
which will depend on your network. \
Note: For this to work you also need hash-equivalence passthrough to the matching server \
"
BB_HASHSERVE_UPSTREAM = 'wss://hashserv.yoctoproject.org/ws'
SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
bitbake-config-build enable-fragment core/yocto/sstate-mirror-cdn
NOTE: Starting bitbake server...
Fragment core/yocto/sstate-mirror-cdn added to /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/conf/toolcfg.conf.
Fragment summary: Use prebuilt sstate artifacts for standard Yocto build configurations.
Fragment description:
The Yocto Project has prebuilt artefacts available for standard build configurations. This fragment enables their use. This will mean the build will query the the network to check for artefacts at the start of builds, which does slow it down initially but it will then speed up the builds by not having to build things if they are present in the cache. It assumes you can download something faster than you can build it which will depend on your network. Note: For this to work you also need hash-equivalence passthrough to the matching server
Allow login of root without password
bitbake-config-build show-fragment core/yocto/root-login-with-empty-password
NOTE: Starting bitbake server...
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/layers/openembedded-core/meta/conf/fragments/yocto/root-login-with-empty-password.conf:
BB_CONF_FRAGMENT_SUMMARY = "Log in as root without password on serial console and over ssh (use with caution)."
BB_CONF_FRAGMENT_DESCRIPTION = "By default images are built such that root login is disabled \
(which is the preferred, secure default). However, for testing and development purposes it can \
be beneficial to be able to log in as root, both on serial console and over ssh connections, \
which is what this fragment enables. Use with great caution, and ideally only in tightly \
controlled local builds and CI testing environments, and never in artefacts that are deployed \
into products. \
"
EXTRA_IMAGE_FEATURES += "allow-empty-password empty-root-password allow-root-login"
bitbake-config-build enable-fragment core/yocto/root-login-with-empty-password
NOTE: Starting bitbake server...
Fragment core/yocto/root-login-with-empty-password added to /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/conf/toolcfg.conf.
Fragment summary: Log in as root without password on serial console and over ssh (use with caution).
Fragment description:
By default images are built such that root login is disabled (which is the preferred, secure default). However, for testing and development purposes it can be beneficial to be able to log in as root, both on serial console and over ssh connections, which is what this fragment enables. Use with great caution, and ideally only in tightly controlled local builds and CI testing environments, and never in artefacts that are deployed into products.
List fragments
bitbake-config-build list-fragments
NOTE: Starting bitbake server...
Available built-in fragments:
machine/... Sets MACHINE = ...
distro/... Sets DISTRO = ...
Enabled built-in fragments:
distro/poky Sets DISTRO = "poky"
machine/qemux86-64 Sets MACHINE = "qemux86-64"
Available fragments in core layer located in /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/layers/openembedded-core/meta:
Enabled fragments:
core/yocto/root-login-with-empty-password Log in as root without password on serial console and over ssh (use with caution).
core/yocto/sstate-mirror-cdn Use prebuilt sstate artifacts for standard Yocto build configurations.
Unused fragments:
core/yocto-autobuilder/autobuilder-resource-constraints Resource constraint variables used on the Yocto Projects autobuilder
core/yocto-autobuilder/autobuilder Default variables used on the Yocto Projects autobuilder builds
core/yocto-autobuilder/multilib-mips64-n32 Enable a MIPS64 triarch multilib
core/yocto-autobuilder/multilib-x86-lib32 Enable an x86 lib32 multilib
core/yocto-autobuilder/multilib-x86-lib64 Enable an x86 lib64 multilib
Build core-image-minimal attempt 1
bitbake core-image-minimal
ERROR: "Unable to use hash equivalence server at 'wss://hashserv.yoctoproject.org/ws' due to missing or incorrect python module:
ModuleNotFoundError("No module named 'websockets'")
Please install the needed module on the build host, or use an environment containing it:
- if you are using bitbake-setup, run 'bitbake-setup install-buildtools'
- openembedded-core layer contains 'scripts/install-buildtools' that can also be used
- or set up pip venv
You can also remove the BB_HASHSERVE_UPSTREAM setting, but this may result in significantly longer build times as bitbake will be unable to reuse prebuilt sstate artefacts.
As the error log suggests, we should do the following: ‘bitbake-setup install-buildtools‘.
bitbake-setup install-buildtools
bitbake-setup install-buildtools
Bitbake-setup is using /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds as top directory.
Buildtools archive is downloaded into /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools-downloads/20251201183440 and its content installed into /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools
INFO: Fetching buildtools installer
INFO: Fetching buildtools installer checksum
INFO: Checksum success
INFO: Making installer executable
Extended Build tools installer version 5.2.3
============================================
You are about to install the SDK to "/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools". Proceed [Y/n]? Y
Extracting SDK......................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools/environment-setup-x86_64-pokysdk-linux
INFO: Setting up the environment
INFO: Testing installation
INFO: Installation successful. Remember to source the environment setup script now and in any new session.
Setup environment for buildtools
Let’s also setup the environment for the buildtools.
source /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools/environment-setup-x86_64-pokysdk-linux
Build core-image-minimal attempt 2
bitbake core-image-minimal
It will get stuck a bit at about 44% where it checks the shared state.
Loading cache: 100% |##########################################################################################################################################################| Time: 0:00:00
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################| Time: 0:00:19
Parsing of 947 .bb files complete (0 cached, 947 parsed). 1944 targets, 56 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "2.16.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-22.04"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "5.2.99+snapshot-ac7327583aef83fd400190506f3147623de38b68"
TUNE_FEATURES = "m64 x86-64-v3"
TARGET_FPU = ""
meta = "master:ac7327583aef83fd400190506f3147623de38b68"
meta-yocto-bsp
meta-poky = "master:b3b659263566c4d2f2813190e72d93f8598a4c47"
NOTE: Fetching uninative binary shim http://downloads.yoctoproject.org/releases/uninative/5.0/x86_64-nativesdk-libc-5.0.tar.xz;sha256sum=96045e8b1e242c8a849426a8506c7043f354b39f2bc0035192780e8205e23e9d (will check PREMIRRORS first)
Initialising tasks: 100% |#####################################################################################################################################################| Time: 0:02:24
Checking sstate mirror object availability: 100% |#############################################################################################################################| Time: 0:00:25
Sstate summary: Wanted 1970 Local 0 Mirrors 1965 Missed 5 Current 0 (99% match, 0% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 4218 tasks of which 4203 didn't need to be rerun and all succeeded.
Now we should have a “core-image-minimal”. We will try to run it from within the QEMU emulator.
On host machine (RES)
Adjust resy-poky-container.sh
You’ll need to exit and enter the container if you didn’t already modify the file below.
This is a special setting to start the container in privileged mode, which is necessary only with my build framework to run QEMU.
cd /workdir
vim ./resy-poky-container.sh
Replace USE_QEMU="no" with USE_QEMU="yes".
diff --git a/resy-poky-container.sh b/resy-poky-container.sh
index 5153afa..f5f7408 100755
--- a/resy-poky-container.sh
+++ b/resy-poky-container.sh
@@ -8,7 +8,7 @@ USE_GUI="no"
USE_MIRROR="yes"
DOCKER_PULL="yes"
USE_ICECC="yes"
-USE_QEMU="no"
+USE_QEMU="yes"
#PRIVILEGED="--privileged"
PRIVILEGED=""
#EXTRA_MOUNTS="yes"
Open a privileged session suitable to run QEMU
Open a new shell on the host.
cd /workdir/sources/manifests
./root-in-poky-container.sh
In the container (as root) (RES)
Setup the right environment
source /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/init-build-env
source /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/buildtools/environment-setup-x86_64-pokysdk-linux
Start QEMU in non graphical mode
In the docker container (as root)
runqemu nographic snapshot
runqemu - INFO - Running bitbake -e ...
runqemu - INFO - Decompressing /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.ext4.zst to /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.ext4
/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.ext4.zst: 42641408 bytes
runqemu - INFO - Continuing with the following parameters:
KERNEL: [/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/bzImage]
MACHINE: [qemux86-64]
FSTYPE: [ext4]
ROOTFS: [/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.ext4]
SNAPSHOT: [Enabled. Changes on rootfs won't be kept after QEMU shutdown.]
CONFFILE: [/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.qemuboot.conf]
runqemu - INFO - Setting up tap interface under sudo
runqemu - INFO - Network configuration: ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0
runqemu - INFO - Running /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/work/x86_64-linux/qemu-helper-native/1.0/recipe-sysroot-native/usr/bin/qemu-system-x86_64 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -drive file=/workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20251201183621.ext4,if=virtio,format=raw -usb -device usb-tablet -usb -device usb-kbd -cpu Skylake-Client -machine q35,i8042=off -smp 4 -m 256 -snapshot -serial mon:stdio -serial null -nographic -kernel /workdir/build/poky-master-poky-distro_poky-machine_qemux86-64/bitbake-builds/poky-master/build/tmp/deploy/images/qemux86-64/bzImage -append 'root=/dev/vda rw ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0 console=ttyS0 console=ttyS1 oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1 swiotlb=0 '
runqemu - INFO - Host uptime: 770778.17
SeaBIOS (version rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org)
iPXE (http://ipxe.org) 00:02.0 CA00 PCI2.10 PnP PMM+0EFC69C0+0EF269C0 CA00
Booting from ROM..
[ 0.000000] Linux version 6.16.11-yocto-standard (oe-user@oe-host) (x86_64-poky-linux-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.45.0.20250908) #1 SMP PREEMPT_DYNAMIC Mon Oct 6 13:50:41 5
[ 0.000000] Command line: root=/dev/vda rw ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0 console=ttyS0 console=ttyS1 oprofile.timer=1 tsc=reliable no_timer_c
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
...
[ 2.541196] md: ... autorun DONE.
[ 2.586200] EXT4-fs (vda): mounted filesystem cd88b20c-3447-4d46-aa20-085686c4bfbb r/w with ordered data mode. Quota mode: disabled.
[ 2.587073] VFS: Mounted root (ext4 filesystem) on device 253:0.
[ 2.589326] devtmpfs: mounted
[ 2.617062] usb 2-2: new high-speed USB device number 3 using ehci-pci
[ 2.747690] Freeing unused kernel image (initmem) memory: 3596K
[ 2.748581] Write protecting the kernel read-only data: 26624k
[ 2.750796] Freeing unused kernel image (text/rodata gap) memory: 668K
[ 2.751459] Freeing unused kernel image (rodata/data gap) memory: 56K
[ 2.752694] Run /sbin/init as init process
[ 2.760269] input: QEMU QEMU USB Keyboard as /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/0003:0627:0001.0002/input/input2
[ 2.818045] hid-generic 0003:0627:0001.0002: input: USB HID v1.11 Keyboard [QEMU QEMU USB Keyboard] on usb-0000:00:1d.7-2/input0
INIT: version 3.14 booting
Starting udev
[ 3.568490] udevd[140]: starting version 3.2.14
[ 3.653429] udevd[141]: starting eudev-3.2.14
[ 4.360739] EXT4-fs (vda): re-mounted cd88b20c-3447-4d46-aa20-085686c4bfbb.
INIT: Entering runlevel: 5
Configuring network interfaces... ip: RTNETLINK answers: File exists
Starting syslogd/klogd: done
Poky (Yocto Project Reference Distro) 5.2.99+snapshot-ac7327583aef83fd400190506f3147623de38b68 qemux86-64 /dev/ttyS0
Type 'root' to login with superuser privileges (no password will be asked).qemux86-64
qemux86-64 login:
You can log in as root with no password.
qemux86-64 login: root
WARNING: Poky is a reference Yocto Project distribution that should be used for
testing and development purposes only. It is recommended that you create your
own distribution for production use.
root@qemux86-64:~# cat /proc/version
Linux version 6.16.11-yocto-standard (oe-user@oe-host) (x86_64-poky-linux-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.45.0.20250908) #1 SMP PREEMPT_DYNAMIC Mon Oct 6 13:50:41 UTC 2025
root@qemux86-64:~# cat /etc/issue
Poky (Yocto Project Reference Distro) 5.2.99+snapshot-ac7327583aef83fd400190506f3147623de38b68 \n \l
Type 'root' to login with superuser privileges (no password will be asked).\n
root@qemux86-64:~# cat /proc/cmdline
root=/dev/vda rw ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0 console=ttyS0 console=ttyS1 oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1
root@qemux86-64:~# lsmod
Module Size Used by
If you wonder why there are no kernel modules showing up, take a look here.
You can shut down the system as usual
root@qemux86-64:~# shutdown -h now
Conclusion
That’s just a small demo of how a “Build Container” can be used to build an “image” suitable for the QEMU emulator. On top of that there is a little trick how to run the emulator inside a container.
Poky is the reference implementation of the Yocto Project®.
Related Links
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.