我想为自己构建一个自定义内核作为 RPM。我使用的.config
是我正在使用的发行版(在本例中为 Centos),最终内核安装大小为 2.2Gb。我已取消选择所有不需要的驱动程序/模块并更新了 .config。当我制作内核时,我看到正在编译我取消选择的驱动程序。我缺少哪个步骤来读取 .config 并且不编译大内核?与我的相比,存储库中的内核只有几 Mb。
下载源码
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.138.tar.xz
提取源码
tar -xf linux-5.4.138.tar.xz
复制从 elrepo 找到的现有配置。
cp ~/config-5.4.138-x86_64 linux-5.4.138/.config
跑步
make oldconfig
使用 menuconfig 进行配置并取消选择不需要的驱动程序/模块并保存。
make menuconfig
建立转速
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
) 在同一菜单中。