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

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

Модератор: Olej

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

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

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

PaiMeiPetrovich писал(а):
28 авг 2022, 16:25
Странно! Я же со своим ядром работаю в первую очередь...
Программный код никогда никто не пишет для себя ... кроме конченных пЫанЭров :lol:
Код пишется для использования!
И код для "твоего" ядра никому не нужен. А нужен код который будет работать везде.

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

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

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

Olej писал(а):
28 авг 2022, 16:31
Далее я запускаю мой цикл по записи константной строки в этот псевдофайл
Какой я болван, я не правильно записал! Константную строку я , конечно же, не записываю в точку входа! В точке входа у меня лежит "period", который может изменить программа. Я хочу его постоянно считывать в цикле

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

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

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

Olej писал(а):
28 авг 2022, 16:33
И код для "твоего" ядра никому не нужен. А нужен код который будет работать везде.
Ну да, собственно говоря мне для этого и надо использовать kernel_version, которое я зачем-то выкинул...

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

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

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

Olej писал(а):
28 авг 2022, 16:31
.S. По хорошему, значение, записываемое-считываемое, нужно защищать от одновременного изменения node_write и цикла выводящего сообщения - примитивами синхронизации или атомарными операциями ... но это для тебя пока - высшая математика.


Это что-то типа мьютексов, только для ядра?

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

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

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

Olej писал(а):
28 авг 2022, 16:31
но это для тебя пока - высшая математика
Кстати, я не боюсь высшей математики! Если надо будет (точнее, когда надо будет) - освоим! ;-)

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

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

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

PaiMeiPetrovich писал(а):
28 авг 2022, 16:23
перевожу строку в число ( тот же вопрос, kernel_atoi()??)
simple_strtoul(), sscanf() и др.
Ищется вот так:

Код: Выделить всё

olej@esprimop420:~/2022/PaiMeiPetrovich$ sudo grep ' simple_strtoul' /proc/kallsyms
ffffffff886cdd10 T simple_strtoul
ffffffff886cddb0 T simple_strtoull

Код: Выделить всё

olej@esprimop420:~/2022/PaiMeiPetrovich$ sudo grep ' simple_str' /proc/kallsyms
ffffffff886ccb10 t simple_strntoull
ffffffff886cdd10 T simple_strtoul
ffffffff886cddb0 T simple_strtoull
ffffffff886cde50 T simple_strtoll
ffffffff886cdf10 T simple_strtol

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

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

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

PaiMeiPetrovich писал(а):
28 авг 2022, 16:39
Это что-то типа мьютексов, только для ядра?
Да. В книге есть, целый раздел.
Но пока этого делать не надо.


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

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

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

В общем, скидываю что получилось в итоге...
Запускаю мод, он начинает записывать строки в файл каждые 10 секунд.
Потом запускаю приложение, оно перезаписывает информацию в точке входа, меняя период на 1 секунду. (проверял с помощью cat /proc/mod_node)
Но период записи (реальный, не смотря на то, что в файле лежит единица) остается прежнем! Не знаю, в чем дело...
В логе пишет: kernel read not supported for file /mod_node (pid: 26865 comm: insmod)
Может с помощью другой функции считывать из нода, но тогда странно, почему при первой итерации считалось...
Пойду я спать уже крыша немного едет, завтра еще денек есть...
Вложения
fops_rw.c
функции чтения/записи
(1.23 КБ) 26 скачиваний
user_prog.c
приложение
(267 байт) 28 скачиваний
hello.c
Модуль
(2.95 КБ) 30 скачиваний

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

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

Непрочитанное сообщение Olej » 29 авг 2022, 00:03

PaiMeiPetrovich писал(а):
28 авг 2022, 20:02
Может с помощью другой функции считывать из нода, но тогда странно, почему при первой итерации считалось...
Там много мусора ... я упростил этот код + исправил + отладил ... оставил только 2 файла для простоты.
Вот как это теперь работает:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ sudo insmod mod_loop.ko

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ lsmod | head -n3
Module                  Size  Used by
mod_loop               16384  0
vboxnetadp             28672  0

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ dmesg | tail -n2
[44272.014597] ! /proc/mod_loop directory created
[44272.014599] ! /proc/mod_loop/period created

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ cat /proc/mod_loop/period
5

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ dmesg | tail -n4
[44272.014597] ! /proc/mod_loop directory created
[44272.014599] ! /proc/mod_loop/period created
[44324.109546] ! return 1 bytes: <5>
[44324.109563] ! return EOF

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ echo 432 > /proc/mod_loop/period

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ dmesg | tail -n6
[43776.427616] ! /proc/mod_loop/period removed
[44272.014597] ! /proc/mod_loop directory created
[44272.014599] ! /proc/mod_loop/period created
[44324.109546] ! return 1 bytes: <5>
[44324.109563] ! return EOF
[44355.436670] ! write: 3 bytes - 432

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ cat /proc/mod_loop/period
432
Ошибочный ввод:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ echo asdf > /proc/mod_loop/period
bash: echo: ошибка записи: Недопустимый аргумент

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ echo $?
1
А это нормально :lol: :

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ echo 12345asdf > /proc/mod_loop/period

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ cat /proc/mod_loop/period
12345

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/PaiMeiPetrovich$ sudo rmmod mod_loop
Вложения
fops_rw.c
(1.05 КБ) 28 скачиваний
mod_loop.c
(1.65 КБ) 28 скачиваний

Ответить

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

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

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