重新编译内核的简单方法是什么?

重新编译内核的简单方法是什么?

我对在 Ubuntu 12.04 x86 64 位下编译新内核感兴趣。

我发现此维基页面这基本上是一面镜子这个博客还有很多步骤(git等等),但对我来说似乎没用。

对于早期版本/发行版,我曾经创建一个.config文件并Makefile根据需要进行修改,然后只需运行make即可完成。

在 Ubuntu 下有没有简单的方法可以做到这一点?

答案1

1.使用apt-get source下载Ubuntu版本的内核

apt-get source linux-image-$(uname -r)

给出一个包含以下内容的文件夹,例如:

linux-3.2.0 linux_3.2.0-26.41.dsc
linux_3.2.0-26.41.diff.gz  linux_3.2.0.原始版本

加粗的差异包括所有 Ubuntu/Debian 定制。

2. 要使用自己的内核构建库存内核.config,请使用“老式”的 Debianmake-kpkg方法

这是另类老式方法wiki 中描述:

sudo apt-get install kernel-package

如果您是第一次编译内核:

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

然后cd进入源目录(此处,linux-3.2.0),并运行make oldconfig以使用正在运行的内核的配置创建.config文件,或者将第三方复制.config到此目录。

根据您需要文本还是图形配置,安装:

(文本)

sudo apt-get install libncurses5 libncurses5-dev

(图解)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

然后运行:

(文本)

make menuconfig

(图解)

make xconfig

完成后,只需运行:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

其中N,表示并行运行的作业数(通常是您拥有的 CPU 数量),并且my-very-own-kernel是用于标识此构建的自定义字符串。

完成后,内核映像和头文件将作为父目录中的 debs 准备好;您可以使用 安装它们sudo dpkg -i,它还将负责添加 GRUB 条目等。

答案2

步骤如下。此程序基于nixCraft如何编译 Linux 内核 2.6——但却实现了相当大的现代化。

下载并提取您想要构建的内核的源代码。

你可以得到上游内核源代码位于内核网站。 版本3.16.1(本文撰写时的最新稳定内核)将在此使用。因此,如果您使用的是其他版本,则可能需要修改这些命令。

内核源代码目前在 中提供。柏油西泽档案,因此请单击您想要的版本的“tar.xz”链接:

来自 kernel.org 的屏幕截图,显示可供下载的内核源档案

cd进入你下载的档案目录,你可以使用tar

tar xf linux-3.16.1.tar.xz

安装必要的构建工具并执行内核配置。

要获取 Ubuntu 的工具链gccmake等等)安装构建必需品安装 build-essential元包:

sudo apt-get update
sudo apt-get install build-essential

make目标xconfig和提供了两种相当用户友好的方式来配置内核的内容menuconfig

xconfig运行图形配置实用程序,而menuconfig基于文本(即其界面完全显示在终端内)。每个都需要一些额外的软件不是由...提供构建必需品安装 build-essential

图形化配置, 安装libqt4-dev安装 libqt4-devpkg 配置安装 pkg-config并运行make xconfig

sudo apt-get install libqt4-dev pkg-config
make xconfig

在终端中配置,安装libncurses5-dev(感谢韩努获取此信息)并运行make menuconfig

sudo apt-get install libncurses5-dev
make menuconfig

构建配置好的内核。

首先运行这个来编译内核并创建vmlinuz

make

vmlinuz是“内核”。具体来说,它是内核映像,将被解压缩并加载到内存中GRUB或其他引导加载程序你用。

然后构建可加载内核模块

make modules

安装您新构建的内核。

假设这些make命令成功完成,现在是时候安装新内核了。首先安装模块:

sudo make modules_install

然后安装内核本身:

sudo make install

这将放置vmlinuz-3.16.1(的副本vmlinuz)、config-3.16.1(存储内核配置参数的文本文件)和System.map-3.16.1(的内核符号查找表)中/boot。有关更多详细信息,请参阅Hadron 发布的 comp.os.linux.misc 帖子man installkernel

最终设置,因此内核可以启动并引导系统:

本节部分基于内核/编译

现在内核已经达到了它需要的位置,它需要:

生成 initramfsmkinitramfs

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

当你更新 GRUB2 引导加载程序的配置时——该配置已Ubuntu 中的默认设置自 9.10 起——应该自动检测新内核并添加从其启动的选项。

sudo update-grub

尝试一下你的内核。

现在您可以重新启动以测试新内核。您可能需要在启动过程中按住ShiftEsc按以查看 GRUB 启动菜单,您可以在其中选择已安装的不同内核。

要将你的内核(或其他内核)设为默认内核,请参见如何更改 GRUB 启动顺序?

答案3

构建Ubuntu内核(与 vanilla 相反)可以在这里找到:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

我不会复制整个 wiki,但我会列出编译您当前安装的 Ubuntu 内核版本的最少步骤。(要获取最新版本,请克隆即将发布的 Ubuntu 版本的内核 git 存储库。)在 Ubuntu 16.04 上测试。

# Get source code
apt-get source linux-image-$(uname -r)

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

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb

答案4

Ubuntu git 内核存储库

遵循以下想法https://help.ubuntu.com/community/Kernel/Compile并进一步解释为什么我认为配置看起来正确我可以在哪里获得 11.04 内核 .config 文件?

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
cd linux
git checkout Ubuntu-4.15.0-36.39
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
cp debian/build/build-generic/.config .
make -j `nproc`

在 Ubuntu 18.04 中测试。

相关内容