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
Day 93 Day93 - vmalloc() Internals vmalloc(), vfree(), vmalloc_to_page(), virtual address mapping, physically non-contiguous pages
Day 94 Day94 - vmalloc() and vmap() Internals Virtual memory mapping, vmalloc(), vmap(), vfree(), vunmap(), ownership model, virtually contiguous memory
Day 95 Day95 - ioremap() Internals MMIO region registration, simulated virtual mappings, ioremap(), iounmap(), address translation, shared backing storage, and mapping lifecycle
Day 96 Day96 - MMIO Access APIs Linux MMIO access APIs, readb(), readw(), readl(), writeb(), writew(), writel(), register offsets, Little Endian, boundary validation, multiple mappings
Day 97 Day97 - Memory Ordering Simulator labs/day97/day97-memory-barriers.md
Day 98 Day98 - Linux DMA API dma_map_single(), dma_unmap_single(), dma_alloc_coherent(), dma_free_coherent(), dma_sync_single_for_device(), dma_sync_single_for_cpu(), Streaming DMA, Coherent DMA, DMA direction, cache coherency
Day 99 Day99 - Linux DMA Engine Framework Linux DMA Engine Framework, dma_device, dma_chan, dma_async_tx_descriptor, DMA workflow, dma_request_chan(), dmaengine_submit(), dma_async_issue_pending(), DMA controller abstraction
Day 100 Day100 - DMA Controller and DMA Channel DMA controller driver, struct dma_device, struct dma_chan, channel registration, dma_request_chan(), Device Tree DMA channel binding
Day 101 Day101 - DMA Descriptor DMA descriptor architecture, struct dma_async_tx_descriptor, descriptor ownership, descriptor lifecycle, preparation APIs, scatter-gather DMA
Day 102 Day102 - DMA Descriptor Submission and Completion dmaengine_submit(), tx_submit(), DMA cookies, dma_async_issue_pending(), submitted and issued queues, controller scheduling, completion, deferred callback processing
Day 109 Day109 - One-Shot DMA Client Lifecycle One-shot RX DMA client simulation, ARMED vs ACTIVE, completion, CPU synchronization, termination, safe unmapping, and DMA mapping ownership
Day110 Continuous DMA Streaming and Ring Buffer Ownership Persistent DMA mapping, cyclic buffer slots, producer-consumer ownership, partial synchronization, consumer lag, and overrun detection