Linux использует драйвер изнутри драйвера - PullRequest
2 голосов
/ 09 мая 2011

Я пытаюсь подключиться к микроконтроллеру из моего linux-бокса через последовательный порт RS232.

Я написал драйвер и реализовал протокол b / n pc и микроконтроллер, который использует tty (/ dev / ttyS0) устройство уже присутствует в ядре в виде модуля (например, с помощью вызова open, close и т. д.).Однако, когда я пытаюсь скомпилировать, он говорит, что не может найти ссылку для открытия, записи, чтения и т. Д. ...

Как мне просто использовать существующий драйвер устройства из драйвера?Есть ли что-то еще, что мне нужно включить?

Если нет, то как я могу легко использовать последовательный порт из драйвера?

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/cdev.h>
#include <linux/spinlock.h>
#include <linux/termios.h>
#include <linux/fcntl.h>
#include <linux/unistd.h>

1 Ответ

0 голосов
/ 09 мая 2011

Обычно вы должны делать это в пользовательском пространстве - реализовать протокол вашего устройства в обычной пользовательской программе.

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

Вы не можете вызывать произвольные библиотечные функции из ядра или вообще любые библиотечные функции (кроме библиотек, которые фактически поставляются как часть ядра). Это включает системные вызовы ядра. Существуют эквивалентные функции, которые можно вызывать, например, filp_open.

В большинстве случаев вы не можете просто вызвать нормальный системный вызов из ядра, так как они ожидают, что указатели будут указывать на данные пространства пользователя, но в вашем ядре (выделенном через kalloc и т. Д.) Обычно указывается на данные пространства ядра. Эти два не могут быть свободно смешаны.

...