【发布时间】:2012-01-22 21:56:07
【问题描述】:
对于一个学术项目,我希望将源文件 (myfile.c) 添加到 kernel/ 目录,与 exit.c 和 fork.c 相同的目录。构建系统似乎不会自动获取新文件,因为我在myfile.c 中定义的函数中遇到“未定义引用”链接错误。我怎样才能合并这个文件?
【问题讨论】:
标签: kernel
对于一个学术项目,我希望将源文件 (myfile.c) 添加到 kernel/ 目录,与 exit.c 和 fork.c 相同的目录。构建系统似乎不会自动获取新文件,因为我在myfile.c 中定义的函数中遇到“未定义引用”链接错误。我怎样才能合并这个文件?
【问题讨论】:
标签: kernel
您需要将相应的目标文件添加到kernel/Makefile。如果您的代码有一个配置变量,那么您将使用:
obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o
如果您在没有配置变量的情况下构建代码,那么您只需将其添加到 obj-y 变量中:
obj-y += zerostimulus.o
配置变量扩展为y、m 或n,具体取决于该功能是内置的、作为模块构建的还是关闭的。然后obj-y,obj-m,变量就建好了。
【讨论】:
没错!
只是一个附录:在构建内核之前,您知道运行“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 文件,你也会发现设置依赖是多么容易。
最好的问候, /天使
【讨论】: