компиляция модуля : файл asm/linkage.h не найден

Я пытаюсь скомпилировать пример модуля ядра "hello world", проблемы обнаружены на ubuntu 11.04, kernel 3.2.6, gcc 4.5.2 и fedora 16, kernel 3.2.7, gcc 4.6.7.

code:

#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");

static int __init hello_init (void)
{
printk("Hello module init\n");
return 0;
}
static void __exit hello_exit (void)
{
printk("Hello module exit\n");
}
module_init(hello_init);
module_exit(hello_exit);

compiled with:

gcc -D__KERNEL__ -I /usr/src/linux/include/ -DMODULE -Wall -O2 -c hello.c -o hello.o

error:

In file included from /usr/src/linux/include/linux/kernel.h:13:0, из /usr/src/linux/include/linux/cache.h:4, из /usr/src/linux/include/linux/time.h:7, из /usr/src/linux/include/linux/stat.h:60, из /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/linkage.h:5:25: фатальная ошибка: asm/linkage.h: file not found

Затем я обнаружил, что в /usr/src/linux/include/ нет папки с именем 'asm', а есть 'asm-generic'; поэтому я сделал мягкую ссылку 'asm' на 'asm-generic', и скомпилировал agail:

на этот раз ошибка была:

In file included from /usr/src/linux/include/linux/preempt.h:9:0, из /usr/src/linux/include/linux/spinlock.h:50, from /usr/src/linux/include/linux/seqlock.h:29, из /usr/src/linux/include/linux/time.h:8, из /usr/src/linux/include/linux/stat.h:60, из /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/thread_info.h:53:29: фатальная ошибка: asm/thread_info.h: file not found

Итак, я понял, что ошибся, но почему? T_T

12
задан Ben Voigt 29 February 2012 в 02:31
поделиться