|
|
|
|
|
|
|
ac6 >> ac6-training >> Online Training >> Linux >> Linux Drivers (online Training) |
![]() |
![]() |
![]() |
![]() |
Writing Linux Drivers |
![]() |
![]() |
Objectives
|
Exercise: | Writing the "hello world" kernel module | |
Exercise: | Adding a driver to kernel sources and configuration menu | |
Exercise: | Using module parameters | |
Exercise: | Writing interdependent modules using memory allocations, reference counting and linked lists |
Exercise: | Display dynamic traces on the running kernel | |
Exercise: | Debug a module initialization using kgdb |
Exercise: | Fixing race conditions in the previous lab with mutexes |
Exercise: | Step by step implementation of a character driver: | |
• | driver registration (major/minor reservation) and device special file creation (/dev) |
Exercise: | Step by step implementation of a character driver: | |
• | Implementing open and release | |
• | Implementing read and write | |
• | Implementing ioctl | |
• | Implementing mmap |
Exercise: | implementation of a pipe-like driver: | |
• | implementing waiting and waking | |
• | adding non-blocking, asynchronous and multiplexed operations (O_NONBLOCK, SIGIO, poll/select) |
Exercise: | Polling gpio driver with raw register access | |
Exercise: | Interrupt-based gpio driver with raw register access | |
Exercise: | gpio driver using the gpiolib |
Exercise: | Implementing a platform driver and customizing the device tree to associate it to its device (a serial port) | |
Exercise: | Implementing power management in the previous driver | |
Exercise: | Implementing remote wakeup in the previous driver |
Exercise: | Writing a custom class driver | |
Exercise: | Writing a misc driver |
Exercise: | Implementing slave DMA in a serial port driver |
Exercise: | Writing a USB host driver |