如何编译内核 - Debian Etch
版本1.0
作者:Falko Timme
每个发行版都有一些特定的工具来从源头构建定制内核。 本文是关于在Debian Etch系统上编译内核的。 它描述了如何使用www.kernel.org ( vanilla内核 )中最新的未修改的内核源构建定制内核,以使您独立于您的发行版提供的内核。 它还显示如果您需要不在其中的功能,如何修补内核源。
我不会保证这将为您工作!
1初步说明
我将介绍两种编译新内核的方式。 使用第一种方法,您将最终得到可以安装在系统上的内核.deb
包,并且您可以与其他人共享并安装在其他Debian Etch系统上。
第二种方法是将内核编译成“传统”的方式。 这种方式适用于任何Linux发行版,但当然你最终不会使用内核.deb
包。
2构建内核.deb包
本章介绍如何构建内核,最后使用可以安装并与其他人共享的.deb
包。
2.1安装所需的内核编译包
首先我们更新我们的包数据库:
apt-get update
然后我们安装所有需要的软件包,如下所示:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
2.2下载内核源码
接下来我们将所需的内核下载到/ usr / src
。 请访问www.kernel.org并选择要安装的内核,例如linux-2.6.21.3.tar.bz2
(您可以在这里找到所有2.6内核: http : //www.kernel.org/pub/linux/kernel /v2.6/ )。 然后,您可以将其下载到/ usr / src,
如下所示:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
然后我们打开内核源代码并创建一个symlink linux到内核源目录:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux
2.3将补丁应用于内核源(可选)
有时候,默认情况下,您需要新内核不支持的硬件驱动程序,或者您需要对虚拟化技术的支持或尚未将其提供给内核的其他一些尖端技术。 在所有这些情况下,您必须修补内核源(只要有可用的补丁可用...)。
现在我们假设你已经下载了/ usr / src
所需的补丁(在本例中称之为patch.bz2
)。 这是您将其应用于内核源(您仍然必须在/ usr / src / linux
目录中):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
第一个命令只是一个测试,它对您的来源没有任何影响。 如果没有显示错误,可以运行实际应用补丁的第二个命令。 如果第一个命令显示错误,请不要这样做!
您还可以将内核预制应用于内核源。 例如,如果您需要的功能仅在内核2.6.22-rc3中可用,但是该内核尚未发布完整的源。 相反, 补丁2.6.22-rc3.bz2
可用。 您可以将该补丁应用于2.6.21内核源代码,但不适用于内核2.6.21.1或2.6.21.2等。这一点在http://kernel.org/patchtypes/pre.html上进行了说明 :
Prepatches相当于Linux的alpha版本; 他们住在档案馆的测试目录中。 应使用补丁(1)实用程序将其应用于以前完整版本的源代码,具有3部分版本号(例如,2.6.12-rc4 prepatch应该应用于2.6.11内核源,而不是,例如,2.6.11.10。)
因此,如果要编译2.6.22-rc3内核,则必须下载2.6.21内核源代码( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21)。 tar.bz2 ),而不是内核2.6.21.3!
这是如何将2.6.22-rc3补丁应用于内核2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
2.4配置内核
使用当前工作内核的配置作为新内核的基础是个好主意。 因此,我们将现有配置复制到/ usr / src / linux中
:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
然后我们跑
make menuconfig
这将启动内核配置菜单。 转到加载备用配置文件
,并选择.config
(其中包含当前工作内核的配置)作为配置文件:
然后浏览内核配置菜单并进行选择。 完成后,选择退出
,回答以下问题( 是否要保存新的内核配置?
)与是
:
2.5构建内核
要构建内核,请执行以下两个命令:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
在--append-to-version =之后,
您可以编写任何可以帮助您识别内核的字符串,但必须以减号( - )开头,不能包含空格。
现在耐心等待,内核编译可能需要几个小时,具体取决于您的内核配置和处理器速度。
2.6安装新内核
成功的内核构建之后,您可以在/ usr / src目录
中找到两个.deb
包。
cd /usr/src
ls -l
在我的测试系统上,它们被称为linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
(其中包含实际内核)和linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb
(如果要稍后再编译其他内核模块,则包含所需的文件)。 我这样安装它们:
dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
(您现在甚至可以将两个.deb
文件传输到其他Debian Etch系统,并以完全相同的方式安装它们,这意味着您不需要再次编译内核。)
而已。 GRUB引导加载程序配置文件/boot/grub/menu.lst
已自动修改,并在/ boot中
创建新内核的ramdisk。
现在重新启动系统:
shutdown -r now
在引导提示符下,选择您的新内核(应默认选择):
如果一切顺利,应该提出新的内核。 您可以通过运行来检查它是否真的正在使用新的内核
uname -r
这应该显示类似的东西
2.6.21.3-custom
如果系统没有启动,请重新启动它,并在引导提示符下选择您的旧内核。 您现在可以再次尝试编译一个工作的内核。 不要忘记从/boot/grub/menu.lst
中删除不工作内核的节
。