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
Convenient symlink on the host
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.