问题标签 [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.
c - 替代 Kconfig(内核配置语言)来配置/描述大型 C 软件
我对大型 C 系统的配置/构建感兴趣...
Linux 内核使用Kconfig语言来描述各种配置选项(宏定义为 CONFIG_X)及其依赖关系......基本上,在每个目录中,都有一个 Kconfig 文件,其中包含在该子系统中定义的配置选项......
是否有任何替代方法来描述大型 C 系统(如 Apache 或 *-BSD)中的配置选项?人们一般使用什么?最佳做法是什么?
linux - 如何使用 make 和编译为 C99?
我正在尝试使用 Makefile 编译 linux 内核模块:
这给了我:
我需要切换到C99。阅读后我注意到我需要添加一个标志 -std=c99,不确定应该添加到哪里。
如何更改 Makefile 使其编译为 C99?
linux-kernel - 为什么我的 Kconfig 条目没有出现在 menuconfig 中?
我在驱动程序/媒体/视频/Kconfig 中有以下条目:
当我在 menuconfig 中搜索 VIDEO_OMAP3 时,我得到:
但是没有 menuconfig 选项。我可以通过修改 makefile 手动强制构建对象,但我想确保这不是更大问题的一部分。
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.c
和foo_linux.o
从编译…/checkout/src/linux-driver/foo_linux.c
?
linux - Kconfig 和 LKM
我正在内核树之外使用 LKM,我想为我的模块使用一些编译选项,例如 MYLKM_CONFIG_{something}。我知道这可以使用 C 预处理 (#define // #ifdef // #endif) 来完成。但我想知道是否可以为此目的使用 Kbuild(Kconfig 文件或相关文件)?..
还有一个问题。是否可以make menuconfig
仅针对我的模块,而不针对整个内核树?
谢谢。
makefile - 在makefile中包含目录
我正在 Ubuntu 中编译一个 C 文件,但在包含头文件时出现错误。我的 Makefile 如下:
但是,即使在CFLAGS
makefile 中包含该行之后,对于包含目录中存在的一个未包含的头文件,我也会收到错误消息。
还有其他方法吗,如何在makefile中包含头文件?
linux - 即使在声明中使用了 := ,Makefile 变量替换显然也没有完成
我有一个与其他内核模块通信的主内核模块。我已经构建了这样的模块(概念上):
由于这些是内核模块,我需要像这样编译它们:
但是,由于可以从以前的目录调用驱动程序的 Makefile,因此我需要$(shell pwd)
在调用其他 make(linux 的 make)之前执行此操作。所以 Makefile 现在看起来像这样:
到目前为止,一切都很好,而且效果很好。问题是这样的:我有一个驱动程序需要包含的文件,所以我必须给出包含路径。我第一次尝试
并立即明白为什么它不起作用(相对路径是 /lib/module/... 而不是当前目录)。所以我把它改成:
奇怪的是,这不起作用!如果我写
手动,它编译!有人可以解释我做错了什么吗?在调用 make 之前,我echo
ed $(CURRENT_DIR)
and$(MAIN_MODULE_HOME)
和变量是有意义的。
我知道这EXTRA_CFLAGS
不会立即被评估,但是因为CURRENT_DIR
和MAIN_MODULE_HOME
被声明,:=
我不明白事情是如何搞砸的。
(如果有人可以更好地表达问题标题,请这样做!)
linux - Linux Makefile 中的对象文件寻址
我正在 Linux 中编写一个简单的设备驱动程序。在makefile中,我们通常将第一行写为
hello
模块写在哪里。我在其他 makefile 中看到了+=
被替换的符号:=
和其他一些符号。两者之间有什么显着区别,还有哪些可能的选择?
linux-kernel - Kconfig 选择:未选择的选择显示为新的
我有以下 Kconfig 代码:
我的问题,每次我运行 make oldconfig 它都会说:
我检查了配置文件,它说
知道为什么未选择的选项总是显示为新的吗?
linux - 编译Linux内核时输出的CC、LD、CC[M]等代码是什么?
在从头开始编译 Linux 时,我意识到编译时会出现编译代码。
例如 CC 文件名、LD 文件名、CC[M] 文件名。
这些代码是什么意思?