1 / 1 / 0
Регистрация: 03.07.2016
Сообщений: 58

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

15.07.2020, 08:49. Показов 2213. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru