问题标签 [kbuild]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1788 浏览

c - 替代 Kconfig(内核配置语言)来配置/描述大型 C 软件

我对大型 C 系统的配置/构建感兴趣...

Linux 内核使用Kconfig语言来描述各种配置选项(宏定义为 CONFIG_X)及其依赖关系......基本上,在每个目录中,都有一个 Kconfig 文件,其中包含在该子系统中定义的配置选项......

是否有任何替代方法来描述大型 C 系统(如 Apache 或 *-BSD)中的配置选项?人们一般使用什么?最佳做法是什么?

0 投票
3 回答
38399 浏览

linux - 如何使用 make 和编译为 C99?

我正在尝试使用 Makefile 编译 linux 内核模块:

这给了我:

我需要切换到C99。阅读后我注意到我需要添加一个标志 -std=c99,不确定应该添加到哪里。

如何更改 Makefile 使其编译为 C99?

0 投票
2 回答
4087 浏览

linux-kernel - 为什么我的 Kconfig 条目没有出现在 menuconfig 中?

我在驱动程序/媒体/视频/Kconfig 中有以下条目:

当我在 menuconfig 中搜索 VIDEO_OMAP3 时,我得到:

但是没有 menuconfig 选项。我可以通过修改 makefile 手动强制构建对象,但我想确保这不是更大问题的一部分。

0 投票
6 回答
20022 浏览

makefile - 在单独的对象目录中构建树外 Linux 内核模块

我正面临 Linux 内核构建系统(Kbuild,内核≥2.6.28)的目录结构和更大项目的构建系统。我们的项目包含一个 out-of-tree Linux 内核模块,我们的目录结构如下所示(显然是简化了):

构建过程不得修改下checkout的任何内容,构建模块不得修改下的任何内容tmp/linux-2.6.xx。所有输出文件必须以output/linux-arm-debug(或在构建时选择的任何架构和调试变体)结束。

我已经阅读kbuild/modules.txt,并开始编写我的Kbuild文件:

这处理将对象文件存储在与所在位置不同的目录中Kbuild。现在我如何指定foo_common.o需要从…/checkout/src/common/foo_common.cfoo_linux.o从编译…/checkout/src/linux-driver/foo_linux.c

0 投票
1 回答
823 浏览

linux - Kconfig 和 LKM

我正在内核树之外使用 LKM,我想为我的模块使用一些编译选项,例如 MYLKM_CONFIG_{something}。我知道这可以使用 C 预处理 (#define // #ifdef // #endif) 来完成。但我想知道是否可以为此目的使用 Kbuild(Kconfig 文件或相关文件)?..

还有一个问题。是否可以make menuconfig仅针对我的模块,而不针对整个内核树?

谢谢。

0 投票
1 回答
1722 浏览

makefile - 在makefile中包含目录

我正在 Ubuntu 中编译一个 C 文件,但在包含头文件时出现错误。我的 Makefile 如下:

但是,即使在CFLAGSmakefile 中包含该行之后,对于包含目录中存在的一个未包含的头文件,我也会收到错误消息。

还有其他方法吗,如何在makefile中包含头文件?

0 投票
2 回答
2767 浏览

linux - 即使在声明中使用了 := ,Makefile 变量替换显然也没有完成

我有一个与其他内核模块通信的主内核模块。我已经构建了这样的模块(概念上):

由于这些是内核模块,我需要像这样编译它们:

但是,由于可以从以前的目录调用驱动程序的 Makefile,因此我需要$(shell pwd)在调用其他 make(linux 的 make)之前执行此操作。所以 Makefile 现在看起来像这样:

到目前为止,一切都很好,而且效果很好。问题是这样的:我有一个驱动程序需要包含的文件,所以我必须给出包含路径。我第一次尝试

并立即明白为什么它不起作用(相对路径是 /lib/module/... 而不是当前目录)。所以我把它改成:

奇怪的是,这不起作用!如果我写

手动,它编译!有人可以解释我做错了什么吗?在调用 make 之前,我echoed $(CURRENT_DIR)and$(MAIN_MODULE_HOME)和变量是有意义的。

我知道这EXTRA_CFLAGS不会立即被评估,但是因为CURRENT_DIRMAIN_MODULE_HOME被声明,:=我不明白事情是如何搞砸的。

(如果有人可以更好地表达问题标题,请这样做!)

0 投票
1 回答
229 浏览

linux - Linux Makefile 中的对象文件寻址

我正在 Linux 中编写一个简单的设备驱动程序。在makefile中,我们通常将第一行写为

hello模块写在哪里。我在其他 makefile 中看到了+=被替换的符号:=和其他一些符号。两者之间有什么显着区别,还有哪些可能的选择?

0 投票
2 回答
2308 浏览

linux-kernel - Kconfig 选择:未选择的选择显示为新的

我有以下 Kconfig 代码:

我的问题,每次我运行 make oldconfig 它都会说:

我检查了配置文件,它说

知道为什么未选择的选项总是显示为新的吗?

0 投票
3 回答
12560 浏览

linux - 编译Linux内核时输出的CC、LD、CC[M]等代码是什么?

在从头开始编译 Linux 时,我意识到编译时会出现编译代码。

例如 CC 文件名、LD 文件名、CC[M] 文件名。

这些代码是什么意思?