构建自己的内核,仅需基础知识

构建自己的内核,仅需基础知识

我想继续安装 ubuntu 但不升级其内核。有什么建议我该怎么做吗?

谢谢,Zain

答案1

这是一个有趣的问题。我认为您无法在保留内核的同时进行自动升级,因为升级过程将更新 grub 以指向新内核。它应该保留您以前的内核。

处理此问题的最简单方法是进行完整更新,但在允许机器重新启动之前,请返回 grub 并让其指向旧内核。该过程在此处讨论:

将“较旧”的内核设置为默认 grub 条目

您还可以下载内核源代码,git-checkout 您想要构建的内核的精确版本,重建源代码,然后执行更新(无需重新启动),然后从构建目录安装内核和模块(它会自动写入 grub,覆盖更新中发生的一切)。

第二种方法还有一个好处,就是可以让你精确选择要获取的内核版本。Ubuntu 内核的构建方法如下:

https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

我会使用 git-clone 选项,而不是 apt-get,对我来说它似乎更直接一些。

构建自己的内核,仅需基础知识

只是给你一些关于如何执行此操作以及如何安装内核的具体信息,假设已安装 git,并且有足够的磁盘空间(大约 25GB 可用)。所有这些都记录在上面的普通 Ubuntu wiki 空间中,但这可能很难理解。

你需要几个包,所以

sudo apt-get build-dep linux-image-$(uname -r)

从 Ubuntu 获取正确的内核构建行

您需要了解您使用的 Ubuntu 发行版本。

lsb_release --short --code
bionic

然后,您可以克隆当前 Ubuntu 版本的特定 Ubuntu 内核行,对我来说这是仿生的。

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git
cd ubuntu-bionic

为感兴趣的内核设置 git 存储库

现在,您需要选择与感兴趣的内核版本相关的提交 id。

查找你正在使用的内核版本

uname --kernel-release

对我来说,这将返回 4.15.0-38-generic。Ubuntu 发布过程标记不同的提交,在本例中,它们使用“Ubuntu-”。由于我们可能不知道额外的内容,因此要找到特定版本的标签

git tag | grep 4.15.0.38

它返回 Ubuntu-4.15.0-38.41,所以让我们检查一下以便可以构建它;我们只是以无头模式检查,因为此时我们不会尝试修改任何代码,只是重建现有代码。

git checkout Ubuntu-4.15.0-38.41

让我们获取该机器的配置文件,用于此特定的 Ubuntu 内核修订版。这对于确保您实际构建感兴趣的内核至关重要。

cp /boot/config-4.15.0.38-generic .config

让我们验证一下.config 文件是否正确。

make oldconfig

如果上述选项提示您有任何问题,则表示您的.config文件与您为内核签出的提交 ID 不匹配。请重试。

如果您确实尝试将内核版本升级到较新的版本,系统可能会提示您输入新选项。要接受默认设置,您可以使用:

yes '' | make oldconfig

构建内核

现在,让我们构建内核和内核模块。使用 -jX,其中 X 是您的构建机器支持的线程数。如果您不知道,请从 /proc/cpuinfo 获取,例如:

calc $(cat /proc/cpuinfo | grep processor | tail -1 | sed -e 's/.* //') + 1

这将为我的构建服务器返回 8,所以是 -j8:

make -j8 vmlinux bzImage modules

让我们按照原始问题进行更新

sudo apt-get update; sudo apt-get upgrade

这将升级机器,可能会覆盖机器启动时使用的内核版本。要安装新内核并将其设为默认内核,请执行以下操作:

sudo make modules_install; sudo make install

相关内容