如何编译自己的linux内核

编译你自己的Linux内核是一个很怪的技术问题,对吧?我们已经介绍了一些您可能希望这样做的原因--现在是您自己尝试的时候了!...

在安装Gentoo的同时,编译自己的Linux内核也是被认为非常古怪和技术性的事情之一。我们已经讨论了一些您可能希望这样做的原因。在我们引导您完成这些步骤之前,下面是一些重要概念的简要概述。

compile-linux-kernel

什么是内核(a kernel)?

简而言之,它是操作系统的重要组成部分,如果不是最重要的话。操作系统负责让你的程序运行,允许它们访问你的硬件。然而,它实际上是执行所有这些任务的内核。

Linux内核的特殊之处在于它可以根据您自己的硬件进行定制。这与windowsnt内核相比,它在每台计算机上都是相同的。为此,内核必须经历一个称为编译的过程。

有关更多信息,请查看我们对Linux内核的介绍。

什么是编译(compiling)?

通常,程序是以人类可读的格式编写的。这使得人们更容易创建软件。例如,Linux内核主要是用一种叫做C的编程语言编写的,但是计算机不能理解这一点。他们只识别一种叫做机器代码的复杂语言。要做到这一点,需要使用一种叫做编译器的特殊软件来翻译文本行。

不同的编译器用于转换不同的编程语言。例如,GCC是一个编译器,它将C代码转换成机器代码(除其他外)。但这并不是他们所做的全部——编译器也可以优化特定机器的翻译代码。同时,它们还可以在执行此操作时从程序中删除不需要的功能。

通常,很多软件都已经完成了这个过程。相反,人们下载转换后的二进制指令,这些指令是现成的。例如,您现在运行的web浏览器已经编译。这是因为编译一些东西可能有点复杂和耗时。把它想象成把一本大书翻译成外语。

简而言之,编译内核意味着将其代码转换为实际在计算机上运行的代码。

获取内核源

没有燃料你不能生火。同样,如果您没有代码,那么您就不能编译程序。对于大多数Linux操作系统,通常都是相同的,但有一些例外。其中许多人提供自己的自定义内核源。如果可以的话,你应该试着用它。例如,如果您使用的是基于Debian的操作系统,如Ubuntu,则应使用以下命令安装源:

sudo apt-get updatesudo apt-get install linux-source

007Ys3FFgy1h1omqpe82sj30ic0c6tah

如果愿意,还可以安装此软件包的不同版本(例如linux-source-4.8.0)。您将在/usr/src/目录中找到已安装的文件,因此请在那里导航并查看内容:

cd /usr/src/ls

您将看到一个以结尾的文件。焦油bz2. 这是您将使用的源。使用以下命令提取:

sudo tar xjvf linux-source-4.4.0.tar.bz2

当然,请确保用正确的名称替换文件。文件将相当大,所以过程将需要一点时间!

替代方法

如果您愿意,您可以从官方的Linux内核网站上获得您的源代码。我建议只有在Linux操作系统没有提供的情况下才这样做。选择所需的版本并下载。如果你通过这个途径,你应该下载到一个空文件夹。这样,如果你想在将来编译更多的内核,你会有一个很好的文件夹来组织它们。

007Ys3FFgy1h1omqq539yj30im0dnmy8

完成此操作后,使用以下命令提取文件:

tar xJvf linux-4.9.11.tar.xz

007Ys3FFgy1h1omqqp7m7j30in0ce3z0

确保使用的文件名与下载的版本匹配!

自定义内核

在这一步中,您可以选择要除去内核的哪些部分。例如,内核为各种设备提供了许多不同的驱动程序。如果您不需要这种支持,去掉它们可以带来一些速度上的好处,同时还可以获得更小的内核。

先决条件

在继续之前,您必须安装一些程序,让您自定义和编译它。

在基于Debian的系统上,您需要构建基本包,除其他外:

sudo apt-get install build-essential gcc libncurses5-dev libssl-dev

libncurses5 dev包将使配置内核更容易,因此请确保安装它。其他Linux操作系统也会有一个类似的程序,但可能会使用不同的名称。例如,如果您使用的是软呢帽,则称为ncurses。

