Zuletzt aktualisiert am 27. Dezember 2023

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

Zielsetzungen

Kann die Reliable Embedded Systems - Robert Berger e.U. Yocto Project®/OpenEmbedded-Build-Umgebung und QEMU zusammenarbeiten? Oder brauchen wir echte Hardware? Schauen wir uns das mal an! Wir werden ein Image erstellen - ein "core-image-minimal" - für den qemux86-64-Emulator. Wir werden versuchen, das Image mit dem Emulator auszuführen.

Voraussetzungen

Wenn Sie bereits das Reliable Embedded Systems - Robert Berger e.U. Yocto Project®/OpenEmbedded Build Framework installiert haben, sind Sie in einer guten Position und können das Kapitel "Installieren Sie ein minimales Build Framework" überspringen.

Installieren Sie ein minimales Build-Framework

Docker installieren

sudo apt install docker.io
sudo usermod -aG docker ${USER}
sudo reboot

Legen Sie ein Verzeichnis an, in dem Sie viel Platz haben

mkdir -p ~/projects/resy-playground
cd ~/projects/resy-playground
sudo ln -sf ~/projects/resy-playground /workdir
cd /workdir

Möglicherweise müssen Sie einige Berechtigungen ändern.

Manifeste herunterladen

mkdir -p /workdir/sources
pushd /workdir/sources
git clone https://github.com/RobertBerger/manifests.git
popd

Metadaten herunterladen

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

Auf dem Host-Rechner

Anpassen von resy-poky-container.sh

rber@t460s-1:/workdir$⟫

cd /workdir
vim ./resy-poky-container.sh

Ersetzen Sie USE_QEMU="no" mit 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"

Starten Sie den Docker-Build-Container und initialisieren Sie die Build-Umgebung

rber@t460s-1:/workdir$⟫

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

Im Container

Möglicherweise möchten Sie Folgendes anpassen /workdir/build/qemux86-64-virt-master/conf/site.conf da Sie wahrscheinlich keine MIRRORS, PREMIRRORS und dergleichen eingerichtet haben werden.

Bauen Sie eine core-image-minimal

pokyuser@t460s-1:/workdir$

bitbake 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:~$ 

Jetzt sollten wir ein "core-image-minimal" haben. Wir werden versuchen, es im Emulator auszuführen.

Öffnen Sie eine privilegierte Sitzung, die für die Ausführung von QEMU geeignet ist

Öffnen Sie eine neue Shell auf dem Host.

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

QEMU im nicht grafischen Modus starten

Im Docker-Container (als root)

root@t460s-1:/home/yoctouser#
cd /workdir
source ./resy-cooker.sh qemux86-64-virt-master
runqemu nographic
root@t460s-1:/workdir# 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:~#

Sie können sich als root und ohne Passwort anmelden.

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

Sie können das System wie gewohnt herunterfahren

root@qemux86-64:~# shutdown -h now

Schlussfolgerung

Dies ist nur ein kleines Beispiel dafür, wie ein "Build Container" verwendet werden kann, um ein für den Emulator geeignetes "Image" zu erstellen. Darüber hinaus gibt es einen kleinen Trick, wie man den Emulator innerhalb eines Containers laufen lassen kann.

Poky ist die Referenzimplementierung des Yocto Project®.

Anhang

Ein Blog-Beitrag, der beschreibt, wie man den Upstream-Kernel ohne das Yocto Project® baut, ist hier zu finden. Wenn Sie wissen wollen, wie Embedded Linux funktioniert, schauen Sie hier nach. Um mehr über das Yocto Project® zu erfahren, schauen Sie hier.

Kommende Veranstaltungen

Unsere 3 Punkte

der Differenzierung

Wir stellen Host- und Zielhardware für alle unsere Kurse zur Verfügung.

Drei oder mehr Personen aus demselben Unternehmen? Wir bieten maßgeschneiderte Privatschulungen an - Beratung inklusive.

Fachexperten entwickeln hochwertige, berufsbezogene, aktuelle und authentische Kursunterlagen.