Мне нужно разработать библиотеку (пользовательского пространства) для поддержки последовательной связи в Linux (на плате Zynq-Zybo: UART, SPI, I2C).
Я исследовал различные веб-сайты и другие материалы, а также исследовал ядро xilinx-linux, а также некоторые ссылки на книгу O'Reilly Linux Device Drivers.
На данный момент я обнаружил, что Linux уже включает в себя свои собственные модули ядра для управления связью (например: модуль ядра UART обрабатывает периферийные устройства, чтобы они отображались в / dev /, и через этот файл устройства я могу взаимодействовать с устройством из пространства пользователя, используя open, read, write и т. д.).
Я также читал, что, как обычно, взаимодействие с драйвером устройства осуществляется через драйвер символьного устройства, доступ к которому осуществляется в пользовательском пространстве и который отвечает за взаимодействие с драйвером устройства (подробности на следующем рисунке)
Идеи, которые пришли мне в голову:
- Написание библиотеки пространства пользователя, которая просто взаимодействует с предоставленным файлом устройства (в / dev / ..) посредством классического открытия, чтения, записи
- Ссылаясь на изображение выше, разработайте драйвер символьного устройства и включите этот модуль в ядро, чтобы библиотека пользовательского пространства просто взаимодействовала с ним через IOCTL (или аналогичный), а затем этот новый модуль будет напрямую взаимодействовать с (предварительно существующие) драйверы устройств
(Это решение, однако, звучит не слишком хорошо для меня: я читал, что использование таких элементов пользовательского пространства, как open, read, write внутри модулей ядра, не очень хорошая идея - хотя это возможно -)
Мой вопрос: каким путем я должен следовать и почему?
Кроме того, любая статья / книга / ссылка на эту тему будет высоко оценена.
Заранее спасибо!