免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9715 | 回复: 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
16 [报告]
发表于 2010-04-19 16:02 |只看该作者
怀疑楼主的kernel是2.6的
参考一下ldd3,写个Makefile编译吧
T-bagwell 发表于 2009-04-08 17:15


呵呵,我也遇到过,2.6模块编译方法变了

论坛徽章:
0
15 [报告]
发表于 2010-03-19 21:04 |只看该作者
hello.c

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, Techshine !\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, Techshine ! \n");
}

module_init(hello_init);
module_exit(hello_exit);

Makefile

MVTOOL_PREFIX = /usr/local/arm/3.4.1/bin/arm-linux-  
KERNEL_DIR = /home/sys/linux-2.6.20
MAKE_ENV = ARCH=arm     CROSS_COMPILE=$(MVTOOL_PREFIX)

#TARGET = hello.ko
obj-m += hello.o

all:
     make -C $(KERNEL_DIR) M=`pwd` $(MAKE_ENV) modules
# cp hello.ko /home/pr/hello

clean:
     -rm -rf *.o *mod* *.ko .cmem* .tmp*



参考下这个看看

论坛徽章:
0
14 [报告]
发表于 2010-02-24 11:23 |只看该作者
大概 问题 有多情况的。
第一 你要看 是不是内核版本问题,不同版本 内核的结构体和api有所差别。
第二 你这是嵌入式还是普通linux内核驱动。
第三 最好是写个makfile来编译代码。
第四 就是看看 你的/usr/src/kernels下有没相关kernel编译使用的header文件啦。

论坛徽章:
0
13 [报告]
发表于 2010-02-11 15:43 |只看该作者
我现在在2.6内核下编译驱动程序也出现这个问题了。是linxu程序设计(第三版)的那个例子。那位老大来说几句。

论坛徽章:
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
12 [报告]
发表于 2009-04-08 17:26 |只看该作者
呵呵
主要是有人挖坟啊

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
11 [报告]
发表于 2009-04-08 17:20 |只看该作者
这么老的东西,也拿来搞,呵呵

论坛徽章:
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编译吧

论坛徽章:
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

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

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP