Я пытался выяснить, как работают файловые операции в драйверах. Я знаю, что существует несколько операций с файлами, но функции для этих операций вызывают несколько аргументов, а сами операции определяются без каких-либо.Операции с файлами в драйверах
Так что, если я это -
static const struct file_operations proc_myled_operations = {
.open = proc_myled_open,
.read = seq_read,
.write = proc_myled_write,
.llseek = seq_lseek,
.release = single_release
};
Теперь я знаю, что драйвера уровня ядра могут быть доступны только в виде файлов из пользовательского приложения. Это встроенная система, поэтому у меня есть некоторые светодиоды, которые я могу включить, записав в свои регистры с отображением памяти.
Таким образом вызов .write или "proc_myled_write" будет выполняться, когда я поворачиваю светодиод, на котором я могу сделать, открыв этот файл, используя fopen, а затем записывая его с помощью fputs. Но если .WRITE отображается как «proc_myled_write и эта функция имеет аргументы, как так? -.
static ssize_t proc_myled_write(struct file *file, const char __user * buf,
size_t count, loff_t * ppos)
Что происходит с аргументами Там нет вызова функции для вышеупомянутой функции с теми аргументами, я видел это в несколько Я просто использовал это, потому что это был простой пример. Как операции с файлами сопоставляются с этими функциями? Как, например, «записывать» на трассе пользовательского пространства на запись в драйвере?
Thank вы
Да точно! Вот как я думал, что понял. Но тогда что-то нужно вызвать функцию записи где-нибудь с аргументами? Я знаю, что структура файла уникальна для драйверов пространства ядра, а приложения для приложений пользователей не видят/не могут использовать его, но как насчет остальных трех аргументов? Как функция записи (или proc_myled_write, в любом случае) знает, в какой памяти хранятся аргументы? – maverick1989
Взгляните на мое обновление выше. Ура! –
Спасибо, Бен! Могу я назвать тебя Беном? Это было действительно хорошее объяснение! Я также принял ваше предложение и отредактировал мой вопрос. Еще раз спасибо ... – maverick1989