Должен ли я писать драйвер устройства для этого? - PullRequest
1 голос
/ 22 ноября 2011

Я планирую небольшой хобби-проект, работающий на Linux на SBC с GPIO.Моя идея состоит в том, чтобы сгенерировать вывод ШИМ на выводах GPIO и позволить каждому выводу быть доступным в виде файла в /dev, так же, как и выводы GPIO.Я хотел бы иметь возможность использовать устройство PWM таким же образом, как GPIO будет работать.

Так что я думаю, что хочу написать драйвер устройства, он, кажется, отвечает всем требованиям.

Единственная проблема в том, что, поскольку я буду получать доступ к контактам через /dev/GPIO, моя программа может существовать в пространстве пользователя.И « может существовать в пространстве пользователя» обычно подразумевает « если существует в пространстве пользователя».

Я уверен, что это можно записать как демон пользовательского пространства илидрайвер устройства пространства ядра или что-то еще.

Что лучше всего сделать?

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Простейший подход к этой проблеме - прямой доступ к устройству из пространства пользователя через файл "/ dev / mem" .В этом случае вам не нужно писать какой-либо код драйвера в области пространства ядра.С помощью файла "/ dev / mem" вы можете напрямую получить доступ к устройству с физическим адресом из приложения пользовательского пространства.

Первоначальная настройка в приложении пользовательского пространства будет:

  • Open "/ devФайл / mem "в режиме чтения-записи (с использованием системного вызова open ()).
  • Отображение в памяти файлового дескриптора" / dev / mem "вместе со смещением физического адреса устройства в адресное пространство виртуальной памяти процесса (используя системный вызов mmap ().
  • Запустите доступ к устройству с виртуальным адресом (возвращаемое значение mmap ()) устройства.

Существует риск в этом подходе, поскольку доступ к устройству через файл / dev / mem происходит без ведома диспетчера памяти.Другим подходом будет установка драйвера устройства для вашего устройства в пространстве ядра, а затем написание приложения пользовательского пространства, которое будет защищенным доступом к устройству.

1 голос
/ 22 ноября 2011

Это зависит от встроенных функций микроконтроллера на вашем SBC. Если вы уверены, что в его архитектуре уже не установлен ШИМ-блок, то, я думаю, вам потребуется преобразовать вывод GPIO, чтобы сделать это.

Этот проект может представлять интерес.

...