Last Updated on November 9, 2025

Reliable Embedded Systems – Robert Berger e.U. build framework & qemux86-64-virt-master

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.

Prerequisites

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”.

Install a minimal Build framework

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
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

Download meta data

cd /workdir
./qemux86-64-virt-master.sh
WORKDIR: /workdir
This script will kill everything
and grab everything from scratch
Are you sure? [y/N] N
not killing!
use experimental for now
1) stable
2) experimental
#? 2
MANIFEST: experimental
+ Do you want to replace manifests first?
Are you sure? [y/N] N
+ manifests might be replaced later
+ you might need to run resy.sh again
--> meta-virtualization-master
git clone -b master git://git.yoctoproject.org/meta-virtualization /workdir/sources/meta-virtualization-master --single-branch
Cloning into '/workdir/sources/meta-virtualization-master'...
remote: Enumerating objects: 13647, done.
remote: Counting objects: 100% (3661/3661), done.
remote: Compressing objects: 100% (724/724), done.
remote: Total 13647 (delta 3255), reused 2937 (delta 2937), pack-reused 9986
Receiving objects: 100% (13647/13647), 3.83 MiB | 4.09 MiB/s, done.
Resolving deltas: 100% (7966/7966), done.
trying to apply this patch: /workdir/sources/manifests/meta-virtualization-master/patch.sh
Press <ENTER> to go on

+ pushd /workdir/sources/meta-virtualization-master
/workdir/sources/meta-virtualization-master /workdir
+ /workdir/sources/manifests/meta-virtualization-master/patch.sh
+ git add .
+ git commit -m 'patch typically only against upstream master'
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
+ popd
/workdir
+ set +x
pushd /workdir/sources/meta-virtualization-master
/workdir/sources/meta-virtualization-master /workdir
git branch
* master
popd
/workdir
<-- meta-virtualization-master
--> poky-master
git clone -b master git://git.yoctoproject.org/poky /workdir/sources/poky-master --single-branch
Cloning into '/workdir/sources/poky-master'...
remote: Enumerating objects: 523280, done.
remote: Counting objects: 100% (58798/58798), done.
remote: Compressing objects: 100% (10252/10252), done.
remote: Total 523280 (delta 54773), reused 48903 (delta 48531), pack-reused 464482
Receiving objects: 100% (523280/523280), 181.73 MiB | 11.22 MiB/s, done.
Resolving deltas: 100% (375830/375830), done.
trying to apply this patch: /workdir/sources/manifests/poky-master/patch.sh
Press <ENTER> to go on
...
--> resy-master
git clone -b master https://gitlab.com/meta-layers/meta-resy.git /workdir/sources/meta-resy-master --single-branch
Cloning into '/workdir/sources/meta-resy-master'...
remote: Enumerating objects: 2030, done.
remote: Counting objects: 100% (269/269), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 2030 (delta 191), reused 205 (delta 164), pack-reused 1761
Receiving objects: 100% (2030/2030), 397.34 KiB | 3.08 MiB/s, done.
Resolving deltas: 100% (1025/1025), done.
pushd /workdir/sources/meta-resy-master
/workdir/sources/meta-resy-master /workdir
git branch
* master
popd
/workdir
<-- resy-master
+ '[' '!' -L resy-poky-container.sh ']'
+ '[' '!' -L resy-sdk-container.sh ']'
+ '[' '!' -L resy-cooker.sh ']'
+ '[' '!' -L killall_bitbake.sh ']'
+ '[' '!' -L oci-copy-to-docker.sh ']'
+ '[' '!' -L oci-copy-to-docker.sh ']'
+ '[' '!' -L build-and-shutdown.sh ']'
+ '[' '!' -L resy.sh ']'
+ set +x
symlinks ready

On host machine

Adjust resy-poky-container.sh

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"

Start docker build container and initialize the build environment

cd /workdir
./resy-poky-container.sh qemux86-64-virt-master

In container

You might want to adjust /workdir/build/qemux86-64-virt-master/conf/site.conf since you will probably not have MIRRORS, PREMIRRORS and the like set up.

Build a core-image-minimal

pokyuser@t460s-1:~$ bitbake core-image-minimal
NOTE: Started PRServer with DBfile: /workdir/persistent_master/prserv.sqlite3, Address: 127.0.0.1:34729, PID: 88
Loading cache: 100% |                                                                                                                                                         | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################| Time: 0:02:31
Parsing of 2864 .bb files complete (0 cached, 2864 parsed). 4702 targets, 314 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "2.4.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "ubuntu-22.04"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "4.2+snapshot-47bf87f3a3f0af9d773c29601273e7feb16a6683"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "master:47bf87f3a3f0af9d773c29601273e7feb16a6683"
meta-oe              
meta-networking      
meta-filesystems     
meta-python          
meta-perl            = "master:b74b10e31620f90b92979e2f1516bfbc8d051ec2"
meta-virtualization-master = "master:683bfbfc19db8de034da2b652af14c8df72c912c"

Initialising tasks: 100% |#####################################################################################################################################################| Time: 0:01:32
Checking sstate mirror object availability: 100% |#############################################################################################################################| Time: 0:00:47
Sstate summary: Wanted 1925 Local 1107 Mirrors 0 Missed 818 Current 0 (57% match, 0% complete)
NOTE: Executing Tasks
Checking sstate mirror object availability: 100% |#############################################################################################################################| Time: 0:00:40
Checking sstate mirror object availability: 100% |#############################################################################################################################| Time: 0:00:09
NOTE: Tasks Summary: Attempted 4038 tasks of which 3345 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 4 seconds
pokyuser@t460s-1:~$ 

Now we should have some “core-image-minimal”. We will try to run it from within the emulator.

Open a privileged session suitable to run QEMU

Open a new shell on the host.

cd /workdir/sources/manifests
./root-in-poky-container.sh
root@t460s-1:/home/yoctouser#

Start QEMU in non graphical mode

In the docker container (as root)

