问题标签 [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 - 内核模块源代码的正确功能检查
场景 1:我正在尝试IBM
GPFS
使用 vanilla 内核 3.10(实际上kernel-lt
来自 Elrepo)将驱动程序安装到 RHEL6 上。GPL 部分由于以下原因无法编译:
- 传递给函数的参数太多/太少
- struct x 没有这样的成员
- 类型不匹配
他们的代码在比我的旧或新的 RHEL/Suse 内核上编译得很好,但在这里失败了。
场景 2:
我正在尝试使用股票内核编译开源softiwarp
驱动程序RHEL6
,但它失败并出现与场景 1 相同的错误。但是,它在 vanilla 内核上编译得很好。
这一切都是因为它们的功能检查标头如下所示:
但是 RHEL 和 Suse 有许多向后移植和错误修复,所以它们3.10.101
与 vanilla 不同3.10.101
。
如何编写将检查功能而不是版本号的代码?在用户空间程序中,我会使用 autoconf 宏AC_CHECK_MEMBER
/AC_CHECK_FUNC
linux-kernel - 使 oldconfig 进入没有提示
我正在make oldconfig
对具有CONFIG_FOO=y
. kconfig 条目定义FOO
为bool
,没有提示。似乎 make oldconfig 清除了该条目。如果我向 中添加提示FOO
,则保留该值。我猜这是预期的行为,但我没有找到任何说明它应该如何工作的文档。有人可以确认这是应该发生的吗?
(kconfig 文件看起来像:)
c - 从多个文件编译内核模块时未编译主文件
首先我想说我一直在寻找类似的问题以及解决方案是什么。我发现它是:
但这对我不起作用...
这是整个项目的源代码:
轴控制器.h:
轴控制器.c:
CNC_controller.c:
生成文件:
这是构建过程:
当我删除线
构建过程是:
这就是为什么我认为它没有编译的原因,因为它记录了 printk 错误:
任何线索我做错了什么?因为我做了我看到其他人正在做的事情......
kernel-module - Linux 源代码中的错误?
我正在尝试为外部系统编写内核模块。为此,我使用了该内核的 .config 文件并在我的开发计算机上重建了源代码。然后我编写了一个使用以下行的makefile:
为了构建目标的模块。我的内核源代码除了对 module.h 和 kernel.h 的包含,还有一个 init_module 和 cleanup_module,每个都带有一个 printk。我成功地为我的开发计算机构建了它,所以我知道这没有错误。
当我尝试为我的目标构建时,我遇到了几个错误。生成 Linux 源代码时会出错吗?运行 make 后,我没有对 Linux 源目录进行任何修改。
这是我尝试构建内核的输出:
我达到了字数限制,所以我不能发布整个内容,但这是大部分内容。
我应该提一下:我的目标系统是 ARM 处理器,我正在使用 Debian 在 x86 64 位 VM 上构建。我已将 CROSS_COMPILER 和 PATH 设置为引用我尝试使用的 arm-xilinx-linux-gnueabi-gcc 编译器。
在指出以上内容是从我的源目录中的 x86 源中提取之后,我尝试将 ARCH=arm 添加到 make 命令中,这给出了以下错误:
在我搜索的其他一些问题中,我看到答案说“错误:无法识别的命令”可能意味着我使用了错误的编译器,但我指定应该使用 arm-xilinx-linux-gnueabi-gcc,应该是据我所知,一个合适的 ARM 编译器。
linux-kernel - 如何在 Kbuild 中添加对生成的源文件的依赖?
让我们generate_testapi.py
成为我的 Linux 内核模块源代码树中的一个脚本,它摄取mymod_test.h
并生成一个面向用户空间的接口源文件(ioctl、debugfs,你可以命名它),并命名为$(obj)/mymod_test_interfaces.gen.c
.
在 Kbuild makefile 中,让mymod-y
成为包含构成模块的目标文件列表的变量,即
Kbuild-ish 规则是什么样子的,它将从生成源编译的目标文件添加为 mymod 的依赖项并描述生成过程。
以下,我对这样一个规则集的第一次天真尝试是行不通的。
尝试这样make
做,导致的错误是,没有规则可以制定 mymod_test_interfaces.gen.o
。
更新(由于 Alexandre Belloni 的评论)
是的,我还尝试了形式的生成器规则
结果相同,即它不起作用。
c - 如何正确链接 KBuild Makefile 以在内核模块中构建子文件夹
我有一个内核模块(通常使用 CONFIG_MYMODULE=m 编译),其设置如下:
目前正在使用的是:
我的模块/生成文件:
../foo/Makefile:
在我拥有的每个组件文件夹中:
../foo/component1/Makefile
这绝对不是解决此问题的正确方法,因为所有内容都直接包含在 mymodule/Makefile 中,因此无法设置特定于文件夹的 gcc 标志。
在将所有内容构建到单个内核模块中的同时组织它的正确方法是什么?我已经阅读了 kbuild/modules.txt 文档,但我没有看到任何直接相关的内容,我无法完全弄清楚如何去做或者它是否确实可能。
谢谢
我尝试了以下方法,但出现以下错误:
“ld:找不到 foo:文件格式无法识别”
我的模块/生成文件:
../foo/Makefile
../foo/component1/Makefile
../foo/component2/Makefile
如果我将其更改为使用 obj-y += ../foo 而不是 mymodule-y += ../foo 它至少进入文件夹,但似乎没有尝试编译,我希望这是所有单个内核模块的一部分。
linux - 如何像在 cmake 中一样创建 linux 内核的 .config
我正在开发一个项目,该项目将具有一些可以根据客户打开/关闭的功能。我知道 cmake 具有“选项”语法,但假设我有几个不同的项目可能具有不同的功能,我如何为每个项目创建预定义的配置,这类似于 linux 内核中的默认配置
项目A:feature1 ON feature2 OFF feature3 OFF
项目 B:feature1 关闭 feature1 关闭 feature1 关闭
当然会有数百个这样的功能....我知道我可以在调用 cmake 时将其添加为参数,但如果我有数百个并且不容易阅读,那就不实用了
谢谢
c - 如何将板文件添加到 Linux 内核以及在“make menu config”中的何处找到它?
我需要将一些特定于板的代码添加到我正在构建的 Linux 内核中。
(我知道我应该已经在使用设备树了,但是我受到启发的驱动程序没有,而且我已经在早餐前学习了十几个新东西。添加设备树还将为调试添加另一组更改。一旦我的平台驱动程序/驱动程序使用板文件工作,我会将它们转换为设备树。)
我有一个名为arch/arm/myboard/myboard.c
.
我在哪里可以找到现有的板文件make menuconfig
?(如http://lxr.free-electrons.com/source/arch/arm/mach-imx/mach-mx31ads.c?v=4.4?)
我如何让我的董事会也出现在这里。
linux-kernel - 如何从 Kbuild Kconfig 文件中的另一个选项中选择字符串选项的值?
对于布尔配置,我使用的是 select。有没有类似的字符串?
最终,我想要类似的东西:
ubuntu - 如何识别给定 CONFIG_* 名称的 *.ko 文件?
我启用了几个新的内核模块作为可加载的(m
而不是内置的y
),但不明白 CONFIG 如何映射到 .ko 文件。