当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

我发现this wiki page基本上是this blog的镜像,并且有很多步骤(git等)对我来说似乎没用。

使用早期的发行版/发行版,我曾经创建了一个.config文件并在需要时修改了Makefile,然后运行make就完成了。

在Ubuntu下有一个简单的方法吗?

最佳解决方法

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构建库存内核,请使用”old-fashioned” Debian make-kpkg方法

这是wiki中描述的alternate old-fashioned way

sudo apt-get install kernel-package

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

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

然后将cd放入源目录(此处为linux-3.2.0),并运行make oldconfig以使用正在运行的内核配置创建.config文件,或将third-part .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是用于标识此版本的自定义字符串。

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

次佳解决方法

这是步骤。此程序基于nixCraftHow to: Compile Linux kernel 2.6 – 但现代化程度很高。

下载并解压缩您要构建的内核的源代码。

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

目前提供内核源代码。 tarxz归档,所以无论你想要什么版本点击”tar.xz”链接:

kernel,compiling,ubuntu

cd到您下载存档的目录后,您可以使用tar提取它:

tar xf linux-3.16.1.tar.xz

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

要获得Ubuntu的toolchain(gccmake等),请安装build-essential元数据包:

kernel,compiling,ubuntu

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

make目标xconfigmenuconfig提供了两种合理的user-friendly配置内核的方法。

xconfig运行图形配置实用程序,而menuconfig是text-based(即,其界面完全显示在您的终端内)。每个都需要一些build-essential不提供的附加软件。

kernel,compiling,ubuntu

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

kernel,compiling,ubuntu

kernel,compiling,ubuntu

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或您使用的任何其他boot loader解压缩并加载到内存中。

然后构建loadable kernel modules

make modules

安装新构建的内核。

假设这些make命令成功完成,则需要安装新内核。首先安装模块:

sudo make modules_install

然后安装内核本身:

sudo make install

这将vmlinuz-3.16.1(vmlinuz的副本),config-3.16.1(存储内核配置参数的文本文件)和/boot中的System.map-3.16.1(kernel symbol lookup table)放在一起。有关更多详细信息,请参阅this comp.os.linux.misc post by Hadron和man installkernel。

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

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

现在内核需要它,它需要:

使用mkinitramfs生成initramfs:

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

更新GRUB2引导加载程序的配置时 – 自9.10– should automatically detect the new kernel以来一直是the default in Ubuntu并添加一个从中引导的选项。

sudo update-grub

试试你的内核。

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

要使您的内核(或其他内核)成为默认值,请参阅我如何更改GRUB引导顺序?

第三种解决方法

可以在此处找到构建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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2224.html,未经允许,请勿转载。