gpt4 book ai didi

build-process - 在构建 linux 内核时了解要编译的文件

转载 作者:行者123 更新时间:2023-12-04 07:07:30 27 4
gpt4 key购买 nike

我想知道一旦配置了内核,是否可以知道要编译哪些文件以及以什么顺序编译?

我想知道这一点,因为我对根据架构的构建过程的变化感兴趣,并且我不想拥有与架构一样多的工具链......

谢谢

最佳答案

完全重新编辑:

您可以修改内核源代码中的 Make 进程以使用

-n, --just-print, --dry-run, --recon

这样做的最终结果是永远不会调用编译器或任何可执行文件。它只是伪造它并告诉你它会做什么。

选项并从中 grep 文件而不构建源代码。这可能就像在 shell 中设置 MAKE 环境以使用上述选项一样简单。然后只需 grep 出所有涉及 .c 和 .h 文件的编译器命令。下载 2.6.29.2 的内核源代码以了解如何执行此操作。编辑来。

祝你好运

回复你的进展情况。也许发布shell脚本! :)

跟进 :

2.6.29.2 内核源代码的第 13 行包含在/2.6.19.2/Makefile
# Do not:
# o use make's built-in rules and variables
# (this increases performance and avoids hard-to-debug behaviour);
# o print "Entering directory ...";
MAKEFLAGS += -rR --no-print-directory

# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.

编辑 MAKEFLAGS包含dryrun标志的变量应该允许您保存特定make配置的输出,然后稍后对其进行grep。 ala make > save.txt

我把我的改成
MAKEFLAGS += -rR --no-print-directory --just-print

例如(可能会更好):
[aiden@host linux-2.6.29.2]$ \
make > build_out.txt; grep -o -E "[a-zA-Z0-9_-]+\.[ch]" build_out.txt

不完美,但以一种骇人听闻的方式为我工作,应该让你继续前进。相同的基本过程有望通过配置内核的盲目制作。

警告
在不维护特定于架构的工具链或在目标架构上运行 Make 的情况下,某些 ASM 和特定于架构的文件与真正的构建不同。

从评论编辑

要抑制 ld 失败,您需要在内核 make 文件中找到以下部分(或类似部分)。
# Make variables (CC, etc...)

AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar

您需要运行配置步骤来配置源代码,然后再尝试枚举前面步骤中使用的源文件(管道和 grepping 从试运行),因此您可以在 Makefile.enum 中进行编辑并在运行正常的配置步骤后使用它(无论架构如何,都需要生成一些 config.h 类型的文件。因此,将内核源代码获取到您即将进行实际编译、模块和所有内容的地步)。哇!

现在,当您进行伪造以枚举源文件时,发布内核源配置(指定驱动程序/模块等)LD 将失败,正如您所发现的那样。您可以从
LD              = $(CROSS_COMPILE)ld


LD              = -$(CROSS_COMPILE)ld

注意“-”字符。这告诉 Makefile 忽略警告。显然,您尝试做的事情是不寻常的,但非常酷:) 可以通过查找 Makefile 部分并调整执行的命令来抑制进一步的错误。我建议您对 Makefiles 非常友好,因为您可能需要稍后更改 IF 语句。整理完所有内容后,您将拥有一个“哑”的 makefile,它将吐出 .c 文件,因此您可以执行
make | grep -E "[a-zA-Z0-9_-]+\.[ch]"

管他呢。

我还有一个很酷的建议来验证你的结果......实际构建内核......但使用 Linux 的 inotify API(你可以在此处获取 Python 绑定(bind) http://pyinotify.sourceforge.net/)并在编译窗口中观察文件系统事件(例如 . gcc 正在读取的 c 文件)。然后将其与“哑”makefile 中的列表进行比较。

好吧,我希望这不是太多的华夫饼! 祝你好运

关于build-process - 在构建 linux 内核时了解要编译的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com