如何获取发布版内核
在多数情况下,发布版内核的源代码都是按照各发布版所采用的方法进行打包的。因此要获取发布版内核的源代码,只需要下载源代码包,进行安装或解压缩就可以了。
下面选取具有代表性的发布版Fedora和Ubuntu为例,讲解如何获取这两种发布版内核源代码。这里选取的发布版的版本分别为Fedora 14和Ubuntu 10.10。
Fedora
在Fedora中,内核源码是作为源码RPM(SRPM)提供的。使用yum-units包里所带的yumdownloader下载SRPM。此后要使用的yum-builddep也是yum-units包中所带的,所以如果事先没有安装,首先请安装这个工具包。
可以执行下列命令来下载内核的SRPM。
$yumdownloader—source kernel
在笔者的环境下,下载的是kernel-2.6.35.11-83.fc14.src.rpm。
如前文所述,发布版内核都带有自身特有的补丁。SRPM是将vanilla内核的源代码和补丁分开放置的,补丁在创建过程中被分配给vanilla内核的源代码。所以要获取发布版内核的源代码,就要完全执行RPM的创建过程,但并不完全执行。虽然每个SRPM在创建RPM时都需要用到不同的源码包,但只要执行下列命令,就能够安装创建Linux内核所需的所有源码包。这条命令请在root权限下执行。
yum-builddep kernel-2.6.35.11-83.fc14.src.rpm
安装SRPM需要执行下列命令。安装SRPM,就是指将所包含的文件解压缩。SRPM包含的文件将解压缩到在主目录下生成的rpmbuild的几个子目录下。
小贴士:生成rpmbuild目录的位置,是通过%_topdir这个rpm的宏变量来设置的。在以前的发布版中是在/usr/src/redhat下的生成,近来的版本是在/usr/lib/rpm/macros下创建:
%_topdir%{getenv:HOME}/rpmbuild
直接在用户目录下生成。
$rpm-i kernel-2.6.35.11-83.fc14.src.rpm
RPM包的创建是通过rpmbuild命令进行的。本次操作的目的是获取内核的源代码,所以为了让命令结束前能给源代码修复补丁,应在rpmbuild命令中加上-bp选项。命令中的参数会赋予一个用来创建源码包的设置文件,即SPEC文件。
$cd~/rpmbuild/SPEC
$rpmbuild-bp kernel.spec
这时就会生成一个标题为~/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.x86_64的目录,在这个目录下会生成发布版内核的源代码。
使用源代码来创建内核二进制文件的方法,请参考Hack#2。