Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 03.07.2016
Сообщений: 58

Модуль ядра, некорректная работа

15.07.2020, 08:49. Показов 2204. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!,

изучаю тему написания модулей ядра. Начал с Hello, world.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <linux/module.h>
 
int __init init_module(void)
{
    printk(KERN_INFO "Starting module...");
    return 0;
}
 
void __exit cleanup_module(void)
{
    printk(KERN_INFO "Exit module...");
}
 
MODULE_LICENSE("GPL");
Естетсвенно после insmod я ожидаю Starting... в syslog и Exit... после rmmod, но вывод получается наоборот:

Bash
1
2
3
4
5
6
sergey@Lenovo-B570e:~$ sudo insmod solution.ko
sergey@Lenovo-B570e:~$ sudo dmesg -c
[16303.010327] Exit module...
sergey@Lenovo-B570e:~$ sudo rmmod solution.ko
sergey@Lenovo-B570e:~$ sudo dmesg -c
[16313.172809] Starting module...
В чём моя ошибка?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2020, 08:49
Ответы с готовыми решениями:

Модуль ядра, работа с мышью
Здравствуйте, нужно написать модуль ядра Linux,который будет при нажатии мышиной кнопки выводить некоторое сообщение. Причем желательно,...

Модуль ядра sysfs
Здравствуйте, пишу модуль ядра. Требуется записывать информацию в /sys/module/MODULENAME. Несколько часов разбора includ'ов kernel плодов...

Загружаемый модуль ядра зависает
Добрый день. Пишу загружаемый модуль ядра, который должен через заданный интервал времени отправлять данные устройству. Однако после...

8
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
17.07.2020, 21:46
Какое ядро? Как компилишь?
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,387
18.07.2020, 17:20
drfaust, сам пример очень устаревший. И что, это всё содержимое?
0
1 / 1 / 0
Регистрация: 03.07.2016
Сообщений: 58
28.07.2020, 08:45  [ТС]
Прошу прощения за долгое отсутствие, проблема решилась сама собой. Мне пояснили, что всё дело в буферизации вывода, это можно исправить. Правда пока не рассказали как
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
28.07.2020, 19:53
Лучший ответ Сообщение было отмечено remzona как решение

Решение

Попробуй
C
1
printk(KERN_INFO "Starting module...\n");
По идее, перевод строки может сбросить буфер
1
 Аватар для Dexel
46 / 13 / 3
Регистрация: 29.09.2013
Сообщений: 290
24.09.2020, 19:59
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <linux/module.h>
 
MODULE_LICENSE("GPL");
 
static int my_init_module(void)
{
    printk(KERN_INFO "Starting module...");
    return 0;
}
 
static void my_cleanup_module(void)
{
    printk(KERN_INFO "Exit module...");
}
 
module_init(my_init_module);
 
module_exit(my_cleanup_module);
Code
1
2
3
# dmesg -c
[13284.673059] Starting module...
[13604.719906] Exit module...
Добавлено через 13 минут
Ой, извиняюсь, то же самое. Первый раз при загрузке отработали Starting и Exit сразу. Без выгрузки.
Далее как и у вас, задом наперёд
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
24.09.2020, 20:03
Dexel, Хм...
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
faust@archlinux ~/П/C/РАзная всячина> cat ./11112.c
#include <linux/module.h>                                                                                                                                                                                           
                                                                                                                                                                                                                    
MODULE_LICENSE("GPL");                                                                                                                                                                                              
 
static int my_init_module(void)
{
    printk(KERN_INFO "Starting module...");
    return 0;
}
 
static void my_cleanup_module(void)
{
    printk(KERN_INFO "Exit module...");
}
 
module_init(my_init_module);
 
module_exit(my_cleanup_module);⏎                                                                                                                                                                                    faust@archlinux ~/П/C/РАзная всячина> gcc 11112.c
11112.c:3:16: ошибка: expected declaration specifiers or «...» before string constant
    3 | MODULE_LICENSE("GPL");
      |                ^~~~~
11112.c: В функции «my_init_module»:
11112.c:7:5: предупреждение: неявная декларация функции «printk» [-Wimplicit-function-declaration]
    7 |     printk(KERN_INFO "Starting module...");
      |     ^~~~~~
