Curriculum
- 1 Section
- 37 Lessons
- 4 Days
Expand all sectionsCollapse all sections
- Topics37
- 1.1Introduction Objectives Who You Are The Linux Foundation Linux Foundation Training Certification Programs and Digital Badging Linux Distributions Platforms Preparing Your System Using and Downloading a Virtual Machine Things change in Linux Documentation and Links Course Registration
- 1.2Linux Filesystem Tree Layout OPreliminaries
- 1.3How to Work in OSS Projects ** Overview on How to Contribute Properly Stay Close to Mainline for Security and Quality Study and Understand the Project DNA Figure Out What Itch You Want to Scratch Identify Maintainers and Their Work Flows and Methods Get Early Input and Work in the Open Contribute Incremental Bits, Not Large Code Dumps Leave Your Ego at the Door: Don’t Be Thin-Skinned Be Patient, Develop Long Term Relationships, Be Helpful
- 1.4Device Drivers Types of Devices Mechanism vs. Policy Avoiding Binary Blobs Power Management How Applications Use Device Drivers Walking Through a System Call Accessing a Device Error Numbers printk() devres: Managed Device Resources Labs
- 1.5Modules and Device Drivers The module_driver() Macros Modules and Hot Plug Labs
- 1.6Memory Management and Allocation Virtual and Physical Memory Memory Zones Page Tables kmalloc() __get_free_pages() vmalloc() Slabs and Cache Allocations Labs
- 1.7Character Devices Device Nodes Major and Minor Numbers Reserving Major/Minor Numbers Accessing the Device Node Registering the Device udev dev_printk() and Associates file_operations Structure Driver Entry Points The file and inode Structures Miscellaneous Character Drivers Labs
- 1.8Kernel Features Components of the Kernel User-Space vs. Kernel-Space What are System Calls? Available System Calls Scheduling Algorithms and Task Structures Process Context Labs
- 1.9Transferring Between User and Kernel Space Transferring Between Spaces put(get)_user() and copy_to(from)_user() Direct Transfer: Kernel I/O and Memory Mapping Kernel I/O Mapping User Pages Memory Mapping User-Space Functions for mmap() Driver Entry Point for mmap() Accessing Files from the Kernel Labs
- 1.10Interrupts and Exceptions What are Interrupts and Exceptions? Exceptions Asynchronous Interrupts MSI Enabling/Disabling Interrupts What You Cannot Do at Interrupt Time IRQ Data Structures Installing an Interrupt Handler Labs
- 1.11Timing Measurements Kinds of Timing Measurements Jiffies Getting the Current Time Clock Sources Real Time Clock Programmable Interval Timer Time Stamp Counter HPET Going Tickless Labs
- 1.12Kernel Timers Inserting Delays What are Kernel Timers? Low Resolution Timer Functions Low Resolution Timer Implementation High Resolution Timers Using High Resolution Timers Labs
- 1.13Unified Device Model and sysfs Unified Device Model Basic Structures Real Devices sysfs kset and kobject examples Labs
- 1.14Firmware What is Firmware? Loading Firmware Labs
- 1.15Sleeping and Wait Queues What are Wait Queues? Going to Sleep and Waking Up Going to Sleep Details Exclusive Sleeping Waking Up Details Polling Labs
- 1.16Interrupt Handling: Deferrable Functions and User Drivers Top and Bottom Halves Softirqs Tasklets Work Queues New Work Queue API Creating Kernel Threads Threaded Interrupt Handlers Interrupt Handling in User-Space Labs
- 1.17Hardware I/O Buses and Ports Memory Barriers Registering I/O Ports Reading and Writing Data from I/O Registers Allocating and Mapping I/O Memory Accessing I/O Memory Access by User – ioperm(), iopl(), /dev/port Labs
- 1.18PCI What is PCI? PCI Device Drivers Locating PCI Devices Accessing Configuration Space Accessing I/O and Memory Spaces PCI Express Labs
- 1.19Platform Drivers** What are Platform Drivers? Main Data Structures Registering Platform Devices An Example Hardcoded Platform Data The New Way: Device Trees Labs
- 1.20Direct Memory Access (DMA) What is DMA? DMA Directly to User DMA and Interrupts DMA Memory Constraints DMA Masks DMA API DMA Pools Scatter/Gather Mappings Labs
- 1.21Network Drivers I: Basics Network Layers and Data Encapsulation Datalink Layer Network Device Drivers Loading/Unloading Opening and Closing Labs
- 1.22Network Drivers II: Data Structures net_device Structure net_device_ops Structure sk_buff Structure Socket Buffer Functions netdev_printk() and Associates Labs
- 1.23Network Drivers III: Transmission and Reception Transmitting Data and Timeouts Receiving Data Statistics Labs
- 1.24Network Drivers IV: Selected Topics Multicasting ** Changes in Link State ioctls NAPI and Interrupt Mitigation NAPI Details TSO and TOE MII and ethtool **
- 1.25USB Drivers What is USB? USB Topology Terminology Endpoints Descriptors USB Device Classes USB Support in Linux Registering USB Device Drivers Moving Data Example of a USB Driver Labs
- 1.26Power Management Power Management ACPI and APM System Power States Callback Functions Labs
- 1.27Block Drivers What are Block Drivers? Buffering Registering a Block Driver gendisk Structure Request Handling Labs
- 1.28Closing and Evaluation Survey Evaluation Survey
- 1.29Appendices — Kernel Architecture I UNIX and Linux ** Monolithic and Micro Kernels Object-Oriented Methods Main Kernel Tasks User-Space and Kernel-Space
- 1.30Kernel Programming Preview Task Structure Memory Allocation Transferring Data between User and Kernel Spaces Linked Lists Jiffies Labs
- 1.31Modules What are Modules? A Trivial Example Compiling Modules Modules vs Built-in Module Utilities Automatic Loading/Unloading of Modules Module Usage Count Module Licensing Exporting Symbols Resolving Symbols ** {C.11Labs
- 1.32Kernel Architecture II Processes, Threads, and Tasks Kernel Preemption Real Time Preemption Patch Labs
- 1.33Kernel Configuration and Compilation Installation and Layout of the Kernel Source Kernel Browsers Kernel Configuration Files Kernel Building and Makefiles initrd and initramfs Labs
- 1.34Kernel Style and General Considerations Coding Style Using Generic Kernel Routines and Methods Making a Kernel Patch sparse Using likely() and unlikely() Writing Portable Code, CPU, 32/64-bit, Endianness Writing for SMP Writing for High Memory Systems Power Management Keeping Security in Mind {F.11Labs
- 1.35Race Conditions and Synchronization Methods Concurrency and Synchronization Methods Atomic Operations Bit Operations Spinlocks Seqlocks Disabling Preemption Mutexes Semaphores Completion Functions Read-Copy-Update (RCU) {G.11Reference Counts {G.12Labs
- 1.36Memory Addressing Virtual Memory Management Systems With and Without MMU and the TLB Memory Addresses High and Low Memory Memory Zones Special Device Nodes NUMA Paging Page Tables page structure {H.11Labs
- 1.37Memory Allocation Requesting and Releasing Pages Buddy System Slabs and Cache Allocations Memory Pools kmalloc() vmalloc() Early Allocations and bootmem() Memory Defragmentation Labs Related Cours
Timing Measurements Kinds of Timing Measurements Jiffies Getting the Current Time Clock Sources Real Time Clock Programmable Interval Timer Time Stamp Counter HPET Going Tickless Labs
Prev
Unified Device Model and sysfs Unified Device Model Basic Structures Real Devices sysfs kset and kobject examples Labs
Next