问题标签 [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-kernel - 在 Linux 内核的 Kconfig 中添加编译时定义
我知道有一个选项可以将编译时宏/定义添加到可在代码中使用的 Kconfig 文件。
(例如,一些常量的定义,如#define)。
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 构建时在我的目标文件中创建调试信息?
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 文件?
我正在寻找一个简单的黑客解决方案。
c - 添加用户空间头文件以制作文件
我正在使用 make 构建一个 linux 设备,我需要在我的设备中使用 string.h。我试图添加 /usr/include 来制作文件,但它不起作用。任何人都可以帮助我添加另一个包含路径来制作文件。我的制作文件是
linux-kernel - 将内核模块与静态库链接
我正在尝试将我的内核模块与外部静态库链接,如下所示:
出于某种原因,上面的 Makefile 根本不编译 my_prog.c,并且生成的模块不包含它的代码。当然,如果我删除my_prog-objs
行,my_prog.c
就会被编译。
Makefile 中的这种方法有什么问题?
linux - kconfig语言可以安装在mac OS上吗
我必须使用 Kconfig 来做一个项目,但似乎这些东西只能在 Mac OS 上运行。我不知道是否有在 MAC OS 上安装 Kconfig 的工具。
makefile - 了解 kbuild 构建过程是如何工作的
我熟悉 make 和 kbuild,以及构建系统的工作原理。但是我很难理解对象目标是如何构建的!?
例如,在 Kbuild 中,如果你想在一个目录中生成一个目标文件,你将有一个 makefile,它包含以下内容:
这评估obj-y/m
并添加foo.o
到它,我认为这个构建文件是使用调用submake
的,然后主makefile将使用或者(取决于你正在构建的方式/内容)生成所有对象目标,对吗?obj-y
obj-m
我的问题是,通常你可以从主 makefile/build 文件传递到它的 submake(即export
),但是这个obj-y
变量是在很多地方定义的,那么它的值是如何在所有这些submake
调用中构造或跟踪的?
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)。
任何帮助解决这个问题?
谢谢。
bash - lxdialog 和 kconfig (menuconfig) 如何协同工作?
我想了解 menuconfig 是如何完成的,例如:对于 linux-kernel 或 Buildroot。我所知道的是,它使用 lxdialog 作为 GUI,并且 kconfig 以某种方式承载了逻辑部分(如选择、依赖等)。
但是对话框在哪里或如何从 kconfig 文件中获取信息?互联网上似乎没有太多信息。
感谢您的支持
[我发现了什么:]
我相信kconfiglib用于加载菜单,但没有给出示例,这是如何完成的:/
c - 在内核模块代码中重新定义宏警告
我正在学习初学者的内核模块练习。在几个来源中,他们定义了以下宏:
但是 kbuild 警告:
所以我的问题是:
- 无论如何,这些定义是什么?
- 为什么“重新定义”需要警告?仅仅是因为通常它暗示宏的先前(期望)值已被覆盖?
- 为什么不把这些定义放在
#ifndef
块中呢?