Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Прямой доступ к оборудованию под Linux

#hardware #c #cpp #linux


Имеется рабочая машинка с ОС Linux. Требуется получить из консольного пользовательского
приложения (ring3) доступ к портам ввода-вывода.
Под ОС Windows эта проблема решается следующими способами:

драйвер типа userport или giveio -> прямо в программе делаем ввод-вывод через команды
asm'а in/out
собственный драйвер "виртуального у-ва", который в ring0 делает всю черновую работу
и      предоставляет некий интерфейс с помощью IOCTL прикладным программам. Пользовательское
приложение вызывает соответствующие IOCTL'ы.

Какие варианты есть под Linux? Прошу снадбить короткими примерами кода.
PS: ес-но root'овые привилегии имеют место быть.    


Ответы

Ответ 1



Ну, основной способ в Linux следовать тем же путём: делаете модуль ядра, который работает с портами ввода-вывода и предоставляет какой-то интерфейс для приложений, например, создаёт tty или какой-то другой файл-устройство и, возможно, предоставляет IOCTL; а из приложения обращаетесь к этому файлу-устройству и работаете с драйвером через него. Пример приведу позже, если другие не приведут. Однако, кое какие примеры можно легко найти в интернете. Например: Character Device Drivers. И вообще, если вы планируете идти по первому пути, то не мешает пролистать этот The Linux Kernel Module Programming Guide, который является классикой жанра из категории MUST READ. Вот ещё то же (или почти то же), на русском: The Linux Kernel Module Programming Guide (RU). Или вот ещё пример: Implementing a Simple Char Device in Linux Ну и конечно многие устройства при подключении определяются как serial port или что-то подобное и тогда соответствующий модуль ядра создаёт этот самый файл-устройство и тогда вам надо просто понять, что с этим файлом-устройством делать. Второй путь - это использовать user space device driver API. Почитайте, например тут: User-space device drivers

Комментариев нет:

Отправить комментарий