Answers:
在我看来,从编译自己的linux内核中真正获得的唯一好处是:
您将学习如何编译自己的Linux内核。
这不是你的东西需要更多的速度/内存/ XXX不管做。如果那是您在开发中所处的阶段,那是一件很有价值的事情。如果您想更深入地了解整个“开源”的内容,以及内核不同部分的功能和方式,那么就应该尝试一下。如果您只是想将启动时间缩短3秒,那么...有什么意义...去购买固态硬盘。如果您很好奇,如果您想学习,那么编译自己的内核是一个好主意,您可能会从中学到很多。
话虽如此,有一些特定的原因可以适当地编译自己的内核(正如其他人在其他答案中所指出的那样)。通常,这些是出于您对特定结果的特定需求而产生的,例如:
问题在于认为,当一切都已经按应有的方式工作时,编译自己的内核会有一些内在的好处,而我认为没有。尽管您可以花费无数小时来禁用不需要的功能并调整可调整的功能,但事实是,Linux内核已经针对大多数用户情况进行了很好的调整(根据您的分布)。
大多数用户不需要编译自己的内核,他们的发行版已经为他们完成了这项工作。通常,发行版将包含一组补丁程序,以与发行版工作方式的某些部分集成,设备驱动程序的反向移植以及较新的但未发布的内核版本或他们为用户所开拓的功能的修复。
编译自己的内核时,有两种选择,您可以编译一个正式的Linus Torvalds内核,其中不包括发行版中添加的任何补丁程序或自定义项(可能是好是坏),或者您可以使用发行版重建工具来构建自己的内核。
您可能要重建内核的原因包括:
许多开发人员使用它来为需要特殊设备驱动程序的嵌入式系统或机顶盒创建内核的自定义版本,或者他们想要删除不需要的功能。
bisect
ing来发现引入错误的地方...
自己编译内核仅允许您包含与计算机相关的部分,这使其体积更小且可能更快,尤其是在启动时。通用内核需要包括对尽可能多硬件的支持。在启动时,他们会检测到计算机上连接了哪些硬件并加载了适当的模块,但是这样做需要花费时间,并且它们需要加载动态模块,而不是将代码直接烘焙到内核中。当您的计算机中只有一个时,没有理由让内核支持400个不同的CPU;如果您没有一个,则无需支持蓝牙鼠标,这全都是浪费的空间,您可以腾出空间
我不敢相信这里接受的答案会开始说:“这不是您需要做的,以提高速度/存储/ xxx。”
这是完全错误的。我通常自定义构建内核,以删除不需要的代码以及包含主要与硬件相关的性能增强代码。例如,我运行一些较旧的硬件,并且可以通过在一些内置有此功能的较旧MoBos上启用很少启用的内核驱动程序(例如HPT36x芯片组支持)来获得一些性能提升。
另一个示例是Slackware下的BIG SMP是默认设置,例如,在Dell 2800上,它将消耗大量的内存来运行GFSD(而不是作为内核模块)之类的东西,并且,顺便说一句,我消耗了CPU ticks不需要 同样,对于NFSD和其他所有方面来说,请取悦所有心态,如果您只是想使Linux装在盒子上并运行,但是如果您确实关心“速度/内存/ xxx等等”,那么这些事情就可以正常工作了。
我所有的生产包装盒都是定制的内核。如果我使用的是戴尔系列(2800、2850、2900等)这类通用硬件,则只需将内核的.config文件复制到每个盒中,然后编译内核并进行安装即可。
在某些情况下,编译自己的内核将使您受益:
禁用模块加载的内核更加安全。这将要求您选择所需的模块,并将其包含在内核中,而不是将其编译为模块。
为安全起见,禁用对/ dev / kmem的支持,或使用适当的编译器选项削弱它是一件好事。我认为大多数发行版现在都默认执行此操作。
我宁愿尽可能不使用initrd。将内核自定义为其启动的硬件,从而消除了initrd。
有时更高的内核版本将具有您需要的功能,但是今天这种情况很少见。我记得当我刚开始使用Debian时,它使用的是2.4内核,但是我需要2.6内核来支持udev。
禁用不需要的网络协议/选项可以加快TCP / IP性能。
禁用不需要的选项可以减少内核的内存占用,这在低RAM环境中很重要。当您将256MB RAM系统用作路由器时,这会有所帮助。
我发现/ dev中所有“ tty”设备都使我很烦,因为我通常只通过串行或ssh登录。
编译自己的内核使您可以参与内核开发过程,无论这是简单的事情,例如为现有的驱动程序提供PCI / USB设备ID(可能使新设备为您工作),还是深入参与内核之争内核开发。
它还允许您在硬件上测试开发内核,并在发现任何退步时提供反馈。如果您的硬件不常见,这对您和其他人特别有用。如果您等待发行版内核,则可能需要花费一些时间才能将问题报告中的修复程序过滤到新发行版内核中。
我个人也喜欢编译自己的内核,以仅包含对我所拥有硬件的支持。当您运行发行版内核并查看的输出时lsmod(8)
,您会看到为没有的硬件加载了许多模块。这会污染模块列表,/ proc,/ sys和您的日志,因此当您搜索某些内容时,它可能会被隐藏在噪音中。您也不能百分百确定这些模块不会导致您尝试诊断的问题。
该线程已有很长的历史了,但今天仍然有效,就像提出问题时一样!
答案是:您可以根据需要和要求来编译自己选择的linux内核。
许多情况是有效的:
您是一名工程师,要求您的构建满足系统的性能和安全性要求/需求,然后重新编译以达到和/或超过指定的条件。
您是普通用户,并且有一个想要长期使用的旧系统,因此您可以重新编译以添加/删除组件,以使旧系统保持最佳状态。
您是拥有最新最快硬件的普通用户,并且它具有足够的内存/ RAM。无需重新编译,但是如果您有兴趣了解有关系统的更多信息,仍然可以。
您只想成为Microsoft和/或Mac的日常用户,不要重新编译,而只需要处理上游发行版中的更新。
保持场景:-)
与Mac / Windows用户不同,Linux提供了选择。轻松选择或根据您的需求优化系统的选择。
对于大多数用途,通用内核几乎适用于所有硬件。另外,它们通常包含特定于发行版的补丁,因此编译您自己的内核可能(可能)引起问题。
编译自己的内核的原因是:
如果我不使用基于源的发行版,那么我将根本不会编译内核。
我很惊讶没有人提到编译定制内核的原因:
因为您要使用其他C / c ++编译器。GCC非常适合编译Linux内核。但是那里有很多高级编译器!GCC的优化落后于英特尔的C / C ++编译器。英特尔还提供了性能基元库和vtune工具,这两者都是生产高性能linux内核必不可少的。到目前为止,您只能使用GCC和G ++。实际上,无论您做什么,结果都会受到编译器的限制。因此,我使用Intel编译器和性能库,下载量很大-1.5GB,但这使您对好的编译器中包含的所有内容有了一些了解。
英特尔的C / C ++编译器可免费用于非商业用途。但是,通过谷歌搜索非商业性许可英特尔c ++编译器下载页面来搜索英特尔网站会更容易。我通常不使用GCC / G ++做任何事情。而且您不需要成为程序员。您只需设置环境并在make文件中更改两行以指向Intel的编译器。
然后,您可以得到一些严重的速度!
What are the pros and cons of compiling your own kernel?
Cons =不容易,很多情况下没有附加值,那会更好。优点=安全性,性能,例如,如果您知道自己在做什么,则使用Linux使NAS设备运行某些硬件并具有联网和图形功能。