LinuxSir.cn,穿越时空的Linuxsir!

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

模块编程的Makefile问题

[复制链接]
发表于 2006-3-10 11:05:29 | 显示全部楼层 |阅读模式
我写了一个模块,名字叫zariphix_modules_001.c,内容如下:

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

int init_module(){
        printk("Hello World!\n");
        return 0;
}

void cleanup_module(){
        printk("Bye-bye!\n");
}

然后写了一个Makefile,内容如下:

CC=gcc
MODFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX

zariphix_modules_001.o: zariphix_modules_001.c /usr/include/linux/version.h
$(CC) $(MODFLAGS) -c zariphix_modules_001.c

我在make的时候提示以下错误:
Makefile:5: *** 遗漏分隔符 。 停止。

分隔符是什么呢?还有我找不到我的内核源码树在系统的哪个位置,/usr/src下面没有
我用的系统是 ubuntu 5.10

急求帮助,谢谢~~
发表于 2006-3-10 11:17:37 | 显示全部楼层
Post by larkin_echo


$(CC) $(MODFLAGS) -c zariphix_modules_001.c


这一行最前面要有一个 TAB,不能在第一列上,注意,是TAB, 不是空格,
回复 支持 反对

使用道具 举报

发表于 2006-3-10 11:20:35 | 显示全部楼层
Post by larkin_echo
还有我找不到我的内核源码树在系统的哪个位置,/usr/src下面没有
我用的系统是 ubuntu 5.10

急求帮助,谢谢~~


默认安装是不装内核源码的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-10 11:26:38 | 显示全部楼层
Post by biinn
这一行最前面要有一个 TAB,不能在第一列上,注意,是TAB, 不是空格,

哦~~~这样啊~~谢谢啦~~~

运行 $ sudo make
又有了一大串错误提示:

gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -c zariphix_modules_001.c
In file included from /usr/include/linux/sched.h:16,
                 from /usr/include/linux/module.h:9,
                 from zariphix_modules_001.c:2:
/usr/include/linux/signal.h:2:2: warning: #warning "You should include <signal.h>. This time I will do it for you."
In file included from /usr/include/linux/resource.h:4,
                 from /usr/include/linux/sched.h:79,
                 from /usr/include/linux/module.h:9,
                 from zariphix_modules_001.c:2:
/usr/include/linux/time.h:9: 错误:‘struct timespec’ 重定义
/usr/include/linux/time.h:15: 错误:‘struct timeval’ 重定义
/usr/include/linux/time.h:20: 错误:‘struct timezone’ 重定义
/usr/include/linux/time.h:47: 错误:‘struct itimerval’ 重定义
In file included from zariphix_modules_001.c:2:
/usr/include/linux/module.h:41: 错误:字段 ‘attr’ 的类型不完全
/usr/include/linux/module.h:49: 错误:字段 ‘kobj’ 的类型不完全
zariphix_modules_001.c: 在函数 ‘init_module’ 中:
zariphix_modules_001.c:5: 警告:隐式声明函数 ‘printk’
make: *** [zariphix_modules_001.o] 错误 1


这是怎么回事呢?是我没有在我的.c文件中引入<signal.h>的原故吗?

还有如果把makefile写成
obj-m := zariphix_modules_001.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

这两者有什么不同吗?谢谢回答
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-10 19:15:21 | 显示全部楼层
Post by larkin_echo
哦~~~这样啊~~谢谢啦~~~

运行 $ sudo make
又有了一大串错误提示:



这是怎么回事呢?是我没有在我的.c文件中引入<signal.h>的原故吗?

还有如果把makefile写成

这两者有什么不同吗?谢谢回答

解决这个问题了,原来是因为我的机器中没有内核源码树。
我下了一个新的内核源码包,编译了一下,但没有安装。再次make就通过。


可新的问题又出现了,当我用insmod加载模块的时候提示:

insmod: error inserting 'zariphix_modules_001.ko': -1 Invalid module format

郁闷。我试过了使用绝对路径和相对路径,也使用modprobe来加载,可都显示错误,这又是怎么回事呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-10 20:59:18 | 显示全部楼层
Post by larkin_echo
解决这个问题了,原来是因为我的机器中没有内核源码树。
我下了一个新的内核源码包,编译了一下,但没有安装。再次make就通过。


可新的问题又出现了,当我用insmod加载模块的时候提示:

insmod: error inserting 'zariphix_modules_001.ko': -1 Invalid module format

郁闷。我试过了使用绝对路径和相对路径,也使用modprobe来加载,可都显示错误,这又是怎么回事呢?


也终于解决了~~~
安装了编译的内核~~就OK了
回复 支持 反对

使用道具 举报

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

本版积分规则

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