1、安装Kernel Headers(头文件)
通过安装kernel-devel RPM包就可以得到Kernel Headers,但默认情况下没有被Fedora 20安装。通过DVD ISO 或者 yum在线安装的方式都可以安装系统内核头文件,这里先查看一下系统的内核版本:
[root@localhost SPECS]# uname -rm
3.16.-.fc20.x86_64 x86_64
然后使用yum在线安装Kernel Headers:
[root@localhost SPECS]# yum install kernel-devel
2、下载并安装内核源代码
在大多数情况下,有了Kernel Headers文件就可以编译系统相关的文件了,不需要再下载安装内核源代码。如果确实需要,则需要进行以下四个步骤来完成:
2.1 准备rpm编译环境
编译内核源代码包需要借助两个工具:yum-utils和rpmdevtools。在线安装这两个工具的方式如下:
[root@localhost ~]# yum install yum-utils rpmdevtools
安装这两个工具之后,可以使用如下命令生成源代码安装目录(将会在当前用户目录下生成rpmbuild子目录):
[root@localhost ~]# rpmdev-setuptree
2.2 下载与当前环境匹配的内核源代码
使用yum在线下载内核源代码的命令如下:
[xiaoku@localhost Downloads]$ sudo yumdownloader --source kernel
2.3 安装SRC.RPM源码包
切换到源代码文件所在的目录,执行如下命令安装内核的依赖性文件:
[root@localhost Downloads]# yum-builddep ./kernel-3.16.-.fc20.src.rpm
注意,这里我使用的是root用户,如果是普通用户,请在前面添加sudo或者su -c加单引号。我在做的过程中发现安装了不少的依赖性文件,包括如下内容:
已安装:
asciidoc.noarch :8.6.-.fc20
audit-libs-devel.x86_64 :2.4-.fc20
binutils-devel.x86_64 :2.23.88.0.-.fc20
bison.x86_64 :2.7-.fc20
elfutils-devel.x86_64 :0.158-.fc20
flex.x86_64 :2.5.-.fc20
hmaccalc.x86_64 :0.9.-.fc20
newt-devel.x86_64 :0.52.-.fc20
pciutils-devel.x86_64 :3.2.-.fc20
perl-ExtUtils-Embed.noarch :1.30-.fc20
python-devel.x86_64 :2.7.-.fc20
xmlto.x86_64 :0.0.-.fc20 作为依赖被安装:
boost-regex.x86_64 :1.54.-.fc20
ctags.x86_64 :5.8-.fc20
docbook-dtds.noarch :1.0-.fc20
docbook-style-xsl.noarch :1.78.-.fc20
elfutils-libelf-devel.x86_64 :0.158-.fc20
graphviz.x86_64 :2.34.-.fc20
gts.x86_64 :0.7.-23.20111025.fc20
lasi.x86_64 :1.1.-.fc20
netpbm.x86_64 :10.61.-.fc20
sgml-common.noarch :0.6.-.fc20
slang-devel.x86_64 :2.2.-.fc20
source-highlight.x86_64 :3.1.-.fc20 完毕!
安装的过程比较简单,但是默认会提示缺少用户mockbuild和组mockbuild,所以我干脆输入如下命令:
[root@localhost Downloads]# groupadd mockbuild
[root@localhost Downloads]# useradd mockbuild -g mockbuild
[root@localhost Downloads]# rpm -ivh kernel-3.16.-.fc20.src.rpm
正在升级/安装...
:kernel-3.16.-.fc20 ################################# [%]
2.4 使用rpmbuild编译源码包
进入SPECS目录,准备编译源代码:
[xiaoku@localhost Downloads]$ cd ~/rpmbuild/SPECS/
[xiaoku@localhost SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
构建目标平台:x86_64
为目标x86_64构建
错误:构建依赖失败:
pesign >= 0.10- 被 kernel-3.16.-.fc20.x86_64 需要
[xiaoku@localhost SPECS]$ sudo yum install pesign
从上面的提示信息可以看出,第一次编译出了点问题,说是需要pesign版本大于0.10-4,这样的话手动yum在线安装一下即可。再次执行上述rpmbuild命令,就能够完成编译任务了。可以从用户目录下看到如下的情况:
[xiaoku@localhost kernel-3.16.fc20]$ pwd
/home/xiaoku/rpmbuild/BUILD/kernel-3.16.fc20
[xiaoku@localhost kernel-3.16.fc20]$ ls
linux-3.16.2-200.fc20.x86_64 vanilla-3.16
这里有两个重要的目录:
1、linux-3.16.2-200.fc20.x86_64/arch
这里有包含了Fedora 补丁和更新的标准kernel.org内核源码。系统架构与uname -m的输出相匹配,如果有需要,你可以让–target=选项使用noarch参数。
2、vanilla-3.16/
这里只包含标准的kernel.org的kernel(没有补丁和更新)。
详细内容请参考:从RPM包构建完整Fedora内核 官方WIKI