在安装Gentoo的同时,编译自己的Linux内核也是被认为非常古怪和技术性的事情之一。我们已经讨论了一些您可能希望这样做的原因。在我们引导您完成这些步骤之前,下面是一些重要概念的简要概述。
简而言之,它是操作系统的重要组成部分,如果不是最重要的话。操作系统负责让你的程序运行,允许它们访问你的硬件。然而,它实际上是执行所有这些任务的内核。
Linux内核的特殊之处在于它可以根据您自己的硬件进行定制。这与windowsnt内核相比,它在每台计算机上都是相同的。为此,内核必须经历一个称为编译的过程。
有关更多信息,请查看我们对Linux内核的介绍。
通常,程序是以人类可读的格式编写的。这使得人们更容易创建软件。例如,Linux内核主要是用一种叫做C的编程语言编写的,但是计算机不能理解这一点。他们只识别一种叫做机器代码的复杂语言。要做到这一点,需要使用一种叫做编译器的特殊软件来翻译文本行。
不同的编译器用于转换不同的编程语言。例如,GCC是一个编译器,它将C代码转换成机器代码(除其他外)。但这并不是他们所做的全部——编译器也可以优化特定机器的翻译代码。同时,它们还可以在执行此操作时从程序中删除不需要的功能。
通常,很多软件都已经完成了这个过程。相反,人们下载转换后的二进制指令,这些指令是现成的。例如,您现在运行的web浏览器已经编译。这是因为编译一些东西可能有点复杂和耗时。把它想象成把一本大书翻译成外语。
简而言之,编译内核意味着将其代码转换为实际在计算机上运行的代码。
没有燃料你不能生火。同样,如果您没有代码,那么您就不能编译程序。对于大多数Linux操作系统,通常都是相同的,但有一些例外。其中许多人提供自己的自定义内核源。如果可以的话,你应该试着用它。例如,如果您使用的是基于Debian的操作系统,如Ubuntu,则应使用以下命令安装源:
sudo apt-get updatesudo apt-get install linux-source如果愿意,还可以安装此软件包的不同版本(例如linux-source-4.8.0)。您将在/usr/src/目录中找到已安装的文件,因此请在那里导航并查看内容:
cd /usr/src/ls您将看到一个以结尾的文件。焦油bz2. 这是您将使用的源。使用以下命令提取:
sudo tar xjvf linux-source-4.4.0.tar.bz2当然,请确保用正确的名称替换文件。文件将相当大,所以过程将需要一点时间!
如果您愿意,您可以从官方的Linux内核网站上获得您的源代码。我建议只有在Linux操作系统没有提供的情况下才这样做。选择所需的版本并下载。如果你通过这个途径,你应该下载到一个空文件夹。这样,如果你想在将来编译更多的内核,你会有一个很好的文件夹来组织它们。
完成此操作后,使用以下命令提取文件:
tar xJvf linux-4.9.11.tar.xz确保使用的文件名与下载的版本匹配!
在这一步中,您可以选择要除去内核的哪些部分。例如,内核为各种设备提供了许多不同的驱动程序。如果您不需要这种支持,去掉它们可以带来一些速度上的好处,同时还可以获得更小的内核。
在继续之前,您必须安装一些程序,让您自定义和编译它。
在基于Debian的系统上,您需要构建基本包,除其他外:
sudo apt-get install build-essential gcc libncurses5-dev libssl-devlibncurses5 dev包将使配置内核更容易,因此请确保安装它。其他Linux操作系统也会有一个类似的程序,但可能会使用不同的名称。例如,如果您使用的是软呢帽,则称为ncurses。
如果尚未安装,还需要GNU编译器集合(GCC)。这是负责将原始源代码翻译成计算机可以理解的东西的工具。也就是说,编译。
安装了这些程序后,打开终端,以便您在提取的Linux源文件夹中。例如,如果使用linux源方法,您将执行以下操作:
cd /usr/src/linux-source-4.4.0在编译内核之前,您需要告诉GCC您希望如何完成它。您可以使用名为make的命令行工具来执行此操作。键入以下命令:
sudo make localmodconfig这将创建一个名为.config的文件,它告诉GCC从内核源代码编译什么。makelocalmodconfig命令检测当前正在运行的内核组件,并将它们标记为编译。如果内核位于您自己的文件夹中,则不需要sudo就可以工作。
你可能会遇到下面这样的信息。只要按回车键就可以跳过它们——它们通常只是新的内核特性。
然而,localmodconfig并不完美!如果您当前没有使用计算机的某些部分,它可能无法检测到它支持的所有内容。因此,您需要手动启用它们。或者,您可以完全跳过此步骤,改用下一个命令。这将使用与当前使用的选项相同的选项编译新内核。
如果您希望这样做,但之前使用过localmodconifg命令,请执行以下操作:
sudo make clean这将给你一个干净的建设。如果以前用这些源代码编译过内核,也应该使用这个命令。
在内核源文件夹中,有一个名为.config的文件。这就是GCC用来选择编译内容的方法。代替手动编辑(不推荐),您将使用一些终端工具。这将使选择编译选项更加容易。
完成此操作后,请进一步微调:
sudo make nconfig你会看到一个彩色菜单弹出。这是内核配置菜单。要四处导航,请使用箭头键。您可以按向右箭头键展开旁边带有--->;号的条目。按向左箭头键,从这些子菜单中导航出来。
通过按空格键,可以切换旁边带有<;gt;或[]符号的菜单项。这将在不同的菜单选项之间循环。如果您在内部看到*或M,那么将编译特定的内核组件。它们之间唯一的区别是M选项将在需要时加载。如果您正在编译一个不经常使用的驱动程序,这可能很有用。
如果您想了解有关特定开关的更多功能,请按F2键。您将看到对所编译内容的有用描述。
完成后,按F9按钮保存并退出。
现在您已经创建了一个定制的make文件,您需要编译内核。键入以下命令:
sudo make -j$(nproc --all)如果您从web上下载内核源,则不需要sudo。命令的第二部分利用所有CPU内核,帮助加快内核编译时间。如果您想在不发生太多打嗝的情况下将计算机用于其他任务,可以消除此问题,或者将数字更改为其他的(例如,-j2)。但是,这也会使编译速度减慢!
这一过程可能而且将需要很长时间。你选择编译的越少,它就越短。即便如此,你还是需要耐心。
然后,输入此命令以完成编译内核的其余部分:
sudo make modules_install要实际使用此内核,您需要输入以下命令:
sudo make install这将自动将内核复制到/boot文件夹并生成适当的文件以使其正常工作。
如果在安装新内核后重新启动,系统可能无法工作!这通常是由于编译不正确的内核(也就是说,没有很好地支持您的计算机)。举个例子,我自己的笔记本电脑。为了防止这种情况发生,我建议编辑GRUB以便它可以切换回旧的内核。为此,请使用以下命令:
sudo nano /etc/default/grub在GRUB#U HIDDENŠU TIMEOUT和GRUBŠU HIDDENŠTIMEOUTŠ安静线前放置一个Š标志。之后,通过运行以下命令保存这些更改:
sudo grub-mkconfig -o /boot/grub/grub.cfg现在,如果你重新启动你的电脑,你可以切换到一个旧的内核,如果你的新内核不工作。只需转到高级选项菜单项并选择要引导的内核。如果一切顺利,恭喜你!您将使用自己编译的内核。
你有兴趣编译更多的内核吗?其他程序?你觉得值得吗?
图片来源:chombosan/Shutterstock
...他事情也是如此。许多人将面临的一个很大的不同点是,如何将这样一个系统安装到计算机上。 ...
...inux操作系统。在Linux发行版(“发行版”)中,它的本地编译源代码是独一无二的。与传统操作系统相比,Linux发行版提供了更大的灵活性,而Gentoo则充分利用了自己动手的心态。 ...
...桌面依赖的很酷的工具。80年代创建的关键工具包括GCC(编译C的工具)、Emacs(文本编辑器)、Bash和各种仍在使用的命令行实用程序。 ...
...在很大程度上,Linux提供了一种很好的体验,不管您决定如何运行它。不管它是一个拱形系统,还是一个基本的操作系统,这其实并不重要。所以自豪地使用任何Linux操作系统。 ...
...。文件里有一大堆马厩,可以帮你分析。我们将向您展示如何使用这些工具。 识别文件类型 文件通常具有一些特性,允许软件包识别它是哪种类型的文件,以及其中的数据表示什么。尝试在MP3音乐播放器中打开PNG文件是没有...
...东西,以方便用户。它们包括不同的默认软件,比如Ubuntu如何包括Unity,Ubuntu的衍生产品如何包括其他桌面环境,Fedora如何包括gnomeshell,Mint如何包括cinumon或MATE。 许多应用程序还使用不同的包管理器、配置实用程序和其他软件...
...为什么它们都存在? 这里有很多不同之处,尤其是关于如何构建操作系统并授予许可证的哲学上的不同。不过,这应该有助于您了解基础知识。 基础知识 大多数人所说的“Linux”实际上并不是Linux。Linux技术上只是Linux内核—...
...为Linux。你会发现它在这里被称为“Linux”,在这里关于如何极客和其他地方,因为它是一个更常见的术语,读者可以立即理解。 最后,我们将引用1996年Linus Torvalds的一句话: Umm, this discussion has gone on quite long enough, thank you very mu...