3. 5.3: Platform Driver + miscdevice + GPIO из Device Tree
3.1. Описание
Модуль hellokeys_rpi3_misc_dt.c демонстрирует создание платформенного драйвера с поддержкой:
platform driver (
probe()/remove())устройства
/dev/mydevчерезmiscdeviceсчитывания состояния кнопок с GPIO, описанных в Device Tree
чтения значений из user space через
cat /dev/mydev
3.2. Содержимое архива
hellokeys_rpi3_misc_dt.c— исходный код модуляMakefile— для сборки с помощьюmake5_2_miscdevice_dt_gpio.pptx— презентация по работе5_2_miscdevice_dt_gpio.rst— эта документация
3.3. Требования
Raspberry Pi 3 с Linux kernel 5.x
Device Tree с описанием
gpiosКомпилятор модуля ядра (
make,linux-headers)
3.4. Пример Device Tree
В файл .dts (например, bcm2710-rpi-3-b.dts) нужно добавить:
hellokeys@0 {
compatible = "arrow,hellokeys";
gpios = <&gpio 17 0>, <&gpio 27 0>;
status = "okay";
};
4. Работа с Device Tree (DTB и DTS)
4.1. Преобразование .dtb → .dts
Если у вас есть скомпилированный файл Device Tree Blob (например, /boot/bcm2710-rpi-3-b.dtb),
вы можете получить исходный .dts так:
dtc -I dtb -O dts -o bcm2710-rpi-3-b.dts /boot/bcm2710-rpi-3-b.dtb
Редактируйте bcm2710-rpi-3-b.dts, добавляя свой hellokeys@0 { ... } в нужное место.
4.2. Сборка обратно: .dts → .dtb
После редактирования соберите обратно:
dtc -I dts -O dtb -o bcm2710-rpi-3-b.dtb bcm2710-rpi-3-b.dts
Затем скопируйте новый .dtb в /boot/ на Raspberry Pi:
sudo cp bcm2710-rpi-3-b.dtb /boot/
sudo reboot
4.3. Проверка после загрузки
Проверьте, что узел hellokeys виден в памяти устройства:
ls /proc/device-tree/soc/hellokeys@0
cat /proc/device-tree/soc/hellokeys@0/gpios
hexdump /proc/device-tree/soc/hellokeys@0/compatible
4.4. Сборка и установка
make
sudo insmod hellokeys_rpi3_misc_dt.ko
dmesg | grep hellokeys
cat /dev/mydev
Пример вывода:
key1: 0
key2: 1
Удаление модуля:
sudo rmmod hellokeys_rpi3_misc_dt
4.5. Лицензия
GPL. Образовательное использование. Авторы: Linux Driver Development Guide + ChatGPT