cd /workdir
source ./resy-cooker.sh qemux86-64-virt-master
runqemu nographic
runqemu - INFO - Running bitbake -e  ...
runqemu - INFO - Continuing with the following parameters:
KERNEL: [/workdir/build/qemux86-64-virt-master/tmp/deploy/images/qemux86-64/bzImage]
MACHINE: [qemux86-64]
FSTYPE: [ext4]
ROOTFS: [/workdir/build/qemux86-64-virt-master/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20230905122028.ext4]
CONFFILE: [/workdir/build/qemux86-64-virt-master/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20230905122028.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/qemux86-64-virt-master/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/qemux86-64-virt-master/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs-20230905122028.ext4,if=virtio,format=raw -usb -device usb-tablet -usb -device usb-kbd   -cpu IvyBridge -machine q35,i8042=off -smp 4 -m 256 -serial mon:stdio -serial null -nographic  -kernel /workdir/build/qemux86-64-virt-master/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 '

runqemu - INFO - Host uptime: 103086.94
SeaBIOS (version rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org)


iPXE (http://ipxe.org) 00:02.0 CA00 PCI2.10 PnP PMM+0EFC9450+0EF29450 CA00



Booting from ROM...
[    0.000000] Linux version 6.4.11-yocto-standard (oe-user@oe-host) (x86_64-poky-linux-gcc (GCC) 13.2.0, GNU ld (GNU Binutils) 2.41.0.20230731) #1 SMP PREEMPT_DYNAMIC Mon Aug 21 15:35:20 U3
[    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
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000000ffd7fff] usable
[    0.000000] BIOS-e820: [mem 0x000000000ffd8000-0x000000000fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.8 present.
[    0.000000] DMI: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 2808.053 MHz processor
[    0.014440] last_pfn = 0xffd8 max_arch_pfn = 0x400000000
[    0.015280] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT
[    0.043278] found SMP MP-table at [mem 0x000f5b70-0x000f5b7f]
[    0.052687] ACPI: Early table checksum verification disabled
[    0.053474] ACPI: RSDP 0x00000000000F59A0 000014 (v00 BOCHS )
[    0.054062] ACPI: RSDT 0x000000000FFE2458 000038 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.055201] ACPI: FACP 0x000000000FFE2238 0000F4 (v03 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.056350] ACPI: DSDT 0x000000000FFE0040 0021F8 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.056553] ACPI: FACS 0x000000000FFE0000 000040
[    0.056676] ACPI: APIC 0x000000000FFE232C 000090 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.056746] ACPI: HPET 0x000000000FFE23BC 000038 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.056813] ACPI: MCFG 0x000000000FFE23F4 00003C (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.056880] ACPI: WAET 0x000000000FFE2430 000028 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
[    0.057068] ACPI: Reserving FACP table memory at [mem 0xffe2238-0xffe232b]
[    0.057146] ACPI: Reserving DSDT table memory at [mem 0xffe0040-0xffe2237]
[    0.057164] ACPI: Reserving FACS table memory at [mem 0xffe0000-0xffe003f]
[    0.057180] ACPI: Reserving APIC table memory at [mem 0xffe232c-0xffe23bb]
[    0.057196] ACPI: Reserving HPET table memory at [mem 0xffe23bc-0xffe23f3]
[    0.057212] ACPI: Reserving MCFG table memory at [mem 0xffe23f4-0xffe242f]
[    0.057228] ACPI: Reserving WAET table memory at [mem 0xffe2430-0xffe2457]
[    0.063941] Zone ranges:
[    0.063990]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.064120]   DMA32    [mem 0x0000000001000000-0x000000000ffd7fff]
[    0.064149]   Normal   empty
[    0.064202] Movable zone start for each node
[    0.064253] Early memory node ranges
[    0.064314]   node   0: [mem 0x0000000000001000-0x000000000009efff]
[    0.064583]   node   0: [mem 0x0000000000100000-0x000000000ffd7fff]
[    0.064849] Initmem setup node 0 [mem 0x0000000000001000-0x000000000ffd7fff]
[    0.066909] On node 0, zone DMA: 1 pages in unavailable ranges
[    0.067453] On node 0, zone DMA: 97 pages in unavailable ranges
[    0.082566] On node 0, zone DMA32: 40 pages in unavailable ranges
[    0.083183] ACPI: PM-Timer IO Port: 0x608
[    0.083846] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
[    0.084328] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23
[    0.084491] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.084831] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
[    0.084892] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.085017] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
[    0.085034] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
[    0.085273] ACPI: Using ACPI (MADT) for SMP configuration information
[    0.085334] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[    0.085786] smpboot: Allowing 4 CPUs, 0 hotplug CPUs
[    0.086706] [mem 0x10000000-0xafffffff] available for PCI devices
[    0.086756] Booting paravirtualized kernel on bare hardware
[    0.087145] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns
[    0.087715] setup_percpu: NR_CPUS:64 nr_cpumask_bits:4 nr_cpu_ids:4 nr_node_ids:1
[    0.091719] percpu: Embedded 56 pages/cpu s189864 r8192 d31320 u524288
[    0.094451] Kernel 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_
[    0.097479] random: crng init done
[    0.098027] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.098288] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.103039] Built 1 zonelists, mobility grouping on.  Total pages: 64216
[    0.105963] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.112511] Memory: 220364K/261592K available (18432K kernel code, 2255K rwdata, 5104K rodata, 3332K init, 2428K bss, 40968K reserved, 0K cma-reserved)
[    0.117174] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.118809] Kernel/User page tables isolation: enabled
[    0.123503] ftrace: allocating 49248 entries in 193 pages
[    0.183862] ftrace: allocated 193 pages with 3 groups
[    0.191521] Dynamic Preempt: full
[    0.196183] rcu: Preemptible hierarchical RCU implementation.
[    0.196203] rcu:     RCU event tracing is enabled.
[    0.196234] rcu:     RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4.
[    0.196333]  All grace periods are expedited (rcu_expedited).
[    0.196379]  Trampoline variant of Tasks RCU enabled.
[    0.196389]  Rude variant of Tasks RCU enabled.
[    0.196398]  Tracing variant of Tasks RCU enabled.
[    0.196571] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[    0.196605] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.228983] NR_IRQS: 4352, nr_irqs: 456, preallocated irqs: 16
[    0.235886] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.241555] kfence: initialized - using 2097152 bytes for 255 objects at 0x(____ptrval____)-0x(____ptrval____)
[    0.247256] Console: colour VGA+ 80x25
[    0.249486] printk: console [ttyS0] enabledClean up your unlinked content to make sure people can find it
[    0.298541] ACPI: Core revision 20230331
[    0.308303] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
[    0.321549] APIC: Switch to symmetric I/O mode setup
[    0.331411] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.334066] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x2879f856233, max_idle_ns: 440795305185 ns
[    0.335938] Calibrating delay loop (skipped), value calculated using timer frequency.. 5616.10 BogoMIPS (lpj=2808053)
[    0.345889] Last level iTLB entries: 4KB 0, 2MB 0, 4MB 0
[    0.346495] Last level dTLB entries: 4KB 0, 2MB 0, 4MB 0, 1GB 0
[    0.347857] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization
[    0.348927] Spectre V2 : Mitigation: Retpolines
[    0.349382] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch
[    0.349767] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT
[    0.350517] Speculative Store Bypass: Vulnerable
[    0.350834] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[    0.351368] MMIO Stale Data: Unknown: No mitigations
[    0.351751] SRBDS: Unknown: Dependent on hypervisor status
[    0.357509] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.363268] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.364280] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.365090] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.366300] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.626918] Freeing SMP alternatives memory: 52K
[    0.628871] pid_max: default: 32768 minimum: 301
[    0.638158] LSM: initializing lsm=capability,landlock,integrity
[    0.640374] landlock: Up and running.
...
[    4.206499] printk: console [netcon0] enabled
[    4.207239] netconsole: network logging started
[    4.259777] IP-Config: Complete:
[    4.260144]      device=eth0, hwaddr=52:54:00:12:34:02, ipaddr=192.168.7.2, mask=255.255.255.0, gw=192.168.7.1
[    4.260950]      host=192.168.7.2, domain=, nis-domain=(none)
[    4.262268]      bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=
[    4.262424]      nameserver0=8.8.8.8
[    4.269614] clk: Disabling unused clocks
[    4.297452] input: QEMU QEMU USB Tablet as /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/0003:0627:0001.0001/input/input1
[    4.301840] hid-generic 0003:0627:0001.0001: input: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb-0000:00:1d.7-1/input0
[    4.304454] md: Waiting for all devices to be available before autodetect
[    4.305700] md: If you don't use raid, use raid=noautodetect
[    4.308264] md: Autodetecting RAID arrays.
[    4.309052] md: autorun ...
[    4.309367] md: ... autorun DONE.
[    4.420219] usb 2-2: new high-speed USB device number 3 using ehci-pci
[    4.484535] EXT4-fs (vda): mounted filesystem 2b99f94d-69af-4f33-822f-a81267c77494 r/w with ordered data mode. Quota mode: disabled.
[    4.486342] VFS: Mounted root (ext4 filesystem) on device 253:0.
[    4.491424] devtmpfs: mounted
[    4.571701] 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
[    4.633216] hid-generic 0003:0627:0001.0002: input: USB HID v1.11 Keyboard [QEMU QEMU USB Keyboard] on usb-0000:00:1d.7-2/input0
[    4.743785] Freeing unused kernel image (initmem) memory: 3332K
[    4.745582] Write protecting the kernel read-only data: 24576k
[    4.749851] Freeing unused kernel image (rodata/data gap) memory: 1040K
[    4.751768] Run /sbin/init as init process
[    4.831680] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    5.549297] systemd[1]: systemd 254^ running in system mode (-PAM -AUDIT -SELINUX -APPARMOR +IMA -SMACK +SECCOMP -GCRYPT -GNUTLS -OPENSSL +ACL +BLKID -CURL -ELFUTILS -FIDO2 -IDN2 -IDN -I)
[    5.552537] systemd[1]: Detected virtualization qemu.
[    5.554357] systemd[1]: Detected architecture x86-64.

