如何编译内核 -  Debian(Sarge)的方式

如何编译内核 - Debian(Sarge)方式

版本1.0
作者:Falko Timme

每个发行版都有一些特定的工具来从源头构建定制内核。 本文是关于在Debian Sarge系统上编译内核的。 它描述了如何使用www.kernel.orgvanilla内核 )中最新的未修改的内核源构建定制内核,以使您独立于您的发行版提供的内核。 它还显示如果您需要不在其中的功能,如何修补内核源。

我在VMware Server中的Debian Sarge上进行了测试。

我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!

1初步说明

本教程的目标是构建一个可以安装在系统上的内核.deb包,并且您可以与其他人共享并安装在其他Debian Sarge系统上,这与“传统”方式相比是一个很大的优势最后一个.deb包。

2安装所需的内核编译包

首先我们更新我们的包数据库:

apt-get update

然后我们安装所有需要的软件包,如下所示:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential udev

请注意,我们刚刚安装了udev ,它替换了新内核中的旧的(弃用的) devfs 。 默认的Debian Sarge内核(2.6.8)仍然使用在新内核中不再可用的devfs

3下载内核源码

接下来我们将所需的内核下载到/ usr / src 。 请访问www.kernel.org并选择要安装的内核,例如linux-2.6.18.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.18.3.tar.bz2

然后我们打开内核源代码并创建一个symlink linux到内核源目录:

tar xjf linux-2.6.18.3.tar.bz2
ln -s linux-2.6.18.3 linux
cd /usr/src/linux

4将补丁应用于内核源(可选)

有时候,默认情况下,您需要新内核不支持的硬件驱动程序,或者您需要对虚拟化技术的支持或尚未将其提供给内核的其他一些尖端技术。 在所有这些情况下,您必须修补内核源(只要有可用的补丁可用...)。

现在我们假设你已经下载了/ 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

第一个命令只是一个测试,它对您的来源没有任何影响。 如果没有显示错误,可以运行实际应用补丁的第二个命令。 如果第一个命令显示错误,请不要这样做!

如果您的补丁使用gzip( .gz )而不是bzip2( .bz2 )进行压缩,则会按如下方式修补内核:

gunzip -c /usr/src/patch.gz | patch -p1 --dry-run
gunzip -c /usr/src/patch.gz | patch -p1

您还可以将内核预制应用于内核源。 例如,如果您需要仅在内核2.6.19-rc6中可用的功能,但尚未为此内核释放完整的源。 相反, 补丁2.6.19-rc6.bz2可用。 您可以将该修补程序应用于2.6.18内核源代码,但不适用于2.6.18.1或2.6.18.2或2.6.18.3等内核源代码,这一点在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.19-rc6内核,你必须下载2.6.18内核源码( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18)。 tar.bz2 ),而不是内核2.6.18.3!

这是将2.6.19-rc6补丁应用于内核2.6.18的方法:

cd /usr/src 
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc6.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1

5配置内核

使用当前工作内核的配置作为新内核的基础是个好主意。 因此,我们将现有配置复制到/ usr / src / linux中

make clean && make mrproper
cp /boot/config-`uname -r` ./.config

然后我们跑

make menuconfig

这将启动内核配置菜单。 转到加载备用配置文件 ,并选择.config (其中包含当前工作内核的配置)作为配置文件:

然后浏览内核配置菜单并进行选择。 确保在General Setup --->()下指定内核版本标识字符串本地版本 - 附加到内核版本 。 我使用-default1 ,所以我们的内核.deb包将被命名为linux-2.6.18.3-default1_2.6.18.3-default1_i386.deb 。 请确保字符串包含一个数字(例如1,2,...),否则内核构建过程将导致错误。

请注意:安装linux-2.6.18.3-default1_2.6.18.3-default1_i386.deb后 ,决定编译另一个2.6.18.3内核的.deb包,使用不同的版本字符串,如-default2-默认3等,因为否则你不能安装你的新内核,因为dpkg抱怨说linux-2.6.18.3-default1_2.6.18.3-default1_i386.deb已经安装!

接下来请确保在设备驱动程序 - > Fusion MPT设备支持下启用Fusion MPT设备驱动程序。 我不知道这在所有平台上是否必要; 至少它是在我的(在VMware服务器上的Debian Sarge),因为否则您将在启动新内核时收到此错误消息:

/bin/cat: /sys/block/sda/dev: No such file or directory

这会导致内核恐慌。

然后浏览内核配置菜单的其余部分,并做出选择。 完成后,选择退出 ,回答以下问题( 是否要保存新的内核配置? )与

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