Kernel 内核:如何为内核构建添加新的源文件?

Kernel 内核:如何为内核构建添加新的源文件?,kernel,Kernel,对于一个学术项目,我希望将一个源文件(myfile.c)添加到kernel/目录,与exit.c和fork.c目录相同。生成系统似乎不会自动拾取新文件,因为我遇到了指向myfile.c中定义的函数的“未定义引用”链接错误。如何合并此文件?您需要将相应的对象文件添加到内核/Makefile。如果您的代码有一个配置变量,那么您将使用: obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o 如果在代码中构建时没有配置变量,则只需将其添加到obj-

对于一个学术项目,我希望将一个源文件(myfile.c)添加到
kernel/
目录,与
exit.c
fork.c
目录相同。生成系统似乎不会自动拾取新文件,因为我遇到了指向
myfile.c
中定义的函数的“未定义引用”链接错误。如何合并此文件?

您需要将相应的对象文件添加到
内核/Makefile
。如果您的代码有一个配置变量,那么您将使用:

obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o
如果在代码中构建时没有配置变量,则只需将其添加到
obj-y
变量:

obj-y += zerostimulus.o
配置变量扩展为
y
m
n
,具体取决于功能是内置的、作为模块内置的还是关闭的。然后构建了
obj-y
obj-m
,变量。

没错

只是一个补充:在构建内核之前,您知道运行“
makemenuconfig
”可以设置将在内核映像(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-stimultium\u-FEATURE
”而不是“
config-ZERO-stimultium\u-FEATURE
”:不要在这里添加前缀“
config\u

如果功能不能作为模块加载,则必须使用“
bool
”关键字,而不是“
tristate
”。看看其他Kconfig文件,您还将看到设置依赖项是多么容易

致以最良好的祝愿, /天使