Страница 3 из 8

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 18:51
Olej
PaiMeiPetrovich писал(а):
27 авг 2022, 18:18
1) Программа из пространства пользователя;
Программа ... обычная, начинающаяся с main() ... :lol:
Дальше она открывает файловое имя (типа /dev/mymod или /proc/mymod/period)...
... и для полученного из open() дескриптора fd ...
... делает ioctl(fd, ...) в первом случае (/dev/mymod)...
... или read(fd, ...) и write(fd, ...) во втором (/proc/...)

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 18:54
Olej
Olej писал(а):
27 авг 2022, 18:47
Через /proc реализовать будет и а). проще и б). красивее. :lol:
Чем ещё лучше /proc?
Тем что его read() / write() можно отлаживать и проверять просто Linux командами cat и echo, соответственно, даже без какой-то своей программы. :!: :-P

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 18:56
Olej
PaiMeiPetrovich писал(а):
27 авг 2022, 18:18
Во второй задаче есть 3 действующих лица: 1) Программа из пространства пользователя; 2) Модуль ядра, который мы сделали в первой задаче; 3) Символьное устройство (драйвер?!), которое должно обеспечить взаимодействие между модулем ядра и программкой.
Все верно?
И я бы, для начала, делал только для одного параметра ... для периода повторения - с ним проще.
А со вторым потом "по образу и подобию" будет совсем просто повторить.

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 19:19
PaiMeiPetrovich
Olej писал(а):
27 авг 2022, 18:47
Через /proc реализовать будет и а). проще и б). красивее
А как через /proc это сделать?
И в чем разница между /proc и /dev? (dev-устройство в виде файла, насколько я понимаю) (Сижу, читаю вашу книгу, наверняка там есть ответы на эти вопрсы, но я не знаю, успею ли я до них дойти...)

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 20:33
PaiMeiPetrovich
А, вот, к символьному устройству уже подобрался...Но, пора на боковую...

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 27 авг 2022, 21:10
Olej
PaiMeiPetrovich писал(а):
27 авг 2022, 19:19
И в чем разница между /proc и /dev? (dev-устройство в виде файла, насколько я понимаю)
Символьное устройство имеет вид /dev/xxx - файловое имя (хотя я делал символьные устройства и в $HOME/xxx, к примеру).
В /proc - управляющие интерфейсы, имеющие похожий вид /proc/xxx - тоже файловое имя.
PaiMeiPetrovich писал(а):
27 авг 2022, 19:19
(Сижу, читаю вашу книгу, наверняка там есть ответы на эти вопрсы
В книге целый раздел про /proc, не меньше чем про устройства в /dev.

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 28 авг 2022, 07:30
PaiMeiPetrovich
Olej писал(а):
27 авг 2022, 21:10
В /proc - управляющие интерфейсы, имеющие похожий вид /proc/xxx - тоже файловое имя.
Управляющий интерфейс это что значит? Насколько я понимаю, интерфейс - некая граница между модулем ядра и программой из userspace, обеспечивающая их взаимодействие. А это значит...Функции обработки (read(), write() и т.д они должны быть объявлены не в модуле, который собственно записывает строки в файл, а в другом модуле (который мы назвали интерфейсом). То есть, по сути, мне надо сделать 2 модуля (ну и програмку из userspace)?
Пока жду вашего ответа, буду читать про /proc. Попробую, для начала, закодить этот управляющий интерфейс, ориентируясь на хорошие примеры из вашей книги :ugeek:

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 28 авг 2022, 12:19
Olej
PaiMeiPetrovich писал(а):
28 авг 2022, 07:30
Управляющий интерфейс это что значит? Насколько я понимаю, интерфейс - некая граница между модулем ядра и программой из userspace, обеспечивающая их взаимодействие. А это значит...
Нет. Я имел в виду интерфейс - как точка взаимодействия приложения с модулем ядра, дверь из юзерспейс в кернелспейс.
Модуль создаёт имя в /proc/period (например)...
Приложение делает fd = open(/proc/period, ...) а дальше из этого дескриптора файла читает или пишет туда (который на самом деле файлом не является, а является точкой входа модуля, псевдофайлом).
А модуль должен обеспечивать обслуживание операций чтения/записи со своей стороны.

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 28 авг 2022, 13:33
PaiMeiPetrovich
Olej писал(а):
28 авг 2022, 12:19
Приложение делает fd = open(/proc/period, ...) а дальше из этого дескриптора файла читает или пишет туда (который на самом деле файлом не является, а является точкой входа модуля, псевдофайлом).
А модуль должен обеспечивать обслуживание операций чтения/записи со своей стороны.
Ага, то есть, модуль будет один, но при его инициализации создается файлик (некий узел что ли), обеспечивающий взаимодействие между ним и приложением? Кстати, вот я как раз не понял прикола с обслуживанием, почему без функций-обработчиков (read_node(); write_node();) приложение на может проводить соответствующие операции с файлом? Я сделал устройство по вашему примеру (вложенные файлы ему соответсвуют) и задался вопросом, что будет, если убрать read_node(). Я тестил устройство с помощью утилиты 'cat', и соответственно, cat не смог ничего считать из /proc/mod_proc! (Кстати, назрел еще один вопрос. А "open" то не включена в функции-обработчики, как же приложение открывает этот файл?!)

Re: Создание модуля ядра линукс и програмки к этому модулю.

Добавлено: 28 авг 2022, 14:48
Olej
PaiMeiPetrovich писал(а):
28 авг 2022, 13:33
А "open" то не включена в функции-обработчики, как же приложение открывает этот файл?!)
Если обработчики open и close не представлены автором кода (не реализуются), то используются дефаултные реализации для этих операций.