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

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 27 авг 2022, 18:51

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 27 авг 2022, 18:54

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 27 авг 2022, 18:56

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

PaiMeiPetrovich
Писатель
Сообщения: 36
Зарегистрирован: 26 авг 2022, 20:56
Контактная информация:

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

Непрочитанное сообщение PaiMeiPetrovich » 27 авг 2022, 19:19

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

PaiMeiPetrovich
Писатель
Сообщения: 36
Зарегистрирован: 26 авг 2022, 20:56
Контактная информация:

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

Непрочитанное сообщение PaiMeiPetrovich » 27 авг 2022, 20:33

А, вот, к символьному устройству уже подобрался...Но, пора на боковую...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 27 авг 2022, 21:10

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

PaiMeiPetrovich
Писатель
Сообщения: 36
Зарегистрирован: 26 авг 2022, 20:56
Контактная информация:

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

Непрочитанное сообщение PaiMeiPetrovich » 28 авг 2022, 07:30

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 28 авг 2022, 12:19

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

PaiMeiPetrovich
Писатель
Сообщения: 36
Зарегистрирован: 26 авг 2022, 20:56
Контактная информация:

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

Непрочитанное сообщение PaiMeiPetrovich » 28 авг 2022, 13:33

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

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

Непрочитанное сообщение Olej » 28 авг 2022, 14:48

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

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей