您的位置:首页 > 其它

多个源文件编译成一个模块注意Makefile 书写

2014-05-09 15:40 337 查看
多个源文件编译成一个模块,不正确的Makefile 会使printk 不能输出信息。

细细观测,发现是对Makefile 语法未深刻理解所致。 下面附上一例说明问题。

--------------------------------------------------------------------------------

简单的测试文件1

[root@hjj /home/samba/printk]# cat print.c

--------------------------------------------------------------------------------

#include <linux/module.h>

int mod_entry(void)

{

printk("hello entry\n");

return 0;

}

void mod_exit(void)

{

printk("leave the program\n");

}

module_init(mod_entry);

module_exit(mod_exit);

MODULE_LICENSE("GPL");

--------------------------------------------------------------------------------

简单的测试文件2

[root@hjj /home/samba/printk]# cat abc.c

--------------------------------------------------------------------------------

#include <linux/kernel.h>

void dummy(void)

{

}

--------------------------------------------------------------------------------

错误的Makefile. 这样虽然生成了print.ko,

但是只连接了abc.o 而丢失了print.o, 当然连接了print.mod.o, 可用make V=1 观察

[root@hjj /home/samba/printk]# cat Makefile

--------------------------------------------------------------------------------

ifneq ($(KERNELRELEASE),)

obj-m := print.o

print-objs := abc.o

else

PWD = $(shell pwd)

KVER = $(shell uname -r)

KDIR = /lib/modules/$(KVER)/build

all:

make -C $(KDIR) M=$(PWD)

clean:

rm *.o *.ko modules.*

endif

--------------------------------------------------------------------------------

正确的 Makefile. 生成了myprint.ko, 连接了print.o abc.o 两个目标文件

[root@hjj /home/samba/printk]# cat Makefile

--------------------------------------------------------------------------------

ifneq ($(KERNELRELEASE),)

obj-m := myprint.o

myprint-objs := print.o abc.o

else

PWD = $(shell pwd)

KVER = $(shell uname -r)

KDIR = /lib/modules/$(KVER)/build

all:

make -C $(KDIR) M=$(PWD)

clean:

rm *.o *.ko modules.*

endif

--------------------------------------------------------------------------------

至此问题已完全解决。 不过也花费了我不少时间

结论:

obj-m(或-y)由模块名.o文件连接生成。

模块名-objs(或-y)由指定.o 文件连接而成

--------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: