如何编译内核-Debian方法
如何编译内核-Debian方法
每个发行版都有几个用于从源代码构建自定义内核的特定工具。本文是关于在Debian(Etch)系统上编译内核的。从中了解如何使用最新的未更改内核源构建自定义内核。 www.kernel.org (((香草仁)使其独立于发行版提供的内核。它还显示了在您需要内核源代码不存在的功能时如何修补内核源代码。
我不保证这对您有用!
1注意事项
描述了两种编译新内核的方法。第一种方法创建一个kernel.deb软件包,您可以将其安装在系统上并与他人共享以安装在其他Debian Etch系统上。
第二种方法是以“传统”方式编译内核。此方法适用于任何Linux发行版,但当然不会以内核.deb包结尾。
2构建内核.deb包
本章介绍如何构建内核,安装内核以及创建可以与他人共享的.deb软件包。
2.1安装内核编译所需的软件包
首先,更新软件包数据库。
apt-get update
然后安装所有必需的软件包,例如:
apt-get install kernel-package ncurses-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/srcwget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
然后解压缩内核源代码,并在内核源目录中创建一个符号链接Linux。
tar xjf linux-2.6.21.3.tar.bz2ln -s linux-2.6.21.3 linuxcd /usr/src/linux
2.3将补丁应用到内核源(可选)
您可能需要用于默认情况下新内核不支持的硬件的驱动程序,或者您可能需要对虚拟化技术或内核中尚未内置的其他尖端技术的支持。在所有这些情况下,您都需要修补内核源代码(如果有可用的补丁程序……)。
现在,假设您将所需的补丁程序(在本示例中称为patch.bz2)下载到了/ usr / src。这是应用于内核源代码的方法(您仍然需要位于/ usr / src / linux目录中)。
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-runbzip2 -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:
该预修补程序等效于Linux的alpha发行版。它们位于存档的测试目录中。必须使用patch(1)实用程序将它们应用于具有三部分版本号的先前完整发行版源代码(例如,2.6.11内核源代码为2.6.12-rc4 prepatch),例如,必须为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)在第3步中,而不是内核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.bz2cd /usr/src/linuxbzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-runbzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
2.4内核配置
我们建议您使用当前正在运行的内核的配置作为新内核的基础。因此,将现有配置复制到/ usr / src / linux。
make clean && make mrpropercp /boot/config-`uname -r` ./.config
然后跑
make menuconfig
显示内核配置菜单。[代替構成ファイルのロード]转到并选择.config(包括当前正在运行的内核配置)作为配置文件。
然后浏览并选择内核配置菜单。完成的[終了]选择之后,询问下一个问题(是否要保存新的内核配置?)[はい]我会回答。
2.5构建内核
要构建内核,请运行两个命令:
make-kpkg cleanfakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
在–append-to-version =之后,您可以编写有助于识别内核的任何字符串,但该字符串以减号(-)开头,并且不能包含空格。
请稍等。编译内核可能需要几个小时,具体取决于内核配置和处理器速度。
2.6安装新内核
如果内核构建成功,您将在/ usr / src目录中找到两个.deb软件包。
cd /usr/srcls -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.debdpkg -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中删除不起作用的内核节。
3内核构造传统方法
本章介绍了可在任何Linux系统上使用的各种方法(除了创建RAM磁盘和更新引导加载程序之类的详细信息之外)。当然,它永远不会以内核.deb包结尾。
3.1安装内核编译所需的软件包
首先,更新软件包数据库。
apt-get update
然后安装所有必需的软件包,例如:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
3.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/srcwget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
然后解压缩内核源代码,并在内核源目录中创建一个符号链接Linux。
tar xjf linux-2.6.21.3.tar.bz2ln -s linux-2.6.21.3 linuxcd /usr/src/linux
3.3将补丁应用到内核源(可选)
您可能需要用于默认情况下新内核不支持的硬件的驱动程序,或者您可能需要对虚拟化技术或内核中尚未内置的其他尖端技术的支持。在所有这些情况下,您都需要修补内核源代码(如果有可用的补丁程序……)。
现在,假设您将所需的补丁程序(在本示例中称为patch.bz2)下载到了/ usr / src。这是应用于内核源代码的方法(您仍然需要位于/ usr / src / linux目录中)。
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-runbzip2 -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:
该预修补程序等效于Linux的alpha发行版。它们位于存档的测试目录中。必须使用patch(1)实用程序将它们应用于具有三部分版本号的先前完整发行版源代码(例如,2.6.11内核源代码为2.6.12-rc4 prepatch),例如,必须为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)在第3步中,而不是内核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.bz2cd /usr/src/linuxbzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-runbzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
3.4内核配置
我们建议您使用当前正在运行的内核的配置作为新内核的基础。因此,将现有配置复制到/ usr / src / linux。
make clean && make mrpropercp /boot/config-`uname -r` ./.config
然后跑
make menuconfig
显示内核配置菜单。[代替構成ファイルのロード]转到并选择.config(包括当前正在运行的内核配置)作为配置文件。
然后浏览并选择内核配置菜单。完成的[終了]选择之后,询问下一个问题(是否要保存新的内核配置?)[はい]我会回答。
3.5构建和安装内核
要构建内核,请运行以下命令:
make allmake modules_installmake install
请稍等。编译内核可能需要几个小时,具体取决于内核配置和处理器速度。
3.6安装后步骤
现在,您已经安装了新内核,但是新内核需要RAM磁盘(否则系统可能无法启动!)。 您需要将新内核通知GRUB引导加载程序。
首先,执行此操作。
depmod 2.6.21.3apt-get install yaird
然后使用以下命令创建RAM磁盘:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3
使用Debian Etch设置GRUB非常容易。我们要做的就是做
update-grub
这将检测新的内核和ramdisk并更新/boot/grub/menu.lst。
然后重新启动系统。
shutdown -r now
在启动提示符下,选择新内核(默认情况下应选择它)。如果一切顺利,就会想到一个新的内核。您可以运行以查看您是否实际上正在使用新内核。
uname -r
它应该看起来像这样
2.6.21.3
如果系统无法引导,请重新引导系统并在引导提示符下选择旧内核。现在,您可以重试编译正在运行的内核。不要忘记从/boot/grub/menu.lst中删除不起作用的内核节。
4个链接
- Debian: http://www.debian.org
- Linux内核档案: http://www.kernel.org