编译模块时清空Module.symvers文件

时间:2014-07-03 16:33:00

标签: c linux-kernel kernel kernel-module

我正在编写一个自定义内核模块(让我们称之为mod1),我想导出函数以便在其他模块中使用(让我们调用那些mod2等...) 。在编译其他模块时,我收到有关未定义符号的警告消息(mod1中的函数)。虽然一切都应该在加载后正常工作,但我喜欢在没有警告的情况下编译。我读到我应该将mod1& Module.symvers的路径添加到KBUILD_EXTRA_SYMBOLS但是,我注意到我的Module.symvers文件是空的。我做错了什么?

这是模块的MWE:

#include <linux/module.h>

MODULE_INFO(version, "0.1");
MODULE_AUTHOR("Me");
MODULE_LICENSE("GPL");

int foo(int x) {
    return x;
}
EXPORT_SYMBOL_GPL(foo)

和Makefile:

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我运行make显示Module.symvers为空:

user@host:~/mwe$ make; [[ -s ./Module.symvers ]] || echo "File size is zero!"
make -C /lib/modules/3.13.0-30-generic/build M=/home/user/mwe modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-30-generic'
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-30-generic'
File size is zero!

我不确定自己做错了什么,因此我找不到答案。

1 个答案:

答案 0 :(得分:2)

看起来Makefile不正确。您要编译的文件的名称在哪里?将test.o更改为您的文件名。

生成文件:

obj-m += test.o

all:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean