LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 853|回复: 2

请教个位高手: 关于模块的编译问题

[复制链接]
发表于 2007-4-11 10:05:04 | 显示全部楼层 |阅读模式
我是个初学者,学习编写模块,但编译的时候总是出问题,我用的是ArchLinux 0.8
源码:
//hello_m.c
#include <linux/module.h> //所有模块都需要的头文件
#include <linux/init.h> // init&exit相关宏
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);


Makefile:

DELAGS = -D__KERNEL__ -DMODULE -DLINUX -I /usr/src/linux/include
hello_m.o:hello_m.c
        gcc $(DELAGS) -c hello_m.c -o hello_m.o
clean:
        rm -f *.o


编译与错误:

[root@zhangds module01]# make
gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/src/linux/include hello_m.c -o hello_m.o
In file included from /usr/src/linux/include/asm/thread_info.h:16,
                 from /usr/src/linux/include/linux/thread_info.h:21,
                 from /usr/src/linux/include/linux/preempt.h:9,
                 from /usr/src/linux/include/linux/spinlock.h:49,
                 from /usr/src/linux/include/linux/module.h:9,
                 from hello_m.c:1:
/usr/src/linux/include/asm/processor.h:82: 错误:‘CONFIG_X86_L1_CACHE_SHIFT’ 未声明 (不在函数内)
/usr/src/linux/include/asm/processor.h:82: 错误:要求的对齐边界不是常量
在包含自 /usr/src/linux/include/linux/sched.h:51 的文件中,
                 从 /usr/src/linux/include/linux/utsname.h:35,
                 从 /usr/src/linux/include/asm/elf.h:12,
                 从 /usr/src/linux/include/linux/elf.h:7,
                 从 /usr/src/linux/include/linux/module.h:15,
                 从 hello_m.c:1:
/usr/src/linux/include/linux/jiffies.h:33:3: 错误:#error You lose.
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:225:31: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:269:46: 错误:#if 中用零做除数
In file included from /usr/src/linux/include/linux/sched.h:51,
                 from /usr/src/linux/include/linux/utsname.h:35,
                 from /usr/src/linux/include/asm/elf.h:12,
                 from /usr/src/linux/include/linux/elf.h:7,
                 from /usr/src/linux/include/linux/module.h:15,
                 from hello_m.c:1:
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_to_msecs’ 中:
/usr/src/linux/include/linux/jiffies.h:274: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:274: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/usr/src/linux/include/linux/jiffies.h:274: 错误:所在的函数内只报告一次。)
/usr/src/linux/include/linux/jiffies.h:280:46: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_to_usecs’ 中:
/usr/src/linux/include/linux/jiffies.h:285: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:293:46: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘msecs_to_jiffies’ 中:
/usr/src/linux/include/linux/jiffies.h:298: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:306:46: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘usecs_to_jiffies’ 中:
/usr/src/linux/include/linux/jiffies.h:311: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘timespec_to_jiffies’ 中:
/usr/src/linux/include/linux/jiffies.h:330: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:336: 错误:‘SHIFT_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_to_timespec’ 中:
/usr/src/linux/include/linux/jiffies.h:349: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘timeval_to_jiffies’ 中:
/usr/src/linux/include/linux/jiffies.h:371: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:375: 错误:‘SHIFT_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_to_timeval’ 中:
/usr/src/linux/include/linux/jiffies.h:387: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:400:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_to_clock_t’ 中:
/usr/src/linux/include/linux/jiffies.h:401: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘clock_t_to_jiffies’ 中:
/usr/src/linux/include/linux/jiffies.h:412: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h:431:6: 错误:#if 中用零做除数
/usr/src/linux/include/linux/jiffies.h: 在函数 ‘jiffies_64_to_clock_t’ 中:
/usr/src/linux/include/linux/jiffies.h:432: 错误:‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
在包含自 /usr/src/linux/include/linux/module.h:21 的文件中,
                 从 hello_m.c:1:
/usr/src/linux/include/asm/module.h:62:2: 错误:#error unknown processor family
make: *** [hello_m.o] 错误 1

谢谢
 楼主| 发表于 2007-4-11 21:12:36 | 显示全部楼层
问题已解决
重新编写Makefile:
ifneq ($(KERNELRELEASE),)
obj-m:= hello_m.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

分享一下,多谢各位的支持!!
回复 支持 反对

使用道具 举报

发表于 2007-4-12 16:08:48 | 显示全部楼层
写module和发行版区别没有什么关系了。

我一般给kernel source作个连接到标准的目录去
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表