如果尚未安装,还需要GNU编译器集合(GCC)。这是负责将原始源代码翻译成计算机可以理解的东西的工具。也就是说,编译。

安装了这些程序后,打开终端,以便您在提取的Linux源文件夹中。例如,如果使用linux源方法,您将执行以下操作:

cd /usr/src/linux-source-4.4.0

内核配置文件

在编译内核之前,您需要告诉GCC您希望如何完成它。您可以使用名为make的命令行工具来执行此操作。键入以下命令:

sudo make localmodconfig

这将创建一个名为.config的文件,它告诉GCC从内核源代码编译什么。makelocalmodconfig命令检测当前正在运行的内核组件,并将它们标记为编译。如果内核位于您自己的文件夹中,则不需要sudo就可以工作。

你可能会遇到下面这样的信息。只要按回车键就可以跳过它们——它们通常只是新的内核特性。

007Ys3FFgy1h1omqrdfarj30im0bkq40

然而,localmodconfig并不完美!如果您当前没有使用计算机的某些部分,它可能无法检测到它支持的所有内容。因此,您需要手动启用它们。或者,您可以完全跳过此步骤,改用下一个命令。这将使用与当前使用的选项相同的选项编译新内核。

如果您希望这样做,但之前使用过localmodconifg命令,请执行以下操作:

sudo make clean

这将给你一个干净的建设。如果以前用这些源代码编译过内核,也应该使用这个命令。

进一步配置

在内核源文件夹中,有一个名为.config的文件。这就是GCC用来选择编译内容的方法。代替手动编辑(不推荐),您将使用一些终端工具。这将使选择编译选项更加容易。

完成此操作后,请进一步微调:

sudo make nconfig

你会看到一个彩色菜单弹出。这是内核配置菜单。要四处导航,请使用箭头键。您可以按向右箭头键展开旁边带有--->号的条目。按向左箭头键,从这些子菜单中导航出来。

007Ys3FFgy1h1omqs5tdyj30ik0e2wfs

通过按空格键,可以切换旁边带有<gt;或[]符号的菜单项。这将在不同的菜单选项之间循环。如果您在内部看到*或M,那么将编译特定的内核组件。它们之间唯一的区别是M选项将在需要时加载。如果您正在编译一个不经常使用的驱动程序,这可能很有用。

如果您想了解有关特定开关的更多功能,请按F2键。您将看到对所编译内容的有用描述。

007Ys3FFgy1h1omqsr8bxj30ik0g5my0

完成后,按F9按钮保存并退出。

007Ys3FFgy1h1omqup047j30ik0e20tc

编译和安装内核

现在您已经创建了一个定制的make文件,您需要编译内核。键入以下命令:

sudo make -j$(nproc --all)

如果您从web上下载内核源,则不需要sudo。命令的第二部分利用所有CPU内核,帮助加快内核编译时间。如果您想在不发生太多打嗝的情况下将计算机用于其他任务,可以消除此问题,或者将数字更改为其他的(例如,-j2)。但是,这也会使编译速度减慢!

这一过程可能而且将需要很长时间。你选择编译的越少,它就越短。即便如此,你还是需要耐心。

然后,输入此命令以完成编译内核的其余部分:

sudo make modules_install

要实际使用此内核,您需要输入以下命令:

sudo make install

这将自动将内核复制到/boot文件夹并生成适当的文件以使其正常工作。

使用grub交换内核

如果在安装新内核后重新启动,系统可能无法工作!这通常是由于编译不正确的内核(也就是说,没有很好地支持您的计算机)。举个例子,我自己的笔记本电脑。为了防止这种情况发生,我建议编辑GRUB以便它可以切换回旧的内核。为此,请使用以下命令:

sudo nano /etc/default/grub

007Ys3FFgy1h1omqv9g4ij30il0c6jsx

在GRUB#U HIDDENŠU TIMEOUT和GRUBŠU HIDDENŠTIMEOUTŠ安静线前放置一个Š标志。之后,通过运行以下命令保存这些更改:

sudo grub-mkconfig -o /boot/grub/grub.cfg

007Ys3FFgy1h1omqvwawwj30hs0dcmxg

现在,如果你重新启动你的电脑,你可以切换到一个旧的内核,如果你的新内核不工作。只需转到高级选项菜单项并选择要引导的内核。如果一切顺利,恭喜你!您将使用自己编译的内核。

你有兴趣编译更多的内核吗?其他程序?你觉得值得吗?

图片来源:chombosan/Shutterstock

  • 发表于 2021-03-15 10:33
  • 阅读 ( 158 )
  • 分类:IT

你可能感兴趣的文章

这些是最难安装的linux操作系统吗?

...他事情也是如此。许多人将面临的一个很大的不同点是,如何将这样一个系统安装到计算机上。 ...

  • 发布于 2021-03-13 01:34
  • 阅读 ( 530 )

一个尺寸不适合所有人:为什么软件不能普遍兼容

...操作系统工作需要一点(只是一点,我保证)关于软件是如何**的知识。 ...

  • 发布于 2021-03-13 08:34
  • 阅读 ( 203 )

如何用gentoo完全控制你的电脑

...inux操作系统。在Linux发行版(“发行版”)中,它的本地编译源代码是独一无二的。与传统操作系统相比,Linux发行版提供了更大的灵活性,而Gentoo则充分利用了自己动手的心态。 ...

  • 发布于 2021-03-13 12:40
  • 阅读 ( 280 )

为什么几乎没有人把linux称为“gnu/linux”

...桌面依赖的很酷的工具。80年代创建的关键工具包括GCC(编译C的工具)、Emacs(文本编辑器)、Bash和各种仍在使用的命令行实用程序。 ...

  • 发布于 2021-03-13 20:45
  • 阅读 ( 172 )

为什么使用哪种linux操作系统无关紧要

...在很大程度上,Linux提供了一种很好的体验,不管您决定如何运行它。不管它是一个拱形系统,还是一个基本的操作系统,这其实并不重要。所以自豪地使用任何Linux操作系统。 ...

  • 发布于 2021-03-15 05:08
  • 阅读 ( 162 )

10种检查运行哪个linux版本的方法

... 如何检查linux发行版和内核版本 ...

  • 发布于 2021-03-19 19:21
  • 阅读 ( 217 )

如何从linux命令行查看二进制文件

...。文件里有一大堆马厩,可以帮你分析。我们将向您展示如何使用这些工具。 识别文件类型 文件通常具有一些特性,允许软件包识别它是哪种类型的文件,以及其中的数据表示什么。尝试在MP3音乐播放器中打开PNG文件是没有...

  • 发布于 2021-04-02 04:41
  • 阅读 ( 363 )

什么是linux发行版,它们之间有什么不同?

...东西,以方便用户。它们包括不同的默认软件,比如Ubuntu如何包括Unity,Ubuntu的衍生产品如何包括其他桌面环境,Fedora如何包括gnomeshell,Mint如何包括cinumon或MATE。 许多应用程序还使用不同的包管理器、配置实用程序和其他软件...

  • 发布于 2021-04-09 03:07
  • 阅读 ( 204 )

linux和bsd有什么区别?

...为什么它们都存在? 这里有很多不同之处,尤其是关于如何构建操作系统并授予许可证的哲学上的不同。不过,这应该有助于您了解基础知识。 基础知识 大多数人所说的“Linux”实际上并不是Linux。Linux技术上只是Linux内核—...

  • 发布于 2021-04-09 05:00
  • 阅读 ( 190 )

大辩论:是linux还是gnu/linux?

...为Linux。你会发现它在这里被称为“Linux”,在这里关于如何极客和其他地方,因为它是一个更常见的术语,读者可以立即理解。 最后,我们将引用1996年Linus Torvalds的一句话: Umm, this discussion has gone on quite long enough, thank you very mu...

  • 发布于 2021-04-12 01:30
  • 阅读 ( 157 )
figoim486
figoim486

0 篇文章

相关推荐