如何编译内核 - Ubuntu方式
版本1.0
作者:Falko Timme
每个发行版都有一些特定的工具来从源头构建定制内核。 本文是关于在Ubuntu系统上编译内核的。 它描述了如何使用www.kernel.org ( vanilla内核 )中最新的未修改的内核源构建定制内核,以使您独立于您的发行版提供的内核。 它还显示如果您需要不在其中的功能,如何修补内核源。
我已经在Ubuntu 6.10服务器(“Edgy Eft”)和Ubuntu 6.06桌面(“Dapper Drake”)上测试过。
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
我更喜欢以root
用户身份
执行所有步骤。 所以如果你还没有创建根登录,你现在应该这样做:
sudo passwd root
然后,以root身份登录:
su
如果您希望以普通用户而不是root身份工作,请记住将sudo
放在本教程中显示的所有命令的前面。 所以当我跑
apt-get update
你应该跑
sudo apt-get update
而是等
Ubuntu 6.10上的1.1 / bin / sh(“Edgy Eft”)
在Ubuntu 6.10中, / bin / sh
默认是/ bin / dash
的符号链接。 / bin / dash
似乎在从源代码编译软件时出现问题,至少我有这样的印象。 这就是为什么我把/ bin / sh
一个符号链接到/ bin / bash
。
如果你在Ubuntu 6.10上,你应该现在这样做:
rm -f /bin/sh
ln -s /bin/bash /bin/sh
2安装所需的内核编译包
首先我们更新我们的包数据库:
apt-get update
然后我们安装所有需要的软件包,如下所示:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
3下载内核源码
接下来我们将所需的内核下载到/ usr / src
。 请访问www.kernel.org并选择要安装的内核,例如linux-2.6.18.1.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.1.tar.bz2
然后我们打开内核源代码并创建一个symlink linux到内核源目录:
tar xjf linux-2.6.18.1.tar.bz2
ln -s linux-2.6.18.1 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
第一个命令只是一个测试,它对您的来源没有任何影响。 如果没有显示错误,可以运行实际应用补丁的第二个命令。 如果第一个命令显示错误,请不要这样做!
您还可以将内核预制应用于内核源。 例如,如果您需要的功能仅在内核2.6.19-rc4中可用,但是该内核尚未发布完整的源。 相反, 补丁2.6.19-rc4.bz2
是可用的。 您可以将该修补程序应用于2.6.18内核源代码,但不适用于2.6.18.1或2.6.18.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.19-rc4内核,则必须下载2.6.18内核源代码( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18)。 tar.bz2 ),而不是内核2.6.18.1!
这是将2.6.19-rc4补丁应用于内核2.6.18的方法:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1