- 论坛徽章:
- 0
|
这是《linux程序设计》第三版 18章的第一个例子
源码是这个:
/*
* Hello world module.
*/
#include <linux/module.h>
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include <linux/modversions.h>
#endif
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_DEBUG "Hello, kernel!\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_DEBUG "Good-bye, kernel!\n");
}
编译语句是:$ gcc -D__KERNEL__ -I/usr/src/linux/include -DMODULE -Wall -O2 -c hello.c -o hello.o
我的系统是openSUSE 11.0 一开始好像系统没有安装源码,提示一些头文件找不到
后来我从光盘中把源码装入,又有了如下的错误,
我在网上找了一下,好像有同样的问题,不过好像没有被解决,
大家帮帮忙,看看应该如何解决,
这么多错误提示,我一点头绪都没有!!!
错误提示:
$ gcc -D__KERNEL__ -I/usr/src/linux/include -DMODULE -Wall -O2 -c hello.c -o hello.o
In file included from /usr/src/linux/include/linux/prefetch.h:13,
from /usr/src/linux/include/linux/list.h:8,
from /usr/src/linux/include/linux/module.h:9,
from hello.c:4:
/usr/src/linux/include/linux/types.h:197: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘resource_size_t’
In file included from /usr/src/linux/include/linux/list.h:8,
from /usr/src/linux/include/linux/module.h:9,
from hello.c:4:
/usr/src/linux/include/linux/prefetch.h:14:27: error: asm/processor.h: No such file or directory
/usr/src/linux/include/linux/prefetch.h:15:23: error: asm/cache.h: No such file or directory
In file included from /usr/src/linux/include/linux/module.h:9,
from hello.c:4:
/usr/src/linux/include/linux/list.h:9:24: error: asm/system.h: No such file or directory
In file included from /usr/src/linux/include/linux/module.h:9,
from hello.c:4:
/usr/src/linux/include/linux/list.h: In function ‘__list_add_rcu’:
/usr/src/linux/include/linux/list.h:100: warning: implicit declaration of function ‘smp_wmb’
In file included from /usr/src/linux/include/linux/kernel.h:11,
from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/linkage.h:4:25: error: asm/linkage.h: No such file or directory
In file included from /usr/src/linux/include/linux/kernel.h:15,
from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/bitops.h:17:24: error: asm/bitops.h: No such file or directory
In file included from /usr/src/linux/include/linux/kernel.h:15,
from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/bitops.h: In function ‘get_bitmask_order’:
/usr/src/linux/include/linux/bitops.h:29: warning: implicit declaration of function ‘fls’
/usr/src/linux/include/linux/bitops.h: In function ‘hweight_long’:
/usr/src/linux/include/linux/bitops.h:45: warning: implicit declaration of function ‘hweight32’
/usr/src/linux/include/linux/bitops.h:45: warning: implicit declaration of function ‘hweight64’
/usr/src/linux/include/linux/bitops.h: In function ‘fls_long’:
/usr/src/linux/include/linux/bitops.h:112: warning: implicit declaration of function ‘fls64’
In file included from /usr/src/linux/include/linux/kernel.h:16,
from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/log2.h: At top level:
/usr/src/linux/include/linux/log2.h:32: error: expected ‘)’ before ‘n’
/usr/src/linux/include/linux/log2.h:40: error: expected ‘)’ before ‘n’
In file included from /usr/src/linux/include/linux/byteorder/little_endian.h:104,
from /usr/include/asm/byteorder.h:69,
from /usr/src/linux/include/linux/kernel.h:17,
from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/byteorder/generic.h:149: error: expected declaration specifiers or ‘...’ before ‘u16’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘le16_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:151: error: ‘val’ undeclared (first use in this function)
/usr/src/linux/include/linux/byteorder/generic.h:151: error: (Each undeclared identifier is reported only once
/usr/src/linux/include/linux/byteorder/generic.h:151: error: for each function it appears in.)
/usr/src/linux/include/linux/byteorder/generic.h: At top level:
/usr/src/linux/include/linux/byteorder/generic.h:154: error: expected declaration specifiers or ‘...’ before ‘u32’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘le32_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:156: error: ‘val’ undeclared (first use in this function)
/usr/src/linux/include/linux/byteorder/generic.h: At top level:
/usr/src/linux/include/linux/byteorder/generic.h:159: error: expected declaration specifiers or ‘...’ before ‘u64’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘le64_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:161: error: ‘val’ undeclared (first use in this function)
/usr/src/linux/include/linux/byteorder/generic.h: At top level:
/usr/src/linux/include/linux/byteorder/generic.h:164: error: expected declaration specifiers or ‘...’ before ‘u16’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘be16_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:166: error: ‘val’ undeclared (first use in this function)
/usr/src/linux/include/linux/byteorder/generic.h: At top level:
/usr/src/linux/include/linux/byteorder/generic.h:169: error: expected declaration specifiers or ‘...’ before ‘u32’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘be32_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:171: error: ‘val’ undeclared (first use in this function)
/usr/src/linux/include/linux/byteorder/generic.h: At top level:
/usr/src/linux/include/linux/byteorder/generic.h:174: error: expected declaration specifiers or ‘...’ before ‘u64’
/usr/src/linux/include/linux/byteorder/generic.h: In function ‘be64_add_cpu’:
/usr/src/linux/include/linux/byteorder/generic.h:176: error: ‘val’ undeclared (first use in this function)
In file included from /usr/src/linux/include/linux/cache.h:4,
from /usr/src/linux/include/linux/time.h:7,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/kernel.h:18:21: error: asm/bug.h: No such file or directory
In file included from /usr/src/linux/include/linux/preempt.h:9,
from /usr/src/linux/include/linux/spinlock.h:49,
from /usr/src/linux/include/linux/seqlock.h:29,
from /usr/src/linux/include/linux/time.h:8,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/thread_info.h: At top level:
/usr/src/linux/include/linux/thread_info.h:23: error: expected specifier-qualifier-list before ‘u32’
In file included from /usr/src/linux/include/linux/preempt.h:9,
from /usr/src/linux/include/linux/spinlock.h:49,
from /usr/src/linux/include/linux/seqlock.h:29,
from /usr/src/linux/include/linux/time.h:8,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/thread_info.h:35:29: error: asm/thread_info.h: No such file or directory
/usr/src/linux/include/linux/thread_info.h:44: warning: ‘struct thread_info’ declared inside parameter list
/usr/src/linux/include/linux/thread_info.h:44: warning: its scope is only this definition or declaration, which is probably not what you want
/usr/src/linux/include/linux/thread_info.h: In function ‘set_ti_thread_flag’:
/usr/src/linux/include/linux/thread_info.h:46: warning: implicit declaration of function ‘set_bit’
/usr/src/linux/include/linux/thread_info.h:46: error: dereferencing pointer to incomplete type
/usr/src/linux/include/linux/thread_info.h: At top level:
/usr/src/linux/include/linux/thread_info.h:49: warning: ‘struct thread_info’ declared inside parameter list
/usr/src/linux/include/linux/thread_info.h: In function ‘clear_ti_thread_flag’:
/usr/src/linux/include/linux/thread_info.h:51: warning: implicit declaration of function ‘clear_bit’
/usr/src/linux/include/linux/thread_info.h:51: error: dereferencing pointer to incomplete type
/usr/src/linux/include/linux/thread_info.h: At top level:
/usr/src/linux/include/linux/thread_info.h:54: warning: ‘struct thread_info’ declared inside parameter list
/usr/src/linux/include/linux/thread_info.h: In function ‘test_and_set_ti_thread_flag’:
/usr/src/linux/include/linux/thread_info.h:56: warning: implicit declaration of function ‘test_and_set_bit’
/usr/src/linux/include/linux/thread_info.h:56: error: dereferencing pointer to incomplete type
/usr/src/linux/include/linux/thread_info.h: At top level:
/usr/src/linux/include/linux/thread_info.h:59: warning: ‘struct thread_info’ declared inside parameter list
/usr/src/linux/include/linux/thread_info.h: In function ‘test_and_clear_ti_thread_flag’:
/usr/src/linux/include/linux/thread_info.h:61: warning: implicit declaration of function ‘test_and_clear_bit’
/usr/src/linux/include/linux/thread_info.h:61: error: dereferencing pointer to incomplete type
/usr/src/linux/include/linux/thread_info.h: At top level:
/usr/src/linux/include/linux/thread_info.h:64: warning: ‘struct thread_info’ declared inside parameter list
/usr/src/linux/include/linux/thread_info.h: In function ‘test_ti_thread_flag’:
/usr/src/linux/include/linux/thread_info.h:66: warning: implicit declaration of function ‘test_bit’
/usr/src/linux/include/linux/thread_info.h:66: error: dereferencing pointer to incomplete type
In file included from /usr/src/linux/include/linux/seqlock.h:29,
from /usr/src/linux/include/linux/time.h:8,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/spinlock.h:339:24: error: asm/atomic.h: No such file or directory
In file included from /usr/src/linux/include/linux/seqlock.h:29,
from /usr/src/linux/include/linux/time.h:8,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/spinlock.h: At top level:
/usr/src/linux/include/linux/spinlock.h:348: error: expected ‘)’ before ‘*’ token
In file included from /usr/src/linux/include/linux/time.h:8,
from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/seqlock.h: In function ‘read_seqbegin’:
/usr/src/linux/include/linux/seqlock.h:89: warning: implicit declaration of function ‘smp_rmb’
In file included from /usr/src/linux/include/linux/stat.h:60,
from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/time.h: At top level:
/usr/src/linux/include/linux/time.h:125: error: expected ‘)’ before ‘nsec’
/usr/src/linux/include/linux/time.h:134: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘timespec_to_ns’
/usr/src/linux/include/linux/time.h:146: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘timeval_to_ns’
/usr/src/linux/include/linux/time.h:158: warning: type defaults to ‘int’ in declaration of ‘s64’
/usr/src/linux/include/linux/time.h:158: error: expected ‘;’, ‘,’ or ‘)’ before ‘nsec’
/usr/src/linux/include/linux/time.h:166: warning: type defaults to ‘int’ in declaration of ‘s64’
/usr/src/linux/include/linux/time.h:166: error: expected ‘;’, ‘,’ or ‘)’ before ‘nsec’
/usr/src/linux/include/linux/time.h:173: error: expected declaration specifiers or ‘...’ before ‘u64’
/usr/src/linux/include/linux/time.h: In function ‘timespec_add_ns’:
/usr/src/linux/include/linux/time.h:175: error: ‘ns’ undeclared (first use in this function)
/usr/src/linux/include/linux/time.h:179: error: invalid lvalue in asm output 0
In file included from /usr/src/linux/include/linux/module.h:10,
from hello.c:4:
/usr/src/linux/include/linux/stat.h: At top level:
/usr/src/linux/include/linux/stat.h:63: error: expected specifier-qualifier-list before ‘u64’
In file included from /usr/src/linux/include/linux/module.h:14,
from hello.c:4:
/usr/src/linux/include/linux/elf.h:7:21: error: asm/elf.h: No such file or directory
In file included from /usr/src/linux/include/linux/kobject.h:26,
from /usr/src/linux/include/linux/module.h:16,
from hello.c:4:
/usr/src/linux/include/linux/kref.h:24: error: expected specifier-qualifier-list before ‘atomic_t’
In file included from /usr/src/linux/include/linux/kobject.h:28,
from /usr/src/linux/include/linux/module.h:16,
from hello.c:4:
/usr/src/linux/include/linux/wait.h:26:25: error: asm/current.h: No such file or directory
In file included from /usr/src/linux/include/linux/module.h:16,
from hello.c:4:
/usr/src/linux/include/linux/kobject.h:40: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘uevent_seqnum’
In file included from hello.c:4:
/usr/src/linux/include/linux/module.h:19:23: error: asm/local.h: No such file or directory
/usr/src/linux/include/linux/module.h:21:24: error: asm/module.h: No such file or directory
|
|