Linux Kernel & Device Drivers
After Gaining knowledge on Advanced Linux Programming you are ready to learn Device Drivers.
This is where you learn core of Linux Kernel and Device Drivers programming.
➢ Kernel Classifications
- Monolithic Kernels
- Micro Kernels
➢ The User space & Kernel space
➢ Tool Chains, Libraries, The Makefile
- GNU toolchain
- Creation of Static & Dynamic Libraries
- Portability support in the kernel
➢ The Linux Kernel
- Getting the sources
- Configuring the kernel
- Diff and Patching utilities
- Compiling the kernel
- Installing & Booting the kernel
➢ Step by Step demystification of Linux Boot Procedure
- Module Programming
- The HelloWorld Module
- Module Stacking
- Module Parameters
➢ System Calls
- Registering a System Call
- System Call Handler
- Service Routines
➢ Device Numbers
- Major and Minor Numbers
- Registering and Unregistering
- Static and Dynamic allocations
➢ Important Structures
- File Operations
- File
- Inode
➢ Character Devices
- cdev structure
- Adding, Allocating, Initializing and Deleting
- User Space Applications and Device Driver mapping
- Access methods within the driver, open, rea\d, write and close
- Advanced Character Drivers
- IOCTL
- Wait
➢ Critical Sections, Race Conditions
➢ Concurrency and its Sources
➢ Mechanisms for Kernel Synchronization
- Semaphores
- Reader/ Writer Semaphores
- Spinlocks
- Reader/ Writer Spinlocks
- Completions
- Sequential locks
- Barriers
- Read Copy Update
➢ Atomic Operations
➢ Memory Allocation in the kernel
➢ Printk, Traces and Watches
➢ gdb, kgdb, kdb
➢ User Mode Linux
➢ Qemu
➢ Proc & Sys File Systems
➢ HZ & Jiffies, Delays
➢ Kernel Timers
➢ Soft irqs
➢ Tasklets
➢ Work Queues
➢ Kernel Data Types
➢ Handling I/O
- I/O Architecture
- I/O Mapped I/O
- Memory Mapped I/O
➢ Interrupts & Registering Interrupt Handlers
➢ Interrupt Context vs Process Context
➢ H Block Device Structure
➢ Request queues
➢ Block Driver
➢ I/O Scheduling
➢ UART Driver
- UART Protocol
- UART Driver Layered Architecture
- UART subsystems
- Porting, Development & Validation of UART Driver
➢ I2C Driver
- I2C Protocol
- I2C subsystems
- I2C Driver Layered Architecture
- Porting, Development & Validation of I2C client Driver
- Porting, Development & Validation of I2C platform Driver
➢ PCI Driver
- PCI Architecture & Protocol
- PCI Regions & Direct Memory Access
- PCI subsystems
- PCI Driver Layered Architecture
- Porting, Development & Validation of PCI client Driver
➢ USB Driver
- USB Architecture & Protocol
- Types of Descriptors & URB
- USB subsystems
- USB Driver Layered Architecture
- Porting, Development & Validation of USB Gadget Driver
➢ Network Drivers