免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9698 | 回复: 15
打印 上一主题 下一主题

刚开始学习linux下的驱动开发,书上的例子编译不了,大家帮忙看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-11 15:35 |只看该作者 |倒序浏览
这是《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

论坛徽章:
0
2 [报告]
发表于 2008-10-11 21:31 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2008-10-12 08:04 |只看该作者

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [报告]
发表于 2008-10-12 22:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2008-10-13 00:31 |只看该作者
lz的内核可以编译通过吗

论坛徽章:
0
6 [报告]
发表于 2008-10-13 12:52 |只看该作者
不太懂LZ编译的方式,改用Makefile编译看?
感觉你编译的语句是不是有问题哦?

论坛徽章:
0
7 [报告]
发表于 2008-10-19 10:10 |只看该作者
我也遇到这样的问题,不过是在ubuntu上,真不知道到底该如何设置include才好啊

论坛徽章:
0
8 [报告]
发表于 2009-04-08 15:07 |只看该作者

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2009-04-08 15:30 |只看该作者
你用的什么内核版本,2.6下的编译方法改变了。建议看LDD3

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
10 [报告]
发表于 2009-04-08 17:15 |只看该作者
怀疑楼主的kernel是2.6的
参考一下ldd3,写个Makefile编译吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP