曾经有一段时间,升级Linux内核让很多用户望而却步。当时,升级内核步骤多,时间长。现在,内核的安装可以很容易地由像apt这样的包管理器来处理。通过添加特定的存储库,您可以轻松安装实验性或特定版本的内核(例如音频产品的实时内核)。想一想,既然升级内核这么容易,为什么不自己编译一个呢?以下是一些可能的原因:你想简单了解编译内核的过程你需要启用或禁用内核中的特定选项,因为它们没有出现在标准选项中你想启用可能没有添加的硬件支持你使用的标准内核你的发行版要求你编译内核你是一名学生,编译内核是你的任务无论出于何种原因,知道如何编译内核都是非常有用的,可以被认为是一种通过权。当我第一次编译一个新的Linux内核(那是很久以前的事了)然后尝试从中启动时,我感到了某种兴奋(系统立即崩溃,然后不断尝试并失败)。在这种情况下,让我们尝试编译内核的过程。我将使用Ubuntu16.04Server进行演示。运行常规sudoaptupgrade后,当前安装的内核版本为4.4.0-121。想升级内核版本到4.17,慎重行事。一个警告:强烈建议您在虚拟机中试验此过程。基于虚拟机,您可以随时创建快照并轻松回滚任何问题。除非您知道自己在做什么,否则不要在生产机器上以这种方式升级内核。下载内核我们需要做的第一件事是下载内核源代码。在Kernel.org找到您要下载的所需内核的URL。找到网址后,使用如下命令(我以4.17RC2内核为例)下载源文件:wgethttps://git.kernel.org/torvalds/t/linux-4.17-rc2.tar.gz在下载过程中,有一些事情需要考虑。安装需要的环境为了编译内核,我们首先需要安装一些需要的环境。这可以通过一个命令完成:sudoapt-getinstallgitfakerootbuild-essentialncurses-devxz-utilslibssl-devbcflexlibelf-devbison重要说明:您至少需要128GB的??本地可用磁盘空间才能完成内核编译过程。所以你必须确保你有足够的空间。在新下载的内核所在的文件夹中解压源代码,使用命令解压内核:tarxvzflinux-4.17-rc2.tar.gz使用命令cdlinux-4.17-rc2进入新生成的文件夹。配置内核在正式编译内核之前,我们首先要配置需要包含哪些模块。实际上,有一些非常简单的配置方法。使用一个命令,您可以复制当前内核的配置文件,然后使用trustymenuconfig命令进行任何必要的更改。使用以下命令执行此操作:cp/boot/config-$(uname-r).config现在您有了配置文件,输入命令makemenuconfig。此命令将打开一个配置工具(图1),让您遍历每个可用模块并启用或禁用您需要或不需要的模块。图1:运行中的makemenuconfig您很有可能会禁用内核的一个重要部分,因此在menuconfig期间要小心操作。如果您不确定某个选项,请不要管它。或者更好的是使用我们从当前运行的内核复制的配置文件(因为我们知道它可以工作)。一旦您完成了整个配置列表(相当长),您就可以开始编译了。编译和安装现在是实际编译内核的时候了。第一步是使用make命令进行编译。调用make命令并回答必要的问题(图2)。这些问题取决于您要升级到的现有内核,以及您要升级到的内核。相信我,会有很多问题要回答,所以你必须预留很多时间。图2:回答有关make命令的问题回答完繁琐的问题后,您可以使用以下命令安装以前启用的模块:其他东西(因为在编译期间不需要你的输入)。很有可能,您想继续执行其他任务(除非您真的喜欢在终端屏幕上观看输出飞快地飞过)。现在我们使用这个命令安装内核:sudomakeinstall又是一个需要花费大量时间的命令。事实上,makeinstall命令会比makemodules_install命令花费更多的时间。去吃午饭,配置路由器,在一些服务器上安装Linux,或者小睡一会儿。启用内核作为引导一旦makeinstall命令完成,就可以启用内核作为引导了。使用这个命令来实现:sudoupdate-initramfs-c-k4.17-rc2当然,你需要把上面的内核版本号换成你自己编译的版本号。命令完成后,使用以下命令更新grub:sudoupdate-grub现在您可以重新启动系统并选择新安装的内核。恭喜!你已经编译了一个Linux内核!这是一项耗时的活动;但是,最终您的Linux发行版将拥有一个自定义内核,并且您还将拥有一项许多Linux管理员往往会忽视的重要技能。
