Как перенести драйверы Linux на современные ядра?

Разработка модулей ядра Linux является относительно доступной точкой входа в системное программирование, позволяя создавать драйверы устройств, но устаревшие материалы, такие как книга "Linux Device Drivers", не соответствуют современным ядрам 5.x и 6.x. Актуализация примеров из этих источников требует адаптации под новые структуры и функции. Начинать изучение модулей ядра рекомендуется с "The Linux Kernel Module: Programming Guide", а затем переходить к более детальному изучению "Linux Device Drivers".

Для создания символьного устройства необходима регистрация и инициализация, а операции ввода/вывода выполняются через структуру file_operations. Функция ioctl заменена на unlocked_ioctl и compat_ioctl. Память в ядре выделяется через kmalloc с флагом GFP_KERNEL, а для работы со списками часто используется структура scull_qset. Функция scull_follow управляет узлами связного списка, а scull_trim освобождает память.

В отличии от символьных устройств, блочные устройства претерпели значительные изменения с введением multi-queue block layer (blk-mq), что потребовало адаптации под новые структуры, в частности, blk_mq_tag_set. Создание и добавление блочного устройства осуществляется через blk_mq_alloc_disk и настройку параметров очереди, включая размер блоков, максимальный сектор и флаги. Запросы обрабатываются функцией _queue_rq, которая использует blk_mq_start_request и blk_mq_end_request.

Для сетевых устройств, изменения касаются, в основном, функций управления адресами и обработки таймаутов. Начиная с ядра 5.15, адрес устройства изменяется через dev_addr_set, а функция ndo_tx_timeout принимает дополнительный аргумент. Также, для использования NAPI, вместо прямой установки dev->poll и dev->weight применяется функция netif_napi_add.


Новое на сайте

5563Как правильно выбирать полосу движения в городе: экзамен по пдд? 5562Разработка резервной утилиты ReBack на Rust: ключевые решения и архитектура 5561Нужен ли RabbitMQ в контейнерной среде? 5560Может ли один человек изменить ситуацию в условиях катастрофы? 5559Сколько стоят ваши идеи? Как оценить интеллектуальную собственность? 5558Как дизайн стал драйвером бизнеса: трансформация роли дизайнера? 5557Как сохранить неповторимую красоту сельской местности Суррея: ваш голос имеет значение? 5556Сердце приюта: невероятная история Анн Чард и ее любви к животным 5555Зимняя тревога на Харкерли-роуд: более 150 лебедей под угрозой на дороге 5554Какие песни русского рока покорили слушателей? 5553Не станет ли лондонская система общественного транспорта ещё удобнее? 5552Как посчитать стоимость забора вокруг садовых участков? 5551Как встроить фронтенд в JAR-файл: практическое руководство 5549Due Diligence: зачем нужны «шпионские игры» перед покупкой IT-продукта?