Задание
Создать модуль ядра - драйвер символьного устройства по своему варианту.
Ход работы
Сборка примеров тестировалась на Debian 11 (ядро 5.10.0-21-amd64) и Archlinux (ядро 6.2.11-arch1-1).
- Установите необходимые пакеты
Debian
sudo apt install build-essential kmod linux-headers-`uname -r`
Arch
sudo pacman -Sy base-devel kmod linux-headers
Скачайте и распакуйте архив с примерами.
Зайдите в директорию
hello
и соберите модуль командой:
make
- Для работы с модулями вам понадобятся следующие команды:
lsmod
lsmod | grep <название>
sudo modinfo <название>.ko
sudo insmod <название>.ko
sudo rmmod <название>
sudo journalctl --since "5 minutes ago" | grep kernel
Удостоверьтесь что модуль коректно загружается и выгружается.
Переходите к модулю
chardev
.- удостоверьтесь что модуль корректно работает
- разберите код
Приступайте к реализации собственного модуля.
Материалы:
- Книга The Linux Kernel Module Programming Guide
- Курс СПбГЭТУ “ЛЭТИ” Разработка модулей ядра Linux
Варианты заданий
Cимвольное устройство для:
- защиты конфиденциальных данных (шифрование по записи, дешифрование по чтению).
- межпроцессного взаимодействия - сохранять и извлекать данные по pid.
- генерации звуковых сигналов в соответствии с переданными на него данными.
- сортировки данных, отправленных на него (числовые и строковые данные).
- генерирования паролей с заданными параметрами.
- вычисления прошедшего временного промежутка - время заcекается по записи, по чтению - выводится прошедшее.
- мониторинга состояния системы - температура ЦП, объем используемой памяти, диска и т.п.
- хранения и выполнения очереди команд по запросу.
- генерирования псевдослучайных чисел - целые в заданном диапазоне, вещественные в заданном диапазоне.
- генерирования данных о содержимом заданной директории, включая поддиректории.
- преобразования данных в двоичное или шестнадчатиричное представление.
- конвертации указанного локального времени в заданный часовой пояс.