Welcome to Poky (Yocto Project Reference Distro) 4.2+snapshot-47bf87f3a3f0af9d773c29601273e7feb16a6683 (nanbield)!

[    5.646967] systemd[1]: Hostname set to <qemux86-64>.
[    5.656953] systemd[1]: Initializing machine ID from random generator.
[    8.079781] systemd[1]: Queued start job for default target Multi-User System.
[    8.472637] systemd[1]: Created slice Slice /system/getty.
[  OK  ] Created slice Slice /system/getty.
[    8.503490] systemd[1]: Created slice Slice /system/modprobe.
[  OK  ] Created slice Slice /system/modprobe.
[    8.528688] systemd[1]: Created slice Slice /system/serial-getty.
[  OK  ] Created slice Slice /system/serial-getty.
[    8.554901] systemd[1]: Created slice User and Session Slice.
[  OK  ] Created slice User and Session Slice.
[    8.565514] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Dispatch Password Requests to Console Directory Watch.
[    8.573771] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Started Forward Password Requests to Wall Directory Watch.
[    8.578616] systemd[1]: Reached target Path Units.
[  OK  ] Reached target Path Units.
[    8.582380] systemd[1]: Reached target Remote File Systems.
[  OK  ] Reached target Remote File Systems.
[    8.586290] systemd[1]: Reached target Slice Units.
[  OK  ] Reached target Slice Units.
[    8.589880] systemd[1]: Reached target Swaps.
[  OK  ] Reached target Swaps.
[    8.604863] systemd[1]: Listening on Syslog Socket.
[  OK  ] Listening on Syslog Socket.
[    8.612680] systemd[1]: Listening on initctl Compatibility Named Pipe.
[  OK  ] Listening on initctl Compatibility Named Pipe.
[    8.661374] systemd[1]: Journal Audit Socket was skipped because of an unmet condition check (ConditionSecurity=audit).
[    8.669435] systemd[1]: Listening on Journal Socket (/dev/log).
[  OK  ] Listening on Journal Socket (/dev/log).
[    8.679352] systemd[1]: Listening on Journal Socket.
[  OK  ] Listening on Journal Socket.
[    8.689413] systemd[1]: Listening on Network Service Netlink Socket.
[  OK  ] Listening on Network Service Netlink Socket.
[    8.703401] systemd[1]: Listening on udev Control Socket.
[  OK  ] Listening on udev Control Socket.
[    8.710837] systemd[1]: Listening on udev Kernel Socket.
[  OK  ] Listening on udev Kernel Socket.
[    8.718371] systemd[1]: Listening on User Database Manager Socket.
[  OK  ] Listening on User Database Manager Socket.
[    8.729892] systemd[1]: Huge Pages File System was skipped because of an unmet condition check (ConditionPathExists=/sys/kernel/mm/hugepages).
[    8.785832] systemd[1]: Mounting POSIX Message Queue File System...
         Mounting POSIX Message Queue File System...
