问题标签 [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 回答
6981 浏览

linux-kernel - 在 Linux 内核的 Kconfig 中添加编译时定义

我知道有一个选项可以将编译时宏/定义添加到可在代码中使用的 Kconfig 文件。

(例如,一些常量的定义,如#define)。

0 投票
1 回答
286 浏览

gcc - 避免使用 kbuild 在 LKM 中创建调试信息

我正在从一个大的 C 文件(>50 000 LOC)构建 Linux 内核模块(LKM)。这是一些生成的 RAID 计算代码。当我尝试从 kbuild 构建它时,gcc 会吃掉所有内存并崩溃,而手动调用 gcc 可以正常工作。

从手动 gcc 和 kbuild 检查目标文件后,我发现 kbuild 目标文件比手动 gcc 对象大 20-30 倍(900k vs 30M)。原因是 kbuild 目标文件包含带有大量数据的巨大部分 debug_info。

这是来自的片段objdump -x

我已经试过EXTRA_CFLAG += -S了,没有运气。

那么有什么方法可以避免在使用 kbuild 构建时在我的目标文件中创建调试信息?

0 投票
4 回答
210 浏览

c - 如何在大型 C 代码库中创建头文件?

我知道如何编写 .h 文件并包含警卫。我想编写一个包含全局变量的新 bar123.h 文件。假设 bar123.c 不存在。

其他头文件,例如 bar.h 将包括 bar123.h,以使全局变量在需要它们的地方可见。

一个问题是,如果 foo.c 包含 foo.h,而 foo.h 又包含 bar.h,而 bar.h 又包含 bar123.h,那么 foo.c 是否总是包含 bar123.h?

另一个问题是,我应该如何修改 Makefile 和 Kbuild 文件?

我正在寻找一个简单的黑客解决方案。

0 投票
2 回答
548 浏览

c - 添加用户空间头文件以制作文件

我正在使用 make 构建一个 linux 设备,我需要在我的设备中使用 string.h。我试图添加 /usr/include 来制作文件,但它不起作用。任何人都可以帮助我添加另一个包含路径来制作文件。我的制作文件是

0 投票
3 回答
4890 浏览

linux-kernel - 将内核模块与静态库链接

我正在尝试将我的内核模块与外部静态库链接,如下所示:

出于某种原因,上面的 Makefile 根本不编译 my_prog.c,并且生成的模块不包含它的代码。当然,如果我删除my_prog-objs行,my_prog.c就会被编译。

Makefile 中的这种方法有什么问题?

0 投票
1 回答
343 浏览

linux - kconfig语言可以安装在mac OS上吗

我必须使用 Kconfig 来做一个项目,但似乎这些东西只能在 Mac OS 上运行。我不知道是否有在 MAC OS 上安装 Kconfig 的工具。

0 投票
1 回答
605 浏览

makefile - 了解 kbuild 构建过程是如何工作的

我熟悉 make 和 kbuild,以及构建系统的工作原理。但是我很难理解对象目标是如何构建的!?

例如,在 Kbuild 中,如果你想在一个目录中生成一个目标文件,你将有一个 makefile,它包含以下内容:

这评估obj-y/m并添加foo.o到它,我认为这个构建文件是使用调用submake的,然后主makefile将使用或者(取决于你正在构建的方式/内容)生成所有对象目标,对吗?obj-yobj-m

我的问题是,通常你可以从主 makefile/build 文件传递​​到它的 submake(即export),但是这个obj-y变量是在很多地方定义的,那么它的值是如何在所有这些submake调用中构造或跟踪的?

0 投票
0 回答
86 浏览

linux - 在构建内核模块时添加对另一个模块的依赖

我正在尝试使用从另一个内核模块编写的外部模块。第二个模块是来自伯克利实验室检查点/重启的 cr_module)。

因此,我创建了一个模块 A,它导出了一些函数,然后创建了另一个使用 A 函数的模块 B。我安装了模块 A 以便它的头文件与 linux 源代码中的其余头文件一起使用。当我将 Module.symvers 文件从模块 A 源复制到模块 B 源时,模块 B 不能包含标题并链接到模块 A 的函数。这样一切顺利。

但是,由于 blcr 使用 automake 和 autconf 我无法弄清楚如何告诉 kbuild 使用模块 A 的功能。我将模块 A 的 Module.symvers 复制到 blcr 中的所有子目录,但它仍然无法链接到这些函数。不知何故 modpost 看不到这个文件 (Module.symvers)。

任何帮助解决这个问题?

谢谢。

0 投票
1 回答
1375 浏览

bash - lxdialog 和 kconfig (menuconfig) 如何协同工作?

我想了解 menuconfig 是如何完成的,例如:对于 linux-kernel 或 Buildroot。我所知道的是,它使用 lxdialog 作为 GUI,并且 kconfig 以某种方式承载了逻辑部分(如选择、依赖等)。

但是对话框在哪里或如何从 kconfig 文件中获取信息?互联网上似乎没有太多信息。

感谢您的支持

[我发现了什么:]

我相信kconfiglib用于加载菜单,但没有给出示例,这是如何完成的:/

0 投票
0 回答
1019 浏览

c - 在内核模块代码中重新定义宏警告

我正在学习初学者的内核模块练习。在几个来源中,他们定义了以下宏:

但是 kbuild 警告:

所以我的问题是:

  1. 无论如何,这些定义是什么?
  2. 为什么“重新定义”需要警告?仅仅是因为通常它暗示宏的先前(期望)值已被覆盖?
  3. 为什么不把这些定义放在#ifndef块中呢?