LINUX.ORG.RU

Программирование модулей


0

0

Есть такая программка:
#include <linux/kernel.h>
#include <linux/module.h>
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif

int init_module() {
printk("Hello world from the kernel.\n");
return 0;
}

void cleanup_module() {
printk("That's all folks.\n");
}

Проблема в том, что данный пример не хочет компилиться из-за строчки:
#include <linux/modversions.h>
выдаёт следующее:
#error Modules should never use kernel-headers system headers,
#error but headers from an appropriate kernel-source
Собственно в файле /usr/include/linux/modversions.h именно эти строчки и содержатся. Вопрос такой: почему у меня в этом файле ничего нет и что там должно быть? Может можно определить MODVERSIONS каким-нибудь другим способом? Заранее спасибо.

У меня в нем подключается linux/modsetver.h и все

Banshee
()

Если я его правильно понял, то он хочет, чтобы ты ткнул gcc носом в /usr/src/linux/include/ вместо /usr/include/. Сделать это можно (по-моему) с помощью -I- -I/usr/src/linux/include/.

justme
()

сорри.., если не прав. напиши строчку, которой ты запускаешь компиллятор. а вообще попробуй для начала проверить, что /usr/include/linux действительно ссылка на /usr/src/linux, а /usr/src/linux ссылается на дирректорию, содержащюю исходник текущего ядра.

anonymous
()

упс. стормозил что-то. /usr/include/linux должен быть /usr/src/linux/include/linux

anonymous
()

Я такой модуль скомпилировал и пытался установить. insmod(), rmmod() выполняются, в /proc/modules модуль регистрируется. Однако на консоль ничего не выводится. Т.е. printk() не действует. С чего бы это ? Если у кого работает, ответьте.

anonymous
()

на какую консоль? на Х-вую? Если делаешь insmod из Х-вой консоли (xterm etc), вывода не увидишь. Об этом было где-то написано в MPG

NewComer
()

Вообще когда ты делаешь ismod например, то он (ismod) от консоли понятное дело не отвязан. Так что ты можешь использовать current (текущий процесс, в данном случае ismod) для того чтобы написать что-то в консоль. Я имею ввиду, что у процесса есть контролирующий tty (за исключением демонов, ну или тех у кого сознательно отключен). У tty определен т.н. драйвер - структура с указателями на процедуры чтения и записи. Ты можешь попользоваться ими.

Banshee
()

все что от kernel идет через printk смотрите в /var/log/messages или что у вас там

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.