问题标签 [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.
linux - 内核 makefile 中的以下几行是什么意思?
以下代码摘自内核源码
c - 编译linux内核时展开单个文件的宏
我对扩展单个 Linux 内核文件 (arch/x86/kernel/nmi.c) 的宏很感兴趣。我知道通常可以使用 gcc -E 来扩展宏。然而,由于该文件是 Linux 内核的一部分,因此需要将许多选项传递给 gcc。然后我试图修改内核 Makefile 以传递 -E 标志。
我目前正在修改 /arch/x86/kernel/Makefile,它是用于编译 nmi.c 并通过 make M=arch/x86/kernel 调用这个特定的子 Makefile
我发现可以使用 CFLAGS_nmi.o 传递额外的 gcc 标志。但是将 CFLAGS_nmi.o := -E 添加到 Makefile 并没有预期的效果
这是修改Makefile后的输出
我希望在“CC arch/x86/kernel/nmi.o”行之后扩展代码。我还尝试了“CFLAGS_nmi.o := -E > nmi.out”来尝试重定向输出,但生成的文件是空的。
makefile - LDFLAGS 和 ldflags-y 的区别
kbuild文档说:
ldflags-y... [适用] 仅适用于分配它们的 kbuild makefile.... [用于] 在递归构建期间发生的所有 ld 调用。
尽管
LDFLAGS... [用于] 链接器的所有调用。
m
给定一个 Makefile (我们输入make m
),我看不出它们之间有什么区别
- 假设
LDFLAGS := x
,因为它适用于链接器的所有调用,所以在从 开始的ld
任何构建会话中调用的所有都make m
具有x
LDFLAGS
- 假设
ldflags-y := y
,因为如果适用于 的所有递归调用ld
,则所有ld
调用(由从 开始的任何构建会话make m
)也y
具有LDFLAGS
这种解释正确吗?
linux-kernel - kbuild 设置的 Linux 内核 #ifdef 指令可用?
是否有#ifdef
用于条件编译的 Linux 内核指令,由内核构建系统 (kbuild) 设置?
用例:
我有一个源代码文件,其中包含 SoC 的寄存器映射条目以及内核驱动程序使用的功能。用户空间程序也应包含此文件以使用寄存器映射条目:
我的头文件.h:
或者也许这个用例还有其他解决方案?
kernel-module - 当内核构建在树外时如何交叉编译外部内核模块?
在 x86_64 主机上,我为树外的 ARM 目标交叉编译了 Linux 内核。所以我有两个目录:
- ~/kernel_git_repo/ - 仅包含内核源代码
- ~/kernel_buld_dir/ - 包含 .config 文件和构建的内核对象
在第三个目录中
- ~/external_module - 外部内核模块的来源
我有一个带有 Makefile 的外部模块的源代码。
树内构建内核的“通常”命令是:
对于我的树外构建的内核, ~/kernel_git_repo/ 和 ~/kernel_buld_dir/ 都不能作为<path-to-compiled-src-code>
. 似乎 make 命令需要带有Kbuild基础设施的内核源代码库和.config
带有文件和对象的构建目录。
在这种情况下,在 ~/external_module/Makefile 中用于构建模块的 make 命令是什么?
c - helloworld 内核模块中的 insmod 错误:模块格式无效
我正在交叉编译一个 helloworld 内核模块
我的文件是:
你好-1.c
KBuild
生成文件
这是我的终端输出,在 insmod 命令中显示错误:
但是当我在makefile下面的行评论时,一切都很好。
对于像这样的简单代码,我可以删除这个标志。但在另一个我应该使用 -fPIC 标志的代码中,我有同样的错误
我该如何解决?
makefile - 如何在 Makefile 中添加多个 Headers 文件路径?
我正在尝试编译 uleds.c 驱动程序,该驱动程序包含该路径下存在的多个文件:
/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux
我现在想修改我的 Makefile 并添加这个路径,这样我就可以正确编译 uleds.c
这是我的 Makefile :
有什么建议吗?谢谢
kbuild - Kbuild 可以一次为多个内核构建一个模块吗?
大致:针对 /lib/modules 中列出的所有内核构建
例如:
现在我有一个普通的 KBuild 并使用 -C 传递内核模块的位置,如下所示。
有没有办法将多个内核头文件传递到 Kbuild 的 -C 中?
c - 为什么我们没有ccflags-m,而是ccflags-y?
我正在分析 Linux KernelMakefile
的捆绑包。我们可以定义一个额外的编译器标志来构建外部模块ccflags-y += -std=gnu11 -Wno-declaration-after-statement -Werror
。我查看了Makefile.build
哪个外部模块构建下降,甚至没有注意到ccflags-m
定义的选项。完整的选项列表:
据我了解y
, m -m
用于kbuild
可加载模块, y - 用于内置模块。ccflags-y
所以用, not来指定编译器选项似乎不合逻辑ccflags-m
。
问题:为什么没有ccflags-y
可加载模块的-m
对应项?ccflags-m
c - Linux Kernel Makefile.build 构建外部模块时的奇怪行为
我需要一些KBuild
与构建外部模块相关的实施细节建议。
Linux Kernel 5.0.0-32
这是我的LKM
Makefile:
查看scripts/Makefile.build
带有选项的调试输出的实现和打印,-d
我发现正在执行的这个makefile的目标是__build
:
由于我正在构建外部 LKM,因此唯一的先决条件是$(obj-m)
和$(modorder-target)
. 我从数据库中得到了它们的值:
所以要执行__build
先决条件/home/memyself/lkm/procfs_write_perm/pfsw.o
必须首先构建。中定义了以下$(obj)/%.o:
模式规则Makefile.build
:
我添加了调试输出以打印目标自动变量的名称:
并期望/home/memyself/lkm/procfs_write_perm/pfsw.o
被打印,但实际上/home/memyself/lkm/procfs_write_perm/src/init.o
被打印了。这看起来像一些魔法......
问题:为什么构建目标/home/memyself/lkm/procfs_write_perm/pfsw.o
会导致构建/home/memyself/lkm/procfs_write_perm/src/init.o
?它在代码中的哪个位置指定?
我知道有一个real-obj-m
包含确切值的变量,但是grep
根据某些东西我没有找到它的代码库...