[    8.857702] systemd[1]: Mounting Kernel Debug File System...
         Mounting Kernel Debug File System...
[    8.955262] systemd[1]: Mounting Kernel Trace File System...
         Mounting Kernel Trace File System...
[    9.014626] systemd[1]: Mounting Temporary Directory /tmp...
...
[  OK  ] Started Kernel Logging Service.
[  OK  ] Started System Logging Service.
         Starting D-Bus System Message Bus...
[  OK  ] Started Getty on tty1.
         Starting IPv6 Packet Filtering Framework...
         Starting IPv4 Packet Filtering Framework...
[  OK  ] Started Serial Getty on ttyS0.
[  OK  ] Started Serial Getty on ttyS1.
[  OK  ] Reached target Login Prompts.
         Starting User Login Management...
[  OK  ] Started D-Bus System Message Bus.
[  OK  ] Finished IPv6 Packet Filtering Framework.
[  OK  ] Finished IPv4 Packet Filtering Framework.
[  OK  ] Reached target Preparation for Network.
         Starting Network Configuration...
[  OK  ] Started User Login Management.
[  OK  ] Started Network Configuration.
[  OK  ] Reached target Network.
         Starting containerd container runtime...
[  OK  ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.

Poky (Yocto Project Reference Distro) 4.2+snapshot-47bf87f3a3f0af9d773c29601273e7feb16a6683 qemux86-64 ttyS0

qemux86-64 login:root
root@qemux86-64:~#

You can log in as root with no password.

root@qemux86-64:~# cat /proc/version 
Linux version 6.4.11-yocto-standard (oe-user@oe-host) (x86_64-poky-linux-gcc (GCC) 13.2.0, GNU ld (GNU Binutils) 2.41.0.20230731) #1 SMP PREEMPT_DYNAMIC Mon Aug 21 15:35:20 UTC 2023
root@qemux86-64:~# lsmod
Module                  Size  Used by
sch_fq_codel           16384  1

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 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®.

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.

Upcoming Events

Our 3 points

of differentiation

We provide host and target hardware during all our teaching.

Three or more people from the same company? We provide private customized training – consulting included.

Subject matter experts develop high-quality, job-related, up-to-date, authentic courseware.

Reliable Embedded Systems
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.