1、安装Kernel Headers(头文件)
通过安装kernel-devel RPM包就可以得到Kernel Headers,但默认情况下没有被Fedora 20安装。通过DVD ISO 或者 yum在线安装的方式都可以安装系统内核头文件,这里先查看一下系统的内核版本:
然后使用yum在线安装Kernel Headers:
2、下载并安装内核源代码
在大多数情况下,有了Kernel Headers文件就可以编译系统相关的文件了,不需要再下载安装内核源代码。如果确实需要,则需要进行以下四个步骤来完成:
2.1 准备rpm编译环境
编译内核源代码包需要借助两个工具:yum-utils和rpmdevtools。在线安装这两个工具的方式如下:
安装这两个工具之后,可以使用如下命令生成源代码安装目录(将会在当前用户目录下生成rpmbuild子目录):
2.2 下载与当前环境匹配的内核源代码
使用yum在线下载内核源代码的命令如下:
2.3 安装SRC.RPM源码包
切换到源代码文件所在的目录,执行如下命令安装内核的依赖性文件:
注意,这里我使用的是root用户,如果是普通用户,请在前面添加sudo或者su -c加单引号。我在做的过程中发现安装了不少的依赖性文件,包括如下内容:
安装的过程比较简单,但是默认会提示缺少用户mockbuild和组mockbuild,所以我干脆输入如下命令:
2.4 使用rpmbuild编译源码包
进入SPECS目录,准备编译源代码:
[xiaoku@localhost SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
或者#rpmbuild -bp kernel.spec --target=x86_64
构建目标平台:x86_64为目标x86_64构建错误:构建依赖失败: pesign >= 0.10-4 被 kernel-3.16.2-200.fc20.x86_64 需要[xiaoku@localhost SPECS]$ sudo yum install pesign
从上面的提示信息可以看出,第一次编译出了点问题,说是需要pesign版本大于0.10-4,这样的话手动yum在线安装一下即可。再次执行上述rpmbuild命令,就能够完成编译任务了。可以从用户目录下看到如下的情况:
/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
三、编译内核
通过如下命令配置并编译内核
cd /root/rpmbuild/BUILD/kernel-2.6.32-696.el6/linux-2.6.32-696.el6.x86_64
make menuconfig /* 配置内核 */
make //全编译
make bzImage -j5 /* 编译内核 */
make modules -j5 /* 编译模块 */make modules_install /* 先安装模块到/lib/modules目录 */
make install /* 然后安装内核文件到/boot目录 安装过程会自动修改GRUB启动菜单*/
- 驱动程序和用户程序不一样,它是作为一个模块连接到内核模块来运行的,运行在内核空间里面。所以要运行我们自己构造的模块,需要自己的系统已经配置好内核树,然后把目标模块和内核树连接起来运行!如何查看自己的 ubuntu 系统中是否已经有了内核源码树了?直接去查看 /lib/modules/ 目录下是否存在 build目录,如果存在,则表示我们自己的系统已经拥有内核源码树了