{"id":58697,"date":"2026-02-11T06:59:07","date_gmt":"2026-02-11T06:59:07","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=58697"},"modified":"2026-02-21T08:46:33","modified_gmt":"2026-02-21T08:46:33","slug":"4-day-training-agenda-linux-yocto-embedded-linux-basic-%e2%86%92-advanced","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/4-day-training-agenda-linux-yocto-embedded-linux-basic-%e2%86%92-advanced\/","title":{"rendered":"4-Day Training Agenda: Linux + Yocto Embedded Linux (Basic \u2192 Advanced)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">4-Day Training Agenda: Linux + Yocto Embedded Linux (Basic \u2192 Advanced)<\/h2>\n\n\n\n<p><strong>Release baseline used in this course:<\/strong> current stable Yocto <strong>5.3 (Whinlatter, Dec 2026)<\/strong> plus <strong>5.0 (Scarthgap LTS)<\/strong> practices for long-lived products. (<a href=\"https:\/\/wiki.yoctoproject.org\/wiki\/Releases\" target=\"_blank\" rel=\"noopener\">wiki.yoctoproject.org<\/a>)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Target audience<\/h3>\n\n\n\n<p>Embedded \/ platform \/ DevOps engineers who need to <strong>build, customize, secure, and operate<\/strong> an embedded Linux distro using Yocto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites (what participants should have)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Comfortable with basic terminal usage (or we cover from scratch on Day-1)<\/li>\n\n\n\n<li>A Linux build machine (native or VM). For modern Yocto builds, expect <strong>~32 GB RAM<\/strong> and <strong>~140 GB free disk<\/strong> as practical minimums for a full image build. (<a href=\"https:\/\/docs.yoctoproject.org\/5.3\/ref-manual\/system-requirements.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n\n\n\n<li>Optional hardware board (any common ARM64\/ARMv7 dev board). If not available, we use QEMU.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\">Day 1 \u2014 Foundations: Linux essentials + Yocto mental model + first boot<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1) Linux fundamentals for embedded work<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux filesystem &amp; hierarchy (rootfs layout, \/proc, \/sys, \/dev)<\/li>\n\n\n\n<li>Users, groups, permissions, capabilities (what matters on devices)<\/li>\n\n\n\n<li>Processes, signals, jobs, scheduling basics (top, ps, nice, cgroups concepts)<\/li>\n\n\n\n<li>Services &amp; boot basics (systemd overview, journald logs, units)<\/li>\n\n\n\n<li>Networking essentials (interfaces, routes, DNS basics, SSH hygiene)<\/li>\n\n\n\n<li>Core troubleshooting muscle: logs, dmesg, journald, strace\/ltrace concepts<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Embedded Linux landscape (where Yocto fits)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buildroot vs Yocto (trade-offs: customization depth, maintenance, scaling)<\/li>\n\n\n\n<li>Cross-compiling fundamentals (sysroot, toolchain, ABI, target triples)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Yocto architecture (the \u201cwhy it works\u201d model)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poky, OE-Core, BitBake, metadata layers, recipes<\/li>\n\n\n\n<li>Tasks, dependency graph, sstate cache concept (what rebuilds and why)<\/li>\n\n\n\n<li>Machines, distros, images: what each one controls<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Hands-on deliverables (end of Day-1)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build environment setup (modern workflows)<\/li>\n\n\n\n<li>Create a build directory, set MACHINE, build a <strong>minimal image<\/strong><\/li>\n\n\n\n<li>Boot the image in <strong>QEMU<\/strong> and validate: login, networking, services, logs<\/li>\n<\/ul>\n\n\n\n<p><strong>Day-1 output:<\/strong> \u201cHello Yocto\u201d image booted (QEMU), plus a clear map of how layers\/recipes\/tasks connect.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\">Day 2 \u2014 Working like a Yocto engineer: BitBake, metadata, debugging, and build performance<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1) BitBake deep dive (practical, not theoretical)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tasks and execution flow (fetch \u2192 unpack \u2192 patch \u2192 configure \u2192 compile \u2192 install \u2192 package \u2192 image)<\/li>\n\n\n\n<li>Variables &amp; overrides (how configuration <em>actually<\/em> resolves)<\/li>\n\n\n\n<li>Common workspace files: local.conf, bblayers.conf, distro\/machine config<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Recipes, packages, and images<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Anatomy of a recipe (SRC_URI, patches, do_install, FILES, RDEPENDS)<\/li>\n\n\n\n<li>Packaging models (rpm\/deb\/ipk) and why you\u2019d choose each<\/li>\n\n\n\n<li>IMAGE_FEATURES, packagegroups, recommended patterns for image composition<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Debugging builds like a pro<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Where failures happen (fetch, patch, compile, QA, rootfs, image)<\/li>\n\n\n\n<li>Reading task logs, reproducing a task, inspecting WORKDIR<\/li>\n\n\n\n<li>Patch workflows (best practices for long-term maintainability)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Performance &amp; scalability (modern best practices)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Downloads and sstate strategy (local cache, shared cache, mirrors conceptually)<\/li>\n\n\n\n<li>Controlling parallelism and host resource usage (avoiding OOMs and thrashing)<\/li>\n\n\n\n<li>Hash equivalence &amp; repeatable outputs (why teams use it at scale) (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/migration-guides\/release-notes-5.3.html\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><strong>Day-2 output:<\/strong> participants can confidently add packages\/features, troubleshoot failures, and speed up rebuild cycles.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\">Day 3 \u2014 Productization &amp; advanced customization: BSP, kernel, images, SDK, compliance<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1) BSP and hardware enablement (board bring-up path)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BSP layer design (what goes into meta-bsp vs meta-product)<\/li>\n\n\n\n<li>MACHINE tuning: CPU features, device selection, boot args, storage<\/li>\n\n\n\n<li>Kernel integration options:\n<ul class=\"wp-block-list\">\n<li>Kernel recipe strategy (vendor vs mainline approach)<\/li>\n\n\n\n<li>Device tree workflow and patch management<\/li>\n\n\n\n<li>Kernel configuration fragments workflow (portable + maintainable) (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/migration-guides\/release-notes-5.3.html\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Bootloader overview (U-Boot\/EFI\/GRUB concepts; where Yocto config lives)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Image engineering (real device concerns)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rootfs sizing, partitions, and WIC image creation<\/li>\n\n\n\n<li>Filesystem choices (ext4, squashfs, erofs, compressed images) and when to use which<\/li>\n\n\n\n<li>Advanced WIC patterns (extra partitions, artifact injection, reproducible layouts) (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/migration-guides\/release-notes-5.3.html\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Developer workflow for applications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SDK vs eSDK vs \u201cbuild inside Yocto\u201d decision points<\/li>\n\n\n\n<li>devtool workflow (modify, build, deploy, finish) and team collaboration model<\/li>\n\n\n\n<li>Exporting toolchains\/SDKs and integrating with IDE\/CI pipelines<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Security, SBOM, and release governance (what\u2019s now expected)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>License compliance workflow (SPDX concepts, manifests, audits)<\/li>\n\n\n\n<li>SBOM generation and consumption strategy (build-time artifacts and pipelines) (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/dev-manual\/sbom.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n\n\n\n<li>Vulnerability workflows: CVE scanning, triage, suppressions\/justifications, and release gating<\/li>\n\n\n\n<li>QA checks and \u201cquality gates\u201d approach for product builds (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/migration-guides\/release-notes-5.3.html\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><strong>Day-3 output:<\/strong> a <strong>custom layer<\/strong> (meta-yourproduct), a bootable image with your selected packages\/services, WIC-based image artifacts, and an SDK\/eSDK workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\">Day 4 \u2014 Using the created Linux: operating, debugging, updating, and maintaining Yocto-built systems (full day)<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This day is dedicated to <strong>running and using<\/strong> the Linux you built with Yocto\u2014exactly as requested.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">1) Boot, flash, and verify on target (or QEMU if no hardware)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Boot flow: bootloader \u2192 kernel \u2192 init\/systemd \u2192 services<\/li>\n\n\n\n<li>Flashing methods by artifact type (wic image, sdcard image, raw partitions)<\/li>\n\n\n\n<li>First-boot checklist: clocks\/time, networking, storage mounts, logs, CPU\/mem sanity<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Day-to-day embedded Linux operations (hands-on)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>User access, SSH hardening basics, key management<\/li>\n\n\n\n<li>Service management with systemd (enable\/disable, override files, targets)<\/li>\n\n\n\n<li>Logging &amp; troubleshooting: journalctl patterns, persistent logs, crash collection<\/li>\n\n\n\n<li>Networking in the field: DHCP vs static, DNS troubleshooting, firewall basics<\/li>\n\n\n\n<li>Storage reliability basics: fs checks, wear\/partition strategies (conceptual)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Deploying and debugging your application on Yocto Linux<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using the SDK to build an app, deploy to target, validate runtime deps<\/li>\n\n\n\n<li>Debugging: gdb\/gdbserver basics, core dumps, strace on real issues<\/li>\n\n\n\n<li>Performance checks: boot time, memory footprint, CPU usage, IO bottlenecks<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Updating and maintaining devices (practical strategy)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Package feeds vs image-based updates (trade-offs and recommended usage)<\/li>\n\n\n\n<li>Update safety principles: A\/B concepts, rollback thinking, power-loss tolerance<\/li>\n\n\n\n<li>How Yocto artifacts and versioning support long-term maintenance (release discipline)<\/li>\n\n\n\n<li>Using run-time images efficiently (including modern run tooling improvements) (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/migration-guides\/release-notes-5.3.html\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><strong>Day-4 output:<\/strong> a working \u201cfield-ready\u201d operational playbook: boot + verify + manage services + debug + update strategy for a Yocto-built device.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Capstone deliverables (end of 4 days)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A reproducible Yocto workspace layout (team-friendly)<\/li>\n\n\n\n<li>Custom meta layer (product layer) and one bootable image (QEMU + optional hardware)<\/li>\n\n\n\n<li>WIC image artifacts + SDK workflow<\/li>\n\n\n\n<li>Basic SBOM + vulnerability reporting flow integrated into the build pipeline (<a href=\"https:\/\/docs.yoctoproject.org\/dev\/dev-manual\/sbom.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">docs.yoctoproject.org<\/a>)<\/li>\n\n\n\n<li>Operations checklist for using and supporting the deployed Linux in real environments<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>4-Day Training Agenda: Linux + Yocto Embedded Linux (Basic \u2192 Advanced) Release baseline used in this course: current stable Yocto 5.3 (Whinlatter, Dec 2026) plus 5.0 (Scarthgap LTS) practices for&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-58697","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=58697"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58697\/revisions"}],"predecessor-version":[{"id":60304,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58697\/revisions\/60304"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=58697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=58697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=58697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}