我有简单的模块程序,它将调用其他文件中的其他函数。例如:
Arith.c <=== main module which calls sum(), diff(), mul() ...
|
|----sum.c
|----Sub.c
|----mul.c
|----div.c
|----remainder.c
|----quotient.c
我为它编写了程序。对于make文件我不懂如何写。我研究了section 3.3 here并编辑了Makefile
。
所以现在我的make文件是(我只测试了总和)
obj-m := arith.o
arith-y += sum.o
KDIR=/lib/modules/$(shell uname -r)/build
module:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
当我运行make
时,它编译并生成arith.ko
。当我插入它时没有在dmesg
中显示任何内容。当我插入其他模块dmesg
正常工作时。
arith.c:
extern void sum(void);
int init_module(void)
{
pr_info("module inserted..\n");
sum();
return 0;
}
void cleanup_module(void)
{
pr_info("module removed..\n");
}
sum.c:
void sum(void)
{
pr_info("sum of 1 and 2: %d\n", 1+2);
}
其他信息:
如果我在arith-y += sum.o
中发表评论Makefile
而未在sum
中调用arith.c
函数,dmesg
正常工作。
问题:
1.是否使文件正确?
2.如果它是正确的,为什么arith
模块在dmesg
中没有显示任何内容甚至其他模块工作正常?
3.如果不正确,如何写Makefile
以及为什么?
答案 0 :(得分:0)
宣布后,您永远不会引用obj-m
或arith-y
;所以他们要么:
make
知道的某种魔力(我怀疑),您可以通过内核树查看一个简单的makefile,您可以阅读并详细了解它。