我有一个内核模块(通常使用 CONFIG_MYMODULE=m 编译),其设置如下:
mymodule/Makefile
../foo/Makefile
../foo/component1/Makefile
../foo/component2/Makefile
目前正在使用的是:
我的模块/生成文件:
mymodule-y += mod1file.o mod2file.o mod3file.o #etc
include ../foo/Makefile
mymodule-y += $(FOO_FILES)
obj-$(CONFIG_MYMODULE) += mymodule.o
../foo/Makefile:
include component1/Makefile
include component2/Makefile
在我拥有的每个组件文件夹中:
../foo/component1/Makefile
FOO_FILES += foo1file.o foo2file.o foo3file.o #etc
这绝对不是解决此问题的正确方法,因为所有内容都直接包含在 mymodule/Makefile 中,因此无法设置特定于文件夹的 gcc 标志。
在将所有内容构建到单个内核模块中的同时组织它的正确方法是什么?我已经阅读了 kbuild/modules.txt 文档,但我没有看到任何直接相关的内容,我无法完全弄清楚如何去做或者它是否确实可能。
谢谢
我尝试了以下方法,但出现以下错误:
“ld:找不到 foo:文件格式无法识别”
我的模块/生成文件:
mymodule-y += mod1file.o mod2file.o mod3file.o #etc
mymodule-y += ../foo/
obj-$(CONFIG_MYMODULE) += mymodule.o
../foo/Makefile
ccflags-y := -I$(src)/component1/ -I$(src)/component2/
foo-y := foo1file.o foo2file.o foo3file.o
foo-y += component1
foo-y += component2
../foo/component1/Makefile
component1-y := component1file.o component1file.o
../foo/component2/Makefile
component2-y := component2file.o component2file.o
如果我将其更改为使用 obj-y += ../foo 而不是 mymodule-y += ../foo 它至少进入文件夹,但似乎没有尝试编译,我希望这是所有单个内核模块的一部分。