Here you can find examples for simple Linux Kernel Modules and Linux Drivers.
I used a Raspberry Pi 3 to develop and test my modules and drivers. To compile them, you need to install the Kernel headers on your Pi. On Raspbian you can do this with the following command:
sudo apt update
sudo apt install raspberrypi-kernel-headers
Raspberry Pi OS is only installs the latest kernel headers. So, make sure, you are running the latest kernel. You can do this by running:
sudo apt upgrade
You also need the build utils (make, gcc, ...) but they come preinstalled on Raspbian.
In this repo you can find examples for:
- Simple Kernel Module
- Device Numbers and Device Files
- Create device file in driver and callbacks
- GPIO Driver
- Text LCD Driver
- PWM Module
- Temperature Sensor (I2C)
- Timer in Linux Kernel Modules
- High Resolution Timer in Linux Kernel Modules
- Accessing SPI with a Linux Kernel Module (BMP280 sensor again)
- Using a GPIO Interrupt in a Linux Kernel Module
- Using Parameters in a Linux Kernel Module
- IOCTL in a Linux Kernel Module
- Threads in a Linux Kernel Module
- Sending a signal from a Linux Kernel Module to an userspace application
- The poll callback
- Waitqueues in a Linux Kernel Module
- Create procfs entries from a Linux Kernel Module
- Create sysfs entries from a Linux Kernel Module
- Parse the device tree from a Linux Kernel Module to get the deivce properties of a specific device
- Device Tree GPIO Driver
- Device Tree Driver for I2C Device
- Dynamical memory management in a Linux Kernel module
- Serial (UART) Driver
- Industrial IO compatible driver for an ATMEGA I2C ADC
- Device Tree SPI Driver (IIO compatible driver for Atmega SPI ADC)
- Misc Device
- Mutex for exclusive access to shared resource
- Completions for synchronisation
- Direct Memory Access (DMA) memcopy example
- Accessing files form a Linux Driver
For more information about my Linux Driver examples check out my videos and my playlist
If you want to support me, you can buy me a coffee buymeacoffee.com/johannes4linux.