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


41

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

我找到了这个Wiki页面该页面基本上是该博客的镜像,并且有很多步骤(git等)对我来说似乎无用。

在较早的发行版/发行版中,我曾经创建过一个.config文件并修改了(Makefile如果需要),然后就可以运行make了。

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


1
值得一
科林·伊恩·金

Answers:


39

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.orig.tar.gz

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

2.要.config使用自己的库构建内核,请使用“老式的” Debian make-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条目等。


为什么他们不告诉您有关此差异的原因,对我而言,差异只是一个差异,它可以包含所有内容。
user827992 2012年

我不知道,您将不得不问他们(Google for Canonical Kernel Team)。我刚刚告诉过您如何建造它;)
ish

1
好的,最后一个问题,如何应用此压缩差异?:DI必须进入linux-3.2.0目录并运行patch -p1 <../patch.diff
user827992 2012年

1
没有必要申请的差异; apt-get source ...已经为您做到了!
ish 2012年

2
-1您称它为“老式”,我称其为过时。fakeroot debian/rules editconfigsfakeroot debian/rules cleanfakeroot debian/rules binary是正确的,没有问题的方式。
Aleksandr Dubinsky

19

步骤如下。该过程基于nixCraft的如何:编译Linux内核2.6”-但已相当现代化。

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

您可以从kernel.org获取上游内核源代码。这里将使用版本3.16.1(截至撰写本文时最新的稳定内核)。因此,如果您使用的是其他版本,则可能需要修改这些命令。

当前在中提供了内核源代码。焦油xz存档,因此请按所需的任何版本单击“ 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

maketarget xconfig和提供了两种合理的用户友好方式来配置进入内核的内容menuconfig

xconfig运行menuconfig基于文本的图形配置实用程序(即,其界面完全显示在终端中)。每个都需要一些build-essential 没有提供的附加软件。安装基本版

要以图形方式进行配置,请安装 libqt4-dev安装libqt4-dev pkg-config安装pkg-config并运行make xconfig

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

要在终端中进行配置,请安装libncurses5-dev(感谢 Hannu提供此信息)并运行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

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

本部分部分基于Kernel / Compile中的信息

有了现在需要的内核,它需要:

生成您的initramfsmkinitramfs

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

更新GRUB2引导加载程序的配置时(自9.10 开始,这是Ubuntu中的默认设置),应自动检测新内核并添加一个选项以从中引导。

sudo update-grub

尝试您的内核。

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

要使您的内核(或另一个内核)成为默认内核,请参阅如何更改GRUB引导顺序?


步骤3,make menuconfig要求apt get install libncurses5-dev
Hannu

@Hannu谢谢,我只是完全忘记提及这一点。64位系统用户也可能需要“ ia32-libs”才能支持运行的32位程序。
2014年

也可能会找到一个与版本无关的程序包。。。我不确定是否有。
Hannu 2014年

@EliahKagan谢谢。现在可以,还是应该将其完全删除?我这样做没有问题。
2014年

1
-1这不会产生Ubuntu内核。它甚至不产生.deb文件。这是解决问题的良方。
Aleksandr Dubinsky

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.