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

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

我发现这个wiki页面基本上是这个博客的镜像,并且有很多步骤( 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构建库存内核,请使用“老式”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是用于标识此构建的自定义字符串。

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

这是步骤。 这个过程基于nixCraft的如何:编译Linux内核2.6 -但是现代化了很多。

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

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

目前提供内核源代码。 焦油 。 xz档案,所以点击你想要的任何版本的“tar.xz”链接:

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

在转到您下载存档的目录后,您可以使用tar压缩它:

 tar xf linux-3.16.1.tar.xz 

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

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

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

make targets xconfigmenuconfig提供了两种合理的用户友好方式来配置内核中的内容。

xconfig运行图形配置实用程序,而menuconfig是基于文本的(即,其界面完全显示在您的终端中)。 每个都需要一些build-essential 提供的额外软件 安装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.1vmlinuz-3.16.1的副本), config-3.16.1 (存储内核配置参数的文本文件)和/boot System.map-3.16.1 ( 内核符号查找表 )放在一起。 有关更多详细信息,请参阅Hadron和man installkernel 发布的comp.os.linux.misc文章 。

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

本节部分基于内核/编译中的信息 。

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

  • 引导加载程序配置中的一个条目,因此您可以选择并从中引导。

  • 初始RAM文件系统 ,内核从中加载驱动程序并安装/ filesystem的环境 。

    (如果您正在安装旧内核或已将内核配置为使用devfs而不是新的udev ,则可能需要或希望设置初始ramdisk 。如果您知道需要,请参阅man initrd 。)

使用mkinitramfs 生成initramfs

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

当您更新GRUB2引导加载程序的配置时 – 自9.10以来一直是Ubuntu中的默认配置 – 应该自动检测新内核并添加一个从它启动的选项。

 sudo update-grub 

试试你的内核。

现在您可以重新启动以测试新内核。 您可能需要在引导期间按住Shift以查看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