%Summary %Thadeu Cascardo # Introduction * Linux * Device Drivers * Operating Systems # Basics * Buildig Linux * Linux modules * printk # Device Drivers Subsystem * POSIX devices * POSIX API Review * VFS * Linux Device Model # Character Device * Device Numbers * Registering File Operations * Implementing File Operations * Memory Allocation and Concurrency # Debugging * Proc Filesystem * Debug Filesystem * Linux Debugging Support # Abstract Data Types * Lists * Bitmaps * Other data types # Portability Issues * Endianness * Type Sizes * Processors and Memory Layout # Memory Management * kmalloc/kfree * Memory Access * Lookaside cache (slabs) * vmalloc # Process and Concurrency Management * Contexts * Interrupts * Bottom Halves and SoftIRQs * Timers, tasklets and workqueues # Concurrency * Semaphores and Mutexes * Spinlocks * Completion * Waitqueues # Time Management * Ticks and Jiffies * Real Time * Busy Waiting * Scheduling * Timers * Workqueues # Advanced Character Device * ioctl * Blocking and Non-Blocking I/O * Polling # I/O * I/O Ports and I/O Memory * Memory Barriers * Allocation * Access # Interrupts * Requesting and releasing * Interrupt Handler * tasklets * Enabling and disabling interrupts # Device Model * kobject * Devices, drivers, buses and classes * sysfs # Buses * PCI * USB * Other buses # Memory Mapping * Memory Addresses * get\\_free\\_pages * struct page * scather/gather * VMA and mmap * DMA # Block devices * Block drivers and operations * struct gendisk * Requests and Queues * struct bio # Network devices * Allocation and Registration * Structures and methods * Starting/Stoping * struct skb * Transmission * Reception * Interrupts and NAPI * Links, Addresses and Headers