Драйвер пишущего устройства для встроенных плат - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок во встроенном мире. Я пытаюсь написать драйверы устройств для встраиваемых систем Linux, которые построены с использованием проекта Yocto. Я точно не знаю, как работают драйверы Linux и как написать новый драйвер для тестирования периферийных устройств.

В моей продукции документация , на стр. 569 - 1199 есть раздел «Драйверы ядра Linux». Он описывает источники дерева устройств и переменные драйверов для интересующего оборудования (PCIE, SPI ....). На данный момент я понял, что владелец продукта уже написал некоторые функции для доступа к периферийному оборудованию, и все, что мне нужно сделать, - это обратиться к ним с помощью вызова некоторых специальных функций с использованием своих файлов .c.

Я здесь, чтобы спросить профессионалов stackoverflow, что, я думаю правильно или я на правильном пути? а также какие-либо предложения по написанию драйверов устройств для специального продукта?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Что я понял на данный момент, так это то, что владелец продукта уже написал некоторые функции для доступа к периферийному оборудованию, и все, что мне нужно сделать, - это вызвать их с помощью вызова некоторых специальных функций с использованием своих файлов .c. Цитата

Ваше понимание отчасти верно - у поставщика платы уже написаны драйверы (функции для чтения / записи аппаратных регистров). Однако это не так просто, как просто связать файлы c драйверами.

В Linux механизм использования этих драйверов (API драйвера) варьируется в зависимости от варианта использования. К драйверам можно получить доступ как из пространства пользователя, так и из ядра. Оба эти пространства имеют разные API для взаимодействия с драйверами. Существует много уровней (абстракция) в драйверах ядра Linux, и большая часть усилий заключается в ознакомлении со всеми задействованными уровнями абстракции.

При использовании драйвера из пользовательского пространства наиболее распространенным API являетсяиспользовать файлы устройства, представляющие устройство и выполняющие над ним операции с файлами. Например, UART от USB к последовательному порту обычно представлен файлом устройства / dev / ttyUSB0, и все взаимодействие с драйвером происходит через этот файл устройства. Вы можете искать пишущие драйверы персонажей в Linux, чтобы лучше понять это. По сути, ваш драйвер ядра Linux должен создать файл устройства, и вам необходимо сопоставить операции, выполняемые над этим файлом устройства (открыть, прочитать, записать, закрыть, ioctl), с аппаратными функциями устройства в вашем драйвере.

Linux опирается на это для создания определенных подсистем драйверов. Например, подсистема кадрового буфера Linux, которая обычно используется для рисования графики на дисплее. Это также файл устройства, но содержит операции, общие для всех устройств кадрового буфера. Специфичные для устройства функции перейдут в другой отдельный драйвер, который содержит аппаратные биты. Цель проста - разделить универсальный повторно используемый код и отдельные аппаратные биты.

Если вы хотите обойти API пользовательского пространства и напрямую взаимодействовать с каким-либо другим кодом или драйвером ядра, вам нужно написатьмодуль ядра, который работает в пространстве ядра, и здесь вы можете ссылаться на функции, экспортируемые общим драйвером ядра от поставщика. Это просто для того, чтобы дать вам основную идею, есть много базовых деталей, которые будут раскрыты, как только вы начнете писать код, взаимодействующий с драйверами. Я бы предложил начать с простого драйвера персонажа. Вы можете следовать этому учебнику

1 голос
/ 08 ноября 2019

Боюсь, это довольно сложная задача для новичков встроенного Linux. Я думаю, вам следует начать с изучения API ядра Linux. Вам также нужны некоторые электронные знания. Взгляните на руководство по программированию модулей ядра Linux и попробуйте написать несколько простых модулей для ядра Linux. Затем вы можете узнать о отображении памяти и вообще, как работает память в ядре Linux. Вам нужны эти знания, потому что во встроенном мире вам нужно знать, как получить доступ к данному устройству. Вам также необходимо знать, когда использовать ключевое слово «volatile» для языка Си и многое другое. Много чему можно научиться ...

...