LINUX.ORG.RU

Не собирается модуль для ядра.


0

0

Вообщем решил в целях повышения образованности почитать ldd. Прочёв 
первую часть, перешёл ко второй, где был самый простой модуль.

$ cat hello.c
#define MODULE
#include <linux/module.h>

int init_module(void)
{
    printk("Hello, world\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Goodbye cruel world\n");
}

Но вот собрать его не получилось:

$ gcc -Wall -DLINUX -c hello.c
In file included from /usr/include/asm/cputime.h:4,
                 from /usr/include/linux/sched.h:23,
                 from /usr/include/linux/module.h:10,
                 from hello.c:2:
/usr/include/asm-generic/cputime.h:21: error: parse error before "cputime64_t"
In file included from /usr/include/asm/siginfo.h:4,
                 from /usr/include/linux/signal.h:7,
                 from /usr/include/linux/sched.h:27,
                 from /usr/include/linux/module.h:10,
                 from hello.c:2:
/usr/include/asm-generic/siginfo.h:61: error: size of array `_pad' is too large
In file included from hello.c:2:
/usr/include/linux/module.h:50: error: field `attr' has incomplete type
/usr/include/linux/module.h:58: error: field `kobj' has incomplete type
/usr/include/linux/module.h:233: error: field `grp' has incomplete type

Пробовал без -DLINUX, результат такой же. 

Вот собсно и вопрос что делать, и что не так?

Заранее спасибо!!!
★★★★★

Хм, странно добавил в код

#define __KERNEL__

и всё запахало, хотя во второй главе ldd2 в коде нет такой дериктивы! А то что её надо добавить я увидел в ldd1.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

Мдаа а вот вставить модуль не получилось :(

# insmod hello.o insmod: error inserting 'hello.o': -1 Invalid module format

Что может быть не так?!

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

Угу. Не собирай модули с заголовками из /usr/include.
Впрочем, с новыми ядрами все собирается с ядреным Makefile, поэтому ошибиться сложнее.

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