对于学术项目,我希望将源文件(myfile.c)添加到kernel/
目录,与exit.c
和fork.c
相同的目录。构建系统似乎没有自动获取新文件,因为我正在向myfile.c
中定义的函数发出“未定义引用”链接错误。我怎么能把这个文件合并?
答案 0 :(得分:7)
您需要将相应的对象文件添加到kernel/Makefile
。如果您的代码有配置变量,那么您将使用:
obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o
如果您在没有配置变量的情况下构建代码,那么您只需将其添加到obj-y
变量中:
obj-y += zerostimulus.o
配置变量会扩展为y
,m
或n
,具体取决于功能是内置功能,构建为模块还是关闭功能。然后构建obj-y
,obj-m
变量。
答案 1 :(得分:3)
没错!
只是一个附录:在构建内核之前,您知道运行“make menuconfig
”可以设置将构建内核映像的哪些功能( y ),这将是启用为可加载模块( m )且不会启用( n )。
如果您希望能够为新功能设置它,则可以编辑您在新文件的同一文件夹中找到的 Kconfig 文件。在您的情况下,“linux-x.y.z/kernel/Kconfig
”
这是一个例子:
config ZERO_STIMULUS_FEATURE
tristate "My new feature"
default m
---help---
This is my brand new feature
Here's a multi-line description
通常的错误是设置“config CONFIG_ZERO_STIMULUS_FEATURE
”而不是“config ZERO_STIMULUS_FEATURE
”:不要在此添加前缀“CONFIG_
”
如果您的功能无法作为模块加载,则必须使用“bool
”关键字而不是“tristate
”。看看其他Kconfig文件,你也会看到设置依赖项是多么容易。
祝你好运, /天使