什么是重新编译内核的简单方法?
我有兴趣在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”链接:
在转到您下载存档的目录后,您可以使用tar
压缩它:
tar xf linux-3.16.1.tar.xz
安装必要的构建工具并执行内核配置。
要获得Ubuntu的工具链 ( gcc
, make
等),请安装build-essential 元数据包:
sudo apt-get update sudo apt-get install build-essential
make
targets xconfig
和menuconfig
提供了两种合理的用户友好方式来配置内核中的内容。
xconfig
运行图形配置实用程序,而menuconfig
是基于文本的(即,其界面完全显示在您的终端中)。 每个都需要一些build-essential 不提供的额外软件 。
要以图形方式配置 ,请安装libqt4-dev 和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-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