11112.c:7:12: ошибка: «KERN_INFO» не описан (первое использование в этой функции)
    7 |     printk(KERN_INFO "Starting module...");
      |            ^~~~~~~~~
11112.c:7:12: замечание: сообщение о каждом неописанном идентификаторе выдается один раз в каждой функции, где он встречается
11112.c:7:21: ошибка: expected «)» before string constant
    7 |     printk(KERN_INFO "Starting module...");
      |                     ^~~~~~~~~~~~~~~~~~~~~
      |                     )
11112.c: В функции «my_cleanup_module»:
11112.c:13:12: ошибка: «KERN_INFO» не описан (первое использование в этой функции)
   13 |     printk(KERN_INFO "Exit module...");
      |            ^~~~~~~~~
11112.c:13:21: ошибка: expected «)» before string constant
   13 |     printk(KERN_INFO "Exit module...");
      |                     ^~~~~~~~~~~~~~~~~
      |                     )
11112.c: На верхнем уровне:
11112.c:16:1: предупреждение: определение данных не содержит ни типа, ни класса хранения
   16 | module_init(my_init_module);
      | ^~~~~~~~~~~
11112.c:16:1: предупреждение: в декларации «module_init» по умолчанию установлен тип «int» [-Wimplicit-int]
11112.c:16:1: предупреждение: в декларации функции указаны имена параметров без типов
11112.c:18:1: предупреждение: определение данных не содержит ни типа, ни класса хранения
   18 | module_exit(my_cleanup_module);
      | ^~~~~~~~~~~
11112.c:18:1: предупреждение: в декларации «module_exit» по умолчанию установлен тип «int» [-Wimplicit-int]
11112.c:18:1: предупреждение: в декларации функции указаны имена параметров без типов
faust@archlinux ~/П/C/РАзная всячина> uname -ar
Linux archlinux 5.8.10-arch1-1 #1 SMP PREEMPT Thu, 17 Sep 2020 18:01:06 +0000 x86_64 GNU/Linux
faust@archlinux ~/П/C/РАзная всячина>
0
 Аватар для Dexel
46 / 13 / 3
Регистрация: 29.09.2013
Сообщений: 290
24.09.2020, 21:01
Даже на printk ругается... оригинально. Та может на арче ядро другое, не знаю. У ТС тоже нормально компилит.
На всякий мой Makefile
Bash
1
2
3
4
5
6
cat Makefile
obj-m += modulehelloworld.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Добавлено через 47 минут
Перевод строки в конце всех printk нужен. В нём всё дело.

C
1
printk(KERN_ALERT "...Текст...\n");
Code
1
2
3
4
5
6
# insmod modulehelloworld.ko
# dmesg -c
[18251.333649] Starting module...
# rmmod modulehelloworld
# dmesg -c
[18259.893036] Exit module...
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
26.09.2020, 22:05
Уже пытался объяснить...

Добавлено через 2 минуты
Цитата Сообщение от Dexel Посмотреть сообщение
Даже на printk ругается... оригинально.
Ну если другие модули дрова компилятся из сырцов - то всё в норм, но я make не писал - тупо gcc зарядил...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2020, 22:05
Помогаю со студенческими работами здесь

Модуль ядра не компилируется в Ubuntu-18.04
Здравствуйте! Есть маленький модуль ядра, он компилируется в Astra Linux 1.4, но не компилируется в более новой Ubuntu-18.04, вот...

Написать простейший модуль ядра
Привет. Необходимо написать простейший модуль ядра. Имеются следующие исходники: #include &lt;linux/module.h&gt; #include...

Модуль ядра, вывод сообщения в dmesg
Я реализовал это таким образом, но msleep вешает консоль. int record(void) { for(;;) { printk(KERN_ALERT&quot;Hello,...

Модуль ядра и прерывания от сетевой карты
Здравствуйте! Учусь писать модули ядра. Посоветуйте, каким образом можно осуществить перехват прерываний от сетевой карты и...

Модуль ядра, создающий файл с текстом
Здравствуйте. Файл proc_module.c. Его задача создать файл, в котором будет текст. #include &lt;stdio.h&gt; int createFile() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru