在Linux模块中包含自定义标头

时间:2013-10-15 13:37:50

标签: c linux makefile kernel-module

在有人指出这一点之前,类似的问题在此之前得到了解答: Compiling Linux Kernel Module With A Custom Header

我有同样的问题。我创建了自己的结构和函数集,并在C文件中定义它们。然后我创建了一个同名的头文件,并将其包含在一个模块中。然后我创建了Makefile:

obj-m += themodule.o
themodule-objs := the-module.o my-code.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

我的自定义文件是my-code.c和my-code.h。

当我尝试编译模块时,我收到了大量的警告,告诉我my-code.c中的所有函数都未在 - module.c中定义。当我尝试加载模块时,我收到错误,告诉我函数调用my-code.c是“未知符号”。我尝试了链接问题中提到的解决方案(请参阅Makefile),但这对我没有帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

themodule-objs 中的顺序很重要。试试这个:

obj-m += themodule.o
themodule-objs := my-code.o the-module.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