обязательные функции ‘struct file_operations’ - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь понять концепцию, стоящую за символьным драйвером устройства в ядре Linux . В основном я хочу выставить IOCtl для программы пользовательского режима. Я реализовал ' struct file_operations-> unlocked_ioctl ' и dummy 'struct file_operations-> open, -> close' обратные вызовы ( Я имею в виду это -> open, -> close обратные вызовы всегда возвращают true без какой-либо другой логики ). Поэтому я сомневаюсь, что мне действительно нужно сохранить эти API? Я попытался удалить эти -> open-> close обратные вызовы в драйвере режима ядра, и все же я могу получить доступ к функции IOCtl из пользовательского режима. Я хотел бы знать, каковы все обязательные функции «struct file_operations», которые должны быть представлены в этом сценарии. Может кто-нибудь, пожалуйста, объясните мне это?

1 Ответ

0 голосов
/ 18 января 2019

В struct file_operations объекте нет функций обратного вызова обязательно .

Когда VFS (Virtual FileSystem) обнаруживает, что какая-то функция имеет значение NULL, она может интерпретировать ее как реализацию по умолчанию (например, .open() и .close() просто возвращает 0 по умолчанию) или как "для данного файла данная функциональность не поддерживается"(например, отсутствие .write() и некоторых других полей означает, что данный файл не поддерживает запись в него).

Заполните только те функции, которые необходимы для реализации нужной вам функции.


Единственное поле в struct file_operations, которое рекомендуется заполнить , это поле owner. В большинстве случаев его следует установить на THIS_MODULE:

.owner = THIS_MODULE

Таким образом вы защитите другие функции обратного вызова от разгрузки модуля .

...