подключение приложения с драйвером устройства - PullRequest
0 голосов
/ 05 июля 2011

Это вопрос интервью.

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

struct file_operations something {
 .owner=my_device_open;
 .read=my_device_read;
 .close=my_device_close;
 .write=my_device_write;

 }

Когда драйвер устройства активен, то в

/dev/mydevice

Вы можете читать и писать в него.Но что мне было не понятно, так это то, как приложение будет читать или писать на это устройство.Я знаю, что insmod вставит модуль в ядро, а register_chrdev(); зарегистрирует драйвер в ядре, но как прикладная программа будет взаимодействовать с этим драйвером.Дайте мне знать, что будет правильным ответом на него.

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Ну, Мартин Беккет подвел итог.Это на самом деле не сложнее, хотя вы можете сказать то же самое, немного более подробно.Вот моя попытка:

Программа выполняет системный вызов open("/dev/mydevice", flags), затем ядро ​​читает /dev/mydevice с диска.Это просто индекс, без связанных блоков данных, но он содержит две важные части информации: основной номер и младший номер.Из этих чисел ядро ​​находит struct file_operations, которое вы указали через register_chrdev(), и вызывает его .open поле.Он возвращает программе дескриптор файла, связанный с этим конкретным struct file_operations.Затем, когда ядро ​​получит системный вызов типа write(fd, buf, count), он вызовет поле .write и т. Д.

1 голос
/ 05 июля 2011

В Unix он просто открывает узел устройства в виде файла и отправляет / получает данные и команды от него.
Прелесть Unix в том, что с точки зрения приложения нет ничего особенного в устройствах - они просто файлы (за исключением ioctl для установки некоторых режимов). В ядре есть работа, чтобы решить эту проблему, но это проблема модулей ядра.

Или ты спрашивал что-то более сложное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...