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

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

Модератор: Olej

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

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

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

Задача № 1 такая:
Реализовать модуль.

Модуль ядра Linux, при загрузке в ядро, должен записывать константные строки "Hello from kernel module" в общий файл. Строки должны дописываться в конец этого файла через определенный период по таймеру.

Задача № 2.
Реализовать программу для модуля.

В программе должна быть реализована возможность задать имя файла, в который модуль ядра будет записывать строки, а также период времени срабатывания для таймера в секундах

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

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

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

Для начала разберемся с первой задачей. С помощью какой функции (из библиотек ядра) можно реализовать таймер? (Желательно описать, как эта функция работает, какие параметры и макросы что означают) Ну, вот чтобы просто каждые 5 секунд в журнал логов записывалось это сообщение.

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

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

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

PaiMeiPetrovich писал(а):
27 авг 2022, 12:47
Модуль ядра Linux, при загрузке в ядро, должен записывать константные строки "Hello from kernel module" в общий файл. Строки должны дописываться в конец этого файла через определенный период по таймеру.
Запись в файл из ядра описана в новой редакции книги, которая готовится к издательству: модули ядра (римэйк)
Но я код модуля пишущего в файл приложу сюда.

P.S. Нужно иметь в виду, что API ядра относящийся к файлам сильно меняется. То что работает в одной версии ядра перестанет работать (возможно) в соседней версии.
Вложения
mod_write.c
(1.15 КБ) 33 скачивания

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

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

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

PaiMeiPetrovich писал(а):
27 авг 2022, 12:47
В программе должна быть реализована возможность задать имя файла, в который модуль ядра будет записывать строки, а также период времени срабатывания для таймера в секундах
Тут есть 2 совершенно разных варианта (вопрос поставлен неправильно):

1). Имя файла и период задаётся 1 раз во время загрузки модуля. Тогда это можно задать параметром запуска:

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

# insmod me_module file=file.log period=100
2). Иметь возможность изменять эти параметры по ходу работы, runtime ... Но тогда непонятно при каких начальных значениях должен загружаться модуль.
Тогда управляющая программа могла бы взоимодействовать с модулем ... по разному:
а). создать символьное устройство ... /dev/mymod - которое могло бы принимать команды по ioctl();
б). создать из модуля имя/имена в /proc ... например /proc/mymod/file + /proc/mymod/period - где можно было бы читать (текущие) и писать значения - это идеологически более правильный способ;
в). то же что и б). только не в /proc а в /sys - это был бы самый красивый способ ... но тут придётся поуродоваться, потому что API sysfs постоянно меняется.

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

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

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

Olej писал(а):
27 авг 2022, 13:03
Запись в файл из ядра описана в новой редакции книги, которая готовится к издательству: модули ядра (римэйк)
Это в какой главе описано, не подскажите? :-)

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

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

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

Olej писал(а):
27 авг 2022, 13:03
Запись в файл из ядра описана в новой редакции книги
Там же есть целая глава про таймеры... Таймеры есть разные, и это нужно читать, тут одним примером-файлом не покажешь.

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

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

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

Olej писал(а):
27 авг 2022, 13:03
ВЛОЖЕНИЯ
mod_write.c
(1.15 КБ) 1 скачивание
В целом, код понятен, но есть несколько вопросов.
1)ssize_t kernel_write(struct file *, const void *, size_t, loff_t *) - какой параметр в этой функции что означает?
2)S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR - Эти флаги что означают?
3)Что означают эти коды ошибок: -ENOENT, -EIO, -EPERM (и почему тут знак минуса тоже интересно)

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

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

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

Olej писал(а):
27 авг 2022, 13:03
ВЛОЖЕНИЯ
mod_write.c
(1.15 КБ) 1 скачивание
В целом, код понятен, но есть несколько вопросов.
1)ssize_t kernel_write(struct file *, const void *, size_t, loff_t *) - какой параметр в этой функции что означает?
2)S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR - Эти флаги что означают?
3)Что означают эти коды ошибок: -ENOENT, -EIO, -EPERM (и почему тут знак минуса тоже интересно)

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

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

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

PaiMeiPetrovich писал(а):
27 авг 2022, 13:16
Это в какой главе описано, не подскажите?
Я не могу точно указывать - потому что мы пользуемся разными редакциями книги:
- первоначальные редакции гуляют по Интернет с 2012 года, уже 10 лет :lol: , постоянно дополняяся...
- подсказкой может быть первый номер в редакции, который я всегда старался указывать после заголовка...
- та ссылка которую я показал выше - редакция 7.270
- та что у меня под рукой, в работе - 7.284

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

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

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

Olej писал(а):
27 авг 2022, 13:14
Имя файла и период задаётся 1 раз во время загрузки модуля. Тогда это можно задать параметром запуска:
Ну да, но тогда и программа для этого не нужна никакая. Я думаю, что да , во время работы модуля программа должна как-то провзаимодействовать и изменить дефолтные параметры как-то.

Ответить

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

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

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