Skip to content

Lab Index

This page lists the hands-on labs used by the Embedded Linux Learning site.

Naming Convention

Lab files use the dayXX-topic-name.md format. Markdown page titles use the DayXX - Topic Name format so the filename, page title, sidebar title, and URL stay consistent.

Labs

Day Lab Path
Day 02 Day02 - Device List Exploration labs/day02-device-list.md
Day 03 Day03 - Boot Process Analysis labs/day03-boot-analysis.md
Day 04 Day04 - Device Tree Overlay labs/day04/day04-device-tree-overlay.md
Day 04 Day04 - Device Tree Exploration on Raspberry Pi labs/day04/day04-device-tree.md
Day 05 Day05 - Kernel Module Hello World labs/day05/day05-kernel-module.md
Day 07 Day07 - Cross-Compile Kernel Module for Raspberry Pi 5 labs/day07-cross-compile.md
Day 08 Day08 - Device Model Exploration labs/day08-device-model-explore.md
Day 09 Day09 - GPIO LED Driver labs/day09/day09-gpio-driver.md
Day 11 Day11 - Multi-GPIO IRQ Driver labs/day11/day11-multi-gpio-irq.md
Day 12 Day12 - Event-Driven GPIO Driver with poll() labs/day12/day12-poll-driver.md
Day 13 Day13 - GPIO IRQ Debounce with Workqueue labs/day13/day13-debounce-workqueue.md
Day 14 Day14 - Event-Driven GPIO Driver labs/day14/day14-event-driver.md
Day 15 Day15 - User-Space Event Loop and poll() labs/day15/day15-labs.md
Day 16 Day16 - IOCTL Control Plane labs/day16/day16-ioctl-control-plane.md
Day 17 Day17 - sysfs Control Plane labs/day17/day17-sysfs-control-plane.md
Day 18 Day18 - Blocking I/O and Event-Driven Driver labs/day18/day18-blocking-io.md
Day 19 Day19 - I2C Sensor Driver labs/day19/day19-i2c-driver.md
Day 20 Day20 - I2C Driver to hwmon labs/day20/day20-hwmon.md
Day 21 Day21 - hwmon Driver Cache Mechanism labs/day21/day21-cache-driver.md
Day 22 Day22 - I2C hwmon Driver with Polling Mode labs/day22/day22-myi2c-polling.md
Day 23 Day23 - I2C Sensor Interrupt labs/day23/day23-i2c-interrupt.md
Day 24 Day24 - Hybrid Mode Stress Test labs/day24/day24-hybrid-test.md
Day 25 Day25 - Hybrid Robustness and Update Coalescing labs/day25/day25-hybrid-robustness.md
Day 26 Day26 - Sensor Core and Bus Layer Refactor labs/day26/day26-core-bus-refactor.md
Day 27 Day27 - SPI Sensor Driver labs/day27/day27-spi-driver.md
Day 28 Day28 - SPI IRQ Integration labs/day28/day28-spi-irq-integration.md
Day 29 Day29 - UART and TTY Subsystem labs/day29/day29-uart-tty.md
Day 31 Day31 - UART Debugging labs/day31-uart-debugging.md
Day 33 Day33 - Minimal IIO Driver labs/day33/day33-minimal-iio-driver.md
Day 34 Day34 - IIO I2C Multi-Channel Driver labs/day34/day34-iio-i2c-multi-channel-driver.md
Day 35 Day35 - DRDY GPIO IRQ Integration labs/day35/day35-drdy-gpio-irq.md
Day 36 Day36 - IIO Triggered Buffer labs/day36/day36-iio-trigger-buffer.md
Day 37 Day37 - IIO FIFO Mode labs/day37/day37-iio-fifo.md
Day 38 Day38 - IIO Sysfs Control labs/day38/day38-iio-sysfs-control.md
Day 39 Day39 - IIO Capability Exposure labs/day39/day39-iio-capability-exposure.md
Day 40 Day40 - Acquisition Mode Control labs/day40/day40-mode-control.md
Day 41 Day41 - IIO Control Plane v3 Integration labs/day41/day41-iio-control-plane-v3-integration.md
Day 42 Day42 - IIO Timestamp, FIFO, and Scan Mask labs/day42/day42-iio-timestamp-fifo.md
Day 43 Day43 - GPIO Button Input Driver labs/day43/day43-input-driver.md
Day 44 Day44 - Input Userspace Application labs/day44/day44-input-userspace.md
Day 45 Day45 - TCP Server with poll() and epoll() labs/day45-46/day45-network-socket.md
Day 47 Day47 - Multi-Message TX Queue labs/day47/day47-multi-message-tx-queue.md
Day 48 Day48 - epoll and timerfd Idle Timeout labs/day48-49/day48-epoll-timerfd.md
Day 49 Day49 - signalfd and epoll Graceful Shutdown labs/day48-49/day49-signalfd-epoll.md
Day 50 Day50 - Pollable Character Driver with Event Queue labs/day50/day50-pollable-char-driver.md
Day 51 Day51 - Timer-Based Pollable Event Driver labs/day51/day51-timer-pollable-driver.md
Day 52 Day52 - fasync, SIGIO, and eventfd Integration labs/day52/day52-fasync-sigio-eventfd.md
Day 53 Day53 - UNIX Domain Socket IPC labs/day53/day53-unix-domain-socket-ipc.md
Day 54 Day54 - UNIX Domain Socket Advanced IPC labs/day54/day54-unix-domain-socket-advanced-ipc.md
Day 55 Day55 - SCM_RIGHTS File Descriptor Passing labs/day55/day55-scm-rights-fd-passing.md
Day 56 Day56 - POSIX Shared Memory IPC labs/day56/day56-posix-shared-memory-ipc.md
Day 57 Day57 - POSIX Message Queue IPC labs/day57/day57-posix-message-queue-ipc.md
Day 58 Day58 - POSIX Semaphore IPC labs/day58/day58-posix-semaphore-ipc.md
Day 59 Day59 - pthread Condition Variable Synchronization labs/day59/day59-pthread-condition-variable.md
Day 60 Day60 - Atomics, Memory Ordering, and Futex Foundation labs/day60/day60-atomics-memory-ordering.md
Day 61 Day61 - Futex, Mutex, and Condition Variable Internals labs/day61/day61-futex-mutex-condvar.md
Day 62 Day62 - pthread RWLock Internals and Fairness labs/day62/day62-pthread-rwlock-internals.md
Day 63 Day63 - Seqlock and RCU Motivation labs/day63/day63-seqlock-and-rcu-motivation.md
Day 64 Day64 - RCU Fundamentals and Grace Period Concept labs/day64/day64-rcu-fundamentals.md
Day 65 Day65 - Linux Kernel RCU APIs and Usage labs/day65/day65-rcu-api-usage.md
Day 66 Day66 - Quiescent State Tracking and Tree RCU Overview labs/day66/day66-quiescent-state-tracking.md
Day 67 Day67 - Workqueue Fundamentals labs/day67/day67-workqueue-fundamentals.md
Day 68 Day68 - Kernel Thread Fundamentals labs/day68/day68-kthread-fundamentals.md
Day 69 Day69 - Completion Synchronization labs/day69/day69-completion-synchronization.md
Day 70 Day70 - Notifier Chain labs/day70/day70-notifier-chain.md
Day 71 Day71 - Linux Driver Model Fundamentals labs/day71/day71-linux-driver-model.md
Day 72 Day72 - Platform Bus Internals labs/day72/day72-platform-bus.md
Day 73 Day73 - Platform Driver Development labs/day73/day73-platform-driver-development.md
Day 74 Day74 - MMIO Register Access labs/day74/day74-mmio-register-access.md
Day 75 Day75 - GPIO Controller Architecture labs/day75/day75-gpio-controller-architecture.md
Day 76 Day76 - gpiolib and GPIO Descriptor labs/day76/day76-gpiolib-gpio-descriptor.md
Day 77 Day77 - GPIO Consumer Driver and gpiod APIs labs/day77/day77-gpio-consumer-driver.md
Day 78 Day78 - GPIO IRQ Consumer Driver labs/day78/day78-gpio-irq-consumer-driver.md
Day 79 Day79 - IRQ Subsystem Fundamentals labs/day79/day79-irq-subsystem-fundamentals.md
Day 80 Day80 - IRQ Bottom Half and Deferred Work labs/day80/day80-irq-bottom-half.md
Day 81 Day81 - Workqueue Internals labs/day81/day81-workqueue-internals.md
Day 82 Day82 - kthread Internals labs/day82/day82-kthread-internals.md
Day 83 Day83 - Deferred Work Selection labs/day83/day83-deferred-work-selection.md
Day 84 Day84 - Wait Queue Internals labs/day84/day84-waitqueue-internals.md
Day 85 Day85 - poll() Internals labs/day85/day85-poll-internals.md
Day 86 Day86 - epoll Internals Interest List, Ready List, epoll_wait(), LT, ET, and driver .poll() integration
Day 87 Day87 - fasync and SIGIO Internals fasync_helper(), kill_fasync(), driver .fasync(), SIGIO, VFS fcntl() path, wait queue / poll / epoll integration
Day 88 Day88 - Kernel Locking Internals Race conditions, spinlock, mutex, spin_lock_irqsave(), execution context, interrupt-safe locking
Day 89 Day89 - Kernel Memory Allocation First-fit allocator, memory pool, block reuse, GFP policy simulation
Day 90 Day90 - Page Allocator Physical pages, struct page, Buddy Allocator, allocation order, split, merge, memory fragmentation, alloc_pages() / free_pages()
Day 91 Day91 - Linux SLUB Allocator Internals kmem_cache, slab, bitmap, object allocation, object reuse, Buddy Allocator integration, alloc_pages(), page_address()
Day 92 Day92 - kmalloc() Internals kmalloc(), kzalloc(), kcalloc(), kmalloc cache lookup, size classes, GFP flags, SLUB allocation path