Создание модуля ядра линукс и програмки к этому модулю.
Модератор: Olej
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Создание модуля ядра линукс и програмки к этому модулю.
Задача № 1 такая:
Реализовать модуль.
Модуль ядра Linux, при загрузке в ядро, должен записывать константные строки "Hello from kernel module" в общий файл. Строки должны дописываться в конец этого файла через определенный период по таймеру.
Задача № 2.
Реализовать программу для модуля.
В программе должна быть реализована возможность задать имя файла, в который модуль ядра будет записывать строки, а также период времени срабатывания для таймера в секундах
Реализовать модуль.
Модуль ядра Linux, при загрузке в ядро, должен записывать константные строки "Hello from kernel module" в общий файл. Строки должны дописываться в конец этого файла через определенный период по таймеру.
Задача № 2.
Реализовать программу для модуля.
В программе должна быть реализована возможность задать имя файла, в который модуль ядра будет записывать строки, а также период времени срабатывания для таймера в секундах
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Для начала разберемся с первой задачей. С помощью какой функции (из библиотек ядра) можно реализовать таймер? (Желательно описать, как эта функция работает, какие параметры и макросы что означают) Ну, вот чтобы просто каждые 5 секунд в журнал логов записывалось это сообщение.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Запись в файл из ядра описана в новой редакции книги, которая готовится к издательству: модули ядра (римэйк)PaiMeiPetrovich писал(а): ↑27 авг 2022, 12:47Модуль ядра Linux, при загрузке в ядро, должен записывать константные строки "Hello from kernel module" в общий файл. Строки должны дописываться в конец этого файла через определенный период по таймеру.
Но я код модуля пишущего в файл приложу сюда.
P.S. Нужно иметь в виду, что API ядра относящийся к файлам сильно меняется. То что работает в одной версии ядра перестанет работать (возможно) в соседней версии.
- Вложения
-
- mod_write.c
- (1.15 КБ) 41 скачивание
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Тут есть 2 совершенно разных варианта (вопрос поставлен неправильно):PaiMeiPetrovich писал(а): ↑27 авг 2022, 12:47В программе должна быть реализована возможность задать имя файла, в который модуль ядра будет записывать строки, а также период времени срабатывания для таймера в секундах
1). Имя файла и период задаётся 1 раз во время загрузки модуля. Тогда это можно задать параметром запуска:
Код: Выделить всё
# insmod me_module file=file.log period=100
Тогда управляющая программа могла бы взоимодействовать с модулем ... по разному:
а). создать символьное устройство ... /dev/mymod - которое могло бы принимать команды по ioctl();
б). создать из модуля имя/имена в /proc ... например /proc/mymod/file + /proc/mymod/period - где можно было бы читать (текущие) и писать значения - это идеологически более правильный способ;
в). то же что и б). только не в /proc а в /sys - это был бы самый красивый способ ... но тут придётся поуродоваться, потому что API sysfs постоянно меняется.
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
В целом, код понятен, но есть несколько вопросов.
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 (и почему тут знак минуса тоже интересно)
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
В целом, код понятен, но есть несколько вопросов.
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: Создание модуля ядра линукс и програмки к этому модулю.
Я не могу точно указывать - потому что мы пользуемся разными редакциями книги:
- первоначальные редакции гуляют по Интернет с 2012 года, уже 10 лет , постоянно дополняяся...
- подсказкой может быть первый номер в редакции, который я всегда старался указывать после заголовка...
- та ссылка которую я показал выше - редакция 7.270
- та что у меня под рукой, в работе - 7.284
-
- Писатель
- Сообщения: 36
- Зарегистрирован: 26 авг 2022, 20:56
- Контактная информация:
Re: Создание модуля ядра линукс и програмки к этому модулю.
Ну да, но тогда и программа для этого не нужна никакая. Я думаю, что да , во время работы модуля программа должна как-то провзаимодействовать и изменить дефолтные параметры как-то.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя