Embisyslabs is the Linux Device Drivers Training Institute conducts best Courses on Linux Kernel, Character Device Driver. The kernel is a computer program that is the core of a computer's operating system. The kernel is responsible for deciding which memory each process can use, and determining what to do when not enough memory is available.Translate the OS-mandated function calls (programming calls) into device-specific calls.Courses on Weekend as well Weekdays in Bangalore Bengaluru India.
CH1: AN INTRO. TO DEVICE DRIVERS
Role of the Device DriversSplitting the kernel
Classes of devices and modules
Kernel Architecture or Model
CH2: BUILDING AND RUNNING MODULES
Types of Modules in the kernelWriting Your first kernel module
Module Related Commands
Kernel Module vs Applications
Compiling Modules
Loading and Unloading Modules
Module Parameters
Modules and Exporting Symbols
Hands-On Assignments
Lab1: Simple Hello Linux Kernel Module.Lab2: Write a module that can take an integer parameter when it is loaded, It should have a default value when none is specified.
Lab3: Write a pair of modules where the second one calls a function in the first one
CH3: CHAR DEVICE DRIVERS
Major and Minor NumbersThe Internal Representation of Device Numbers
Allocating and Freeing Device Numbers
File Operations Data structure
Driver methods and Function Pointers
Char Device Registration
The Cdev Structure
The inode Structure
The file Structure
Manual Creation of Device Files
Automatic Creation of Device Files
Hands-On Assignments
Lab1: Print the major and minor numbers when Registering by Static or Dynamic method.Lab2: Implement a open,write,read and close entry point.
Lab3: Print the major and minor numbers when the device is Opened and keep track of the number of times it has been opened since loading, and print out the counter every time the device is opened.
Lab4: Modify the previous driver so that each opening of the device allocates its own data area, which is freed upon release. Thus data will not be persistent across multiple opens.
Lab5 : Implement a lseek entry point and Keeping track of file position.
Lab6: Dynamical Node Creation,Adapt the previous dynamic registration driver to use udev to create the device node on the fly.
CH4: MEMORY ALLOCATION TECHNIQUE
The Real Story of kmallocThe Flags Argument
__get_free_pages
Memory zones
vmalloc and Friends
Memory caches
Hands-On Assignment
Lab1:Testing Maximum Memory Allocation ,using kmalloc().Lab2:Testing Maximum Memory Allocation ,using __get_free_pages().
Lab3: Testing Memory Allocation,using vmalloc().
Lab4 :Memory cachesExtend your chararcter driver to allocate the driver's internal buffer by using your own memory cache.Make sure you free any slabs you create.
CH5: ADVANCED CHAR DRIVER OPERATIONS
Inpout/Output Control (ioctl)User space, the ioctl system call
The ioctl driver method
Choosing the ioctl Commands
Using the ioctl Argument
Hands-On Assignments
Lab1 : Implement a ioctl entry point along with read and write entry point. Lab2 : Implement read and write entry point using ioctl command. Lab3 : Write a character driver that has three ioctl commands: a)Set the process ID to which signals should be sent. b)Set the signal which should be sent. c)Send the signal.CH6: CONCURRENCY AND RACE CONDITION
Concurrency and its ManagementsSemaphores and Mutexes
Linux Semaphore Implementation
Introduction to the Semaphore API
Spinlocks Implementation
Introduction to the Spinlock API
Spinlocks and Atomic Context
Hands-On Assignments
Lab1: Mutex Contention -Write three simple modules where the second and third one use a variable exported from the first one.The second (third) module should attempt to lock the mutex and if it is locked, either fail to load or hang until the mutex is available.Lab2: Sempahore Contention -Now do the same thing using semaphores.
CH7: INTERRUPT AND INTERRUPT HANDLING
The Definition and Role of InterruptInstalling an Interrupt Handler
The /proc Interface
Implementing a Handler
Handler Arguments and Return Value
Installing a Shared Handler Hands-On Assignments
Hands-On Assignments
Lab1: Write a module that shares its IRQ with your network card. You can generate some network interrupts either by browsing or pinging.Lab2: Extend the previous solution to construct a character driver that shares every possible interrupt with already installed handlers.
Lab3: Mutex Unlocking from an Interrupt. Modify the simple interrupt sharing lab to have a mutex taken out and then released in the interrupt handler.
CH8: TIME, DELAY AND DEFERRED WORK
Top and Bottom HalvesTasklets and Workqueues Mechanisms
Measuring Time Lapses
Using the jiffies Counter
The Timer API
Hands-On Assignments
Lab1: Program based on Kernel Timer APILab2: Program based on Jiffies and HZ
Lab3: Program based on Taklet API
Lab4: Prgram based on Workqueue API
Lab5: Write a driver that puts launches a kernel timer whenever a write to the device takes place. Pass some data to the driver and have it print out. Have it print out the current->pid field when the timer function is scheduled, and then again when the function is executed.
Lab6: Write a module that launches a periodic kernel timer function; i.e., it should re-install itself.