gab*_*be. 79
在我看来,编译自己的 linux 内核真正获得的唯一好处是:
您将学习如何编译自己的 linux 内核。
这不是您需要为更高的速度/内存/xxx做的事情。如果那是您觉得自己处于发展阶段,那么这是一件很有价值的事情。如果您想更深入地了解整个“开源”事物的含义,内核的不同部分是如何以及是什么,那么您应该试一试。如果您只是想将启动时间加快 3 秒,那么...有什么意义...去买一个 ssd。如果你很好奇,如果你想学习,那么编译你自己的内核是一个好主意,你可能会从中得到很多。
话虽如此,有一些特定的原因何时适合编译您自己的内核(正如一些人在其他答案中指出的那样)。通常,这些是由于您对特定结果的特定需求而产生的,例如:
问题在于,当一切都已经按照应有的方式工作时,编译自己的内核有一些内在的好处,而我认为没有。尽管您可以花费无数时间禁用不需要的东西并调整可调整的东西,但事实是 linux 内核已经针对大多数用户情况(通过您的发行版)进行了很好的调整。
mig*_*aza 37
大多数用户不需要编译自己的内核,他们的发行版已经为他们完成了这项工作。通常,发行版将包含一组补丁,以与发行版工作方式的某些部分、设备驱动程序的向后移植以及来自较新但未发布的内核版本或他们为用户开创的功能的修复程序集成。
当你编译你自己的内核时,你有几个选择,你可以编译一个官方的 Linus Torvalds 内核,这不会包括你的发行版添加的任何补丁或定制(可能是好的或坏的),或者你可以使用您的发行版重建工具来构建您自己的内核。
您可能想要重建内核的原因包括:
许多开发人员使用它来为嵌入式系统或机顶盒创建内核的自定义版本,在这些系统中他们需要特殊的设备驱动程序,或者他们想要删除他们不需要的功能。
Mic*_*zek 30
自己编译内核允许你只包含与你的计算机相关的部分,这使得它更小并且可能更快,尤其是在启动时。通用内核需要包含对尽可能多的硬件的支持;在启动时,它们会检测哪些硬件连接到您的计算机并加载适当的模块,但是完成所有这些需要时间并且它们需要加载动态模块,而不是将代码直接烘焙到内核中。当你的计算机只有一个 CPU 时,没有理由让你的内核支持 400 个不同的 CPU,或者如果你没有一个支持蓝牙鼠标,这都是浪费空间,你可以释放
Eri*_*ric 24
我不敢相信这里接受的答案开始说“这不是你需要做的事情来提高速度/内存/xxx无论如何。”
这是完全错误的。我经常自定义构建我的内核,以删除不需要的代码以及包含主要与硬件相关的性能增强代码。例如,我运行一些较旧的硬件,并且可以通过在一些内置此功能的较旧 MoBo 上启用很少启用的内核驱动程序(例如 HPT36x 芯片组支持)来获得一些性能提升。
另一个例子,Slackware 下的 BIG SMP 是默认的,例如,在戴尔 2800 上,将消耗相当大的空间来运行 GFSD(不是作为内核模块)之类的东西,顺便说一下,它会消耗 CPU不需要。同样,对于 NFSD 和其他包罗万象的一切,如果您只是想在机器上安装 Linux 并运行,这很好,但如果您确实关心“速度/内存/xxx 随便什么”,那么这些事情很重要并且可以工作.
我所有的生产盒都是定制的内核。如果我使用的是通用硬件,例如戴尔系列(2800、2850、2900 等)硬件,只需将内核的 .config 文件复制到每个框并编译内核并安装即可。
Law*_*ceC 14
以下是编译您自己的内核对您有益的一些情况:
禁用模块加载的内核更安全。这将要求您选择您知道需要的模块并将它们作为内核的一部分包含在内,而不是将它们编译为模块。
禁用对 /dev/kmem 的支持,或使用适当的编译器选项削弱它对安全来说是一件好事。我认为大多数发行版现在默认这样做。
如果可能,我不想使用 initrd。将您的内核定制为它启动的硬件可以消除 initrd。
有时,更高的内核版本会提供您需要的功能,但今天这种情况非常罕见。我记得当我第一次开始使用 Debian 时,它使用的是 2.4 内核,但我需要 2.6 内核来支持 udev。
禁用不需要的网络协议/选项可以加快 TCP/IP 性能。
禁用不需要的选项会降低内核的内存占用,这在低 RAM 环境中很重要。当您使用 256MB RAM 系统作为路由器时,这会有所帮助。
我发现 /dev 中的所有“tty”设备在我通常只通过串行或 ssh 登录的系统上都很烦人。
我第二个 gabe. 的回答(我的评论太长了,所以我发帖作为答案)。
除非你有一个高度专业化的目的(例如嵌入式机器、严格的安全分析),我认为编译你自己的内核除了看看它是如何完成的之外没有任何实际好处。通过有条不紊地查看选项,了解它们如何相互交互以构建系统是了解系统工作方式的好方法。当您尝试删除似乎对您要完成的任务没有任何用途的组件时,您会发现令人惊讶的结果。
但是请注意——为什么跳下兔子洞无疑是令人振奋的,它会比你想象的更多的夜晚和周末!
编译您自己的内核可以让您参与内核开发过程,无论是简单的事情,例如为现有驱动程序提供 PCI/USB 设备 ID 可能使新设备为您工作,还是深入参与内核的竞争内核开发。
它还允许您在硬件上测试开发内核,并在发现任何回归时提供反馈。如果您有一个不常见的硬件,这对您和其他人特别有帮助。如果您等待发行版内核,则问题报告中的修复程序可能需要一些时间才能过滤到新的发行版内核版本中。
我个人也喜欢编译我自己的内核以只支持我拥有的硬件。当您运行发行版内核并查看 的输出时lsmod(8),您会看到为您没有的硬件加载了许多模块。这会污染模块列表、/proc、/sys 和您的日志,这样当您搜索某些内容时,它可能会隐藏在噪音中;您也不能 100% 确定这些模块不会导致您尝试诊断的问题。