gpt4 book ai didi

c - 使用 -save-temps 构建内核 - 这些 9 MB 的 *.i 文件是全部吗?

转载 作者:行者123 更新时间:2023-12-04 08:21:23 24 4
gpt4 key购买 nike

我正在使用 gcc 选项构建 Linux 内核 -save-temps=obj -o为了准确了解所有 C 文件是如何被预处理的(以及,作为奖励,文件是如何变成汇编的)。
以下是版本详情:

  • 在 Windows 10 版本 1909(内部版本 18363.1256)上运行 WSL 2
  • 发行版是 Ubuntu 20.04 LTS
  • 安装的内核版本为 4.19.128-microsoft-standard
  • 我使用的内核树来自 https://github.com/microhobby/linus-tree ,用于 this 的 WSL 内核的一个分支关于构建内核的教程。
  • 当出现 [Y/n/?] 时我的第一个构建中的标志,我(尝试)用大写选项回答。

  • 我对使用或安装内置内核不感兴趣,只是看看 .i.s文件看。
    我在 Makefile 中添加了一些选项:
    KBUILD_HOSTCFLAGS   := -Wall -Wno-error=deprecated-declarations -Wmissing-prototypes -Wstrict-prototypes -O2 \
    -fomit-frame-pointer -save-temps=obj -o -std=gnu89 $(HOST_LFS_CFLAGS) \
    $(HOSTCFLAGS)
    具体来说,我添加了 -save-temps=obj -o -Wno-error=deprecated-declarations标志。运行这个工作,但只产生一小部分 .i文件总共只有大约 9.9 MB,与 .c 的 494 MB 相比显得相形见绌。内核中的文件。
    我知道只有一部分内核是基于您为其构建的架构而构建的,但这是一个很大的差异。 这么少.c文件真的是由内核的“标准”构建编译的吗?如果没有,我怎样才能获得所有 .i.s gcc生成的文件?

    最佳答案

    首先,你不想要 -o那里。它设置输出文件的名称,因此写入时,每个编译都会将其输出写入一个不寻常名称为 -std=gnu89 的文件中。 . (除非稍后添加正确的 -o 选项以覆盖它。)
    修好之后...KBUILD_HOSTCFLAGS是用于构建主机程序的 CFLAGS,它是内核源代码的一小部分。
    术语:主机是构建内核的机器,目标是构建内核最终将在其上启动的机器。它们可能是不同的机器(想象一下,一个软件分销商构建了一个供所有客户使用的内核),甚至在交叉编译的情况下也可能是不同的架构。
    作为构建过程的一部分,有必要在主机上编译和运行一些相对较小的 C 程序。这些功能包括解析内核配置文件以创建头文件,或将二进制固件代码转换为 C 源代码以编译到内核中。 KBUILD_HOSTCFLAGS option 只设置编译器标志以在构建这些小程序时使用。它不会影响编译内核本身时使用的标志。为此,根据 https://www.kernel.org/doc/Documentation/kbuild/makefiles.txt ,您要添加到 cflags-y多变的。如果你把 -save-temps在那里你应该看到你期望的一切。我希望你有大量的磁盘空间。

    关于c - 使用 -save-temps 构建内核 - 这些 9 MB 的 *.i 文件是全部吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65483572/

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