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

多个源文件编译成一个模块,不正确的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) 说明要生成的模块名是什么,就是所谓的.ko文件的名称
模块名-objs(或-y)说明这个模块由哪些.o 文件连接而成
--------------------------------------------------------------------------------
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值