Не файл, как таковой, а файловое имя в файловой системе UNIX, в дереве, ... /proc/xxx - над которым можно делать то же самое, что и с дисковыми файлами.PaiMeiPetrovich писал(а): ↑28 авг 2022, 13:33но при его инициализации создается файлик (некий узел что ли), обеспечивающий взаимодействие между ним и приложением?
Создание модуля ядра линукс и програмки к этому модулю.
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
ЕстественноPaiMeiPetrovich писал(а): ↑28 авг 2022, 13:33Я тестил устройство с помощью утилиты 'cat', и соответственно, cat не смог ничего считать из /proc/mod_proc!
Потому что для cat модуль должен реализовывать операцию .proc_read - что у меня в коде было, но вы же его закомментировали?
Для тестирования .proc_write нужно использовать утилиту, соответственно, echo.
Точно так же вы можете тестировать свой вход /proc/xxx из файлового менеджера mc - по F3 читаем записанное значение, по F4 записываем новое значение.
1). Я попробовал собрать ваш пример, чтобы посмотреть конкретно ... но у меня он просто не собирается! (Причём я, засомневавшись, проверил свой пример procfs - всё замечательно собирается).
Возможно это связано с версией ядра ... Для какого дистрибутива и ядра вы пробуете это собирать?
2). Операцию .proc_read не нужно исключать из модуля! Нужно иметь, для тестирования, симметричную пару операций: по .proc_write мы записываем новое значение, после чего для контроля читаем его по .proc_read ... и так много раз подряд.
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Вроде бы я понял, как это должно работать. У меня есть модуль, который при выполнении команды "sudo insmod hello.ko period=n" создает точку входа и начинает записывать строки в другой файл с периодом n. Далее, у нас имеется программа, которая при запуске, записывает новый период в точку входа. И, соответственно модуль должен считать это изменение в точке входа и изменить параметр периода уже у себя в коде. Для реализации этого, я вижу только один вариант:
В созданное "файловое имя" при инициализации модуля я записываю начальное значение периода.
Далее я запускаю мой цикл по записи константной строки в этот псевдофайл и, в теле цикла, я просто считываю этот период из этого файла ( с помощью kernel_read()??), перевожу строку в число ( тот же вопрос, kernel_atoi()??) и в функцию "msleep()" уже посылаю параметром это число.
Делаю я это для того, чтобы моментально отреагировать на изменения в точке входа, которые может произвести прикладное приложение (я же постоянно буду считывать информацию из этого файла)
Как вам идея? Не удивлюсь, если делать надо все по-другому:D
В созданное "файловое имя" при инициализации модуля я записываю начальное значение периода.
Далее я запускаю мой цикл по записи константной строки в этот псевдофайл и, в теле цикла, я просто считываю этот период из этого файла ( с помощью kernel_read()??), перевожу строку в число ( тот же вопрос, kernel_atoi()??) и в функцию "msleep()" уже посылаю параметром это число.
Делаю я это для того, чтобы моментально отреагировать на изменения в точке входа, которые может произвести прикладное приложение (я же постоянно буду считывать информацию из этого файла)
Как вам идея? Не удивлюсь, если делать надо все по-другому:D
Последний раз редактировалось PaiMeiPetrovich 28 авг 2022, 16:09, всего редактировалось 2 раза.
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Да, я же специально, так как хотел проверить, сможет ли считывать cat)
Для версии 5.19.
Кстати, кстати, кстати! В версии моего ядра, на вход в функцию "proc_create" последним аргументом идет структура типа "proc_ops", а у вас там другого типа структура была. (Собственно, та структура, в которой описаны поля ".read", ".write")Может из-за этого не собирается?!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Собрал на другом компьютере:
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ uname -a
Linux esprimop420 5.10.0-16-amd64 #1 SMP Debian 5.10.127-2 (2022-07-23) x86_64 GNU/Linux
Код: Выделить всё
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,9,0)
const struct file_operations node_fops = {
.owner = THIS_MODULE,
.read = node_read,
.write = node_write
#else
const struct proc_ops node_fops = {
.proc_read = node_read,
.proc_write = node_write
#endif
};
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ sudo insmod mod_proc.ko
[sudo] пароль для olej:
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ sudo dmesg | tail -n1
[960494.092631] ! /proc/mod_node installed
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ ls -l /proc/mod_node
-rw-rw-rw- 1 root root 0 авг 28 16:02 /proc/mod_node
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ echo 12345 > /proc/mod_node
Код: Выделить всё
olej@esprimop420:~/2022/PaiMeiPetrovich$ sudo dmesg | tail -n3
[960494.092631] ! /proc/mod_node installed
[960581.515037] ! write: 6 bytes
[960581.515046] ! put 6 bytes
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Никогда не нужно собирать на последних версиях!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
А откуда взяли инсталляцию с 5.19?
Какой дистрибутив?
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Аааа, нет.... Стоп! Я не о том подумал! Убунту последней версии у меня стоит, как версия ядра там, даже не знаю. 5-15 должна быть, по идее. У меня там все заголовочные файлы хранятся
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя