D3 | Linux Drivers |
Labs are conducted on target boards, that can be: | ||
Dual Cortex/A7-based "STM32MP15-DISCO" boards from STMicroelectronics. | ||
Quad Cortex/A9-based "SabreLite" boards from NXP. | ||
Quad Cortex/A53-based "imx8q-evk" boards from NXP. | ||
We use a recent (4.x) linux kernel, as supported by the chip supplier. |
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 |