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 |