定制内核构建非常大

定制内核构建非常大

我想为自己构建一个自定义内核作为 RPM。我使用的.config是我正在使用的发行版(在本例中为 Centos),最终内核安装大小为 2.2Gb。我已取消选择所有不需要的驱动程序/模块并更新了 .config。当我制作内核时,我看到正在编译我取消选择的驱动程序。我缺少哪个步骤来读取 .config 并且不编译大内核?与我的相比,存储库中的内核只有几 Mb。

  1. 下载源码

    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.138.tar.xz

  2. 提取源码

    tar -xf linux-5.4.138.tar.xz

  3. 复制从 elrepo 找到的现有配置。

    cp ~/config-5.4.138-x86_64 linux-5.4.138/.config

  4. 跑步

    make oldconfig

  5. 使用 menuconfig 进行配置并取消选择不需要的驱动程序/模块并保存。

    make menuconfig

  6. 建立转速

    make rpm-pkg -j4

结果是:

  586.3 MiB [##########]  kernel-5.4.138-1.x86_64.rpm
  147.8 MiB [##        ]  kernel-devel-5.4.138-1.x86_64.rpm
    1.3 MiB [          ]  kernel-headers-5.4.138-1.x86_64.rpm

百胜安装:

kernel          x86_64          5.4.138-1             /kernel-5.4.138-1.x86_64          2.2 G

这是我的 .config 如果有帮助的话https://pastebin.com/LBw6Gm1s

答案1

使用您所需的配置重建 elrepo 的 kernel-lt-5.4.spec。也就是说,对 Source1 进行所需的编辑,该名称中包含内核版本,当前为 config-5.4.138-x86_64。增加版本号。使用模拟构建生成的 SRPM。

Red Hat 风格的 RPM 包有自​​己的脚本,并以特定的方式拆分子包。与上游的 RPM 规格完全不同。一些调试符号没有被删除,导致输出更大。

阅读规格文件以了解它们有何不同。对于埃尔雷波来说,请参阅镜像上的 kernel-lt-5.4.spec。虽然比较复杂,但它是一个红帽风格的内核规范。没有补丁的 kernel.org 长期版本,这是练习的重点。相比较make rpm-pkg通过一些 Makefile 调用脚本/包/mkspec,它看起来一点也不像 Red Hat 内核。请注意有关禁用剥离调试符号的评论:

这里唯一的哥特式位是重新定义 install_post 以避免从我们想要的内核文件中剥离符号

不,大小不是一个错误,内核黑客想要的是调试符号。

当上游(kernel.org)和下游(Red Hat、elrepo)都有自己的包构建脚本时,这非常令人困惑。但这些都是你需要注意的细节。用于可重复的构建,并了解您的自定义包。


elrepo 将其软件包重命名为 kernel-lt(或 kernel-ml),以免与 RHEL 内核包名称冲突。你的构建冲突,要小心。

答案2

@JohnMahowald 提供了很好的概述,因此也请参阅他的答案。然而,有在此之前你可以做的事情make rpm-pkg将大大减少构建大小:

CONFIG_DEBUG_INFO_REDUCED=y

如果您在这里选 Y,则指示 gcc 为结构类型生成较少的调试信息。这意味着需要完整调试信息的工具(如 kgdb 或 systemtap)不会满意。但如果您只需要调试信息来解析行号,则不会有任何损失。优点是构建目录对象大小比完整的 DEBUG_INFO 构建显着缩小,并且编译时间也减少了。仅适用于较新的 gcc 版本。

您可以make menuconfig按照以下菜单顺序在 中找到此内容:

  • 内核黑客攻击
    • 编译时检查和编译器选项
      • 减少调试信息

另外,如果尚未设置,请确保您已设置压缩调试信息(即CONFIG_DEBUG_INFO_COMPRESSED_ZLIB=y) 在同一菜单中。

相关内容