自己编译 Linux 内核可以带来什么好处?通过根据您的硬件进行定制是否可以提高效率?
答案1
在我看来,编译自己的 Linux 内核真正获得的唯一好处是:
您将学习如何编译自己的 Linux 内核。
这不是你的事需要为了更快的速度/内存/xxx 无论如何。如果您觉得自己正处于发展阶段,那么这是一件有价值的事情。如果您想更深入地了解整个“开源”的含义,了解内核的不同部分如何以及是什么,那么您应该尝试一下。如果您只是想将启动时间加快 3 秒,那么...还有什么意义...去购买 SSD。如果您好奇,如果您想学习,那么编译自己的内核是一个好主意,您可能会从中受益匪浅。
话虽如此,有一些特定的原因适合编译您自己的内核(正如一些人在其他答案中指出的那样)。一般来说,这些是由于您对特定结果的特定需求而产生的,例如:
- 我需要让系统在资源有限的硬件上启动/运行
- 我需要测试补丁并向开发人员提供反馈
- 我需要禁用导致冲突的某些内容
- 我需要开发linux内核
- 我需要启用对不受支持的硬件的支持
- 我需要提高 x 的性能,因为我达到了系统的当前限制(并且我知道我在做什么)
问题在于认为当一切都已经按应有的方式工作时编译自己的内核有一些内在的好处,但我认为没有。尽管您可以花费无数的时间禁用不需要的东西并调整可调整的东西,但事实是 Linux 内核已经(通过您的发行版)进行了很好的调整最多用户情况。
答案2
大多数用户不需要编译自己的内核,他们的发行版已经为他们完成了这项工作。通常发行版将包含一组补丁,以与发行版工作方式的某些部分集成、设备驱动程序的向后移植以及来自较新但未发布版本的内核的修复或他们与用户一起开创的功能。
当您编译自己的内核时,您有几个选项,您可以编译官方的 Linus Torvalds 内核,这将不包括您的发行版添加的任何补丁或自定义(可能是好是坏),或者您可以使用您的发行版重建工具来构建您自己的内核。
您可能想要重建内核的原因包括:
- 修补错误或向生产系统添加特定功能,您不能真正冒险为了一两个修复而升级整个内核。
- 尝试特定的设备驱动程序或新功能
- 要扩展内核,请对其进行工作
- 测试一些“Alpha”模块或功能。
许多开发人员还使用它为需要特殊设备驱动程序或想要删除不需要的功能的嵌入式系统或机顶盒创建自定义版本的内核。
答案3
自己编译内核允许您只包含与您的计算机相关的部分,这使得它更小并且可能更快,尤其是在启动时。通用内核需要包含对尽可能多的硬件的支持;在启动时,它们会检测哪些硬件连接到您的计算机并加载适当的模块,但完成所有这些工作需要时间,并且它们需要加载动态模块,而不是将代码直接烘焙到内核中。当你的计算机中只有一个 CPU 时,没有理由让你的内核支持 400 个不同的 CPU,或者如果你没有一个 CPU,则没有理由支持蓝牙鼠标,这都是你可以释放的浪费空间
答案4
在以下一些情况下,编译您自己的内核将使您受益:
禁用模块加载的内核更安全。这将要求您选择您知道需要的模块并将它们作为内核的一部分包含在内,而不是将它们编译为模块。
禁用对 /dev/kmem 的支持,或者使用适当的编译器选项削弱它对于安全来说是一件好事。我认为现在大多数发行版都默认这样做。
我宁愿尽可能不使用 initrd。将内核定制为它引导的硬件可以消除 initrd。
有时更高版本的内核版本将具有您需要的功能,但这在今天非常罕见。我记得当我第一次开始使用 Debian 时,它使用的是 2.4 内核,但我需要 2.6 内核来支持 udev。
禁用不需要的网络协议/选项可以提高 TCP/IP 性能。
禁用不需要的选项可以降低内核的内存占用量,这在低 RAM 环境中非常重要。当您使用 256MB RAM 系统作为路由器时,这会有所帮助。
我发现 /dev 中的所有“tty”设备在我通常仅通过串行或 ssh 登录的系统上很烦人。