IT-Trainer Jobs und Stellenangebote: LFD430 Entwicklung von Gerätetreibern für Linux-Systeme
Seminardauer: 4 Tage
Trainer gesucht
IT-Trainer Jobs und Stellenangebote: LFD430 Entwicklung von Gerätetreibern für Linux-Systeme, Betriebssystem, Linux Foundation, Netzwerk- und System-Administrator.
Anmelden / Registrieren als Trainer
Agenda
Einführung
- Ziele
- Wer Sie sind
- The Linux Foundation
- Copyright und keine vertraulichen Informationen
- Linux Foundation Training
- Zertifizierungsprogramme und Digital Badging
- Linux-Distributionen
- Plattformen
- Ihr System vorbereiten
- Verwenden und Herunterladen einer Virtual Machine
- Änderungen in Linux und Open-Source-Projekten
- Dokumentation und Links
Vorbereitungen
- Abläufe
- Kernel-Versionen
- Kernel-Quellen und Nutzung von git
- Eigenen Kernel bauen
- Hardware
- Staging Tree
- Labs
Arbeiten in OSS-Projekten
- Überblick über korrektes Contributing
- Code-Herkunft kennen: DCO und CLA
- Nah am Mainline bleiben für Sicherheit und Qualität
- Projekt-DNA studieren und verstehen
- Herausfinden, welches Problem Sie lösen wollen
- Maintainer und deren Workflows und Methoden identifizieren
- Frühzeitig Input einholen und offen arbeiten
- In kleinen Schritten beitragen, nicht große Code-Dumps
- Ego: nicht empfindlich reagieren
- Geduld haben, langfristige Beziehungen aufbauen, hilfreich sein
Device 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
Modules and Device Drivers
- module_driver() Macros
- Modules and Hot Plug
- Labs
Memory Management and Allocation
- Virtual and Physical Memory
- Memory Zones
- Page Tables
- kmalloc()
- __get_free_pages()
- vmalloc()
- Slabs and Cache Allocations
- Labs
Character 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
Kernel 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
Transferring Between User and Kernel Space
- Transferring Between Spaces
- 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
Interrupts 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
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
Kernel Timers
- Inserting Delays
- What are Kernel Timers?
- Low Resolution Timer Functions
- Low Resolution Timer Implementation
- High Resolution Timers
- Using High Resolution Timers
- Labs
IOCTLS
- What are ioctls?
- Driver Entry Point for ioctls
- Defining ioctls
- Labs
Unified Device Model and sysfs
- Unified Device Model
- Basic Structures
- Real Devices
- sysfs
- kset and kobject Examples
- Labs
Firmware
- What is Firmware?
- Loading Firmware
- Labs
Sleeping and Wait Queues
- What are Wait Queues?
- Going to Sleep and Waking Up
- Going to Sleep Details
- Exclusive Sleeping
- Waking Up Details
- Polling
- Labs
Interrupt 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
Hardware 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
PCI
- What is PCI?
- PCI Device Drivers
- Locating PCI Devices
- Accessing Configuration Space
- Accessing I/O and Memory Spaces
- PCI Express
- Labs
Platform Drivers
- What are Platform Drivers?
- Main Data Structures
- Registering Platform Devices
- An Example
- Hardcoded Platform Data
- The New Way: Device Trees
- Labs
Direct Memory Access (DMA)
- What is DMA?
- DMA Directly to User
- DMA and Interrupts
- DMA Memory Constraints
- DMA Masks
- DMA Allocations
- DMA API
- Labs
Network Drivers I: Basics
- Network Layers and Data Encapsulation
- Datalink Layer
- Network Device Drivers
- Loading/Unloading
- Opening and Closing
- Labs
Network Drivers II: Data Structures
- net_device Structure
- net_device_ops Structure
- sk_buff Structure
- Socket Buffer Functions
- netdev_printk() and Associates
- Labs
Network Drivers III: Transmission and Reception
- Transmitting Data and Timeouts
- Receiving Data
- Statistics
- Labs
Network Drivers IV: Selected Topics
- Multicasting
- Changes in Link State
- ioctls
- NAPI and Interrupt Mitigation
- NAPI Details
- TSO and TOE
- MII and ethtool
USB 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
Power Management
- Power Management
- ACPI and APM
- System Power States
- Callback Functions
- Labs
Block Drivers
- What are Block Drivers?
- Buffering
- Registering a Block Driver
- gendisk Structure
- Request Handling
- Labs
Closing and Evaluation Survey
- Evaluation Survey
Kernel Architecture I
- UNIX and Linux
- Monolithic and Micro Kernels
- Object-Oriented Methods
- Main Kernel Components
- User-Space and Kernel-Space
Kernel Programming Preview
- Task Structure
- Memory Allocation
- Transferring Data between User and Kernel Spaces
- Object-Oriented Inheritance - Sort Of
- Linked Lists
- Jiffies
- Labs
Modules
- What are Modules?
- A Trivial Example
- Compiling Modules
- Modules vs Built-in
- Module Utilities
- Automatic Module Loading
- Module Usage Count
- Module Licensing
- Exporting Symbols
- Resolving Symbols
- Labs
Kernel Architecture II
- Processes, Threads, and Tasks
- Kernel Preemption
- Real Time Preemption
- Labs
Kernel Configuration and Compilation
- Installation and Layout of the Kernel Source
- Kernel Browsers
- Kernel Configuration Files
- Kernel Building and Makefiles
- initrd and initramfs
- Labs
Kernel 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
- Labs
Race Conditions and Synchronization Methods
- Concurrency and Synchronization Methods
- Atomic Operations
- Bit Operations
- Spinlocks
- Seqlocks
- Disabling Preemption
- Mutexes
- Semaphores
- Completion Functions
- Read-Copy-Update (RCU)
- Reference Counts
- Labs
Memory 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
- Labs
Memory Allocation
- Requesting and Releasing Pages
- Buddy System
- Slabs and Cache Allocations
- Memory Pools
- kmalloc()
- vmalloc()
- Early Allocations and bootmem()
- Memory Defragmentation
- Labs