Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1183140
  • 博文数量: 221
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2139
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-27 19:53
个人简介

JustForFun

文章分类

全部博文(221)

文章存档

2024年(6)

2023年(8)

2022年(2)

2021年(2)

2020年(29)

2019年(11)

2018年(23)

2017年(41)

2016年(76)

2015年(23)

我的朋友
最近访客

分类: LINUX

2017-10-07 23:34:06

 http://www.cnblogs.com/kuliuheng/p/3976780.html

1、安装Kernel Headers(头文件)

  通过安装kernel-devel RPM包就可以得到Kernel Headers,但默认情况下没有被Fedora 20安装。通过DVD ISO 或者 yum在线安装的方式都可以安装系统内核头文件,这里先查看一下系统的内核版本:

[root@localhost SPECS]# uname -rm3.16.2-200.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.2-200.fc20.src.rpm

   注意,这里我使用的是root用户,如果是普通用户,请在前面添加sudo或者su -c加单引号。我在做的过程中发现安装了不少的依赖性文件,包括如下内容:

   安装的过程比较简单,但是默认会提示缺少用户mockbuild和组mockbuild,所以我干脆输入如下命令:

[root@localhost Downloads]# groupadd mockbuild[root@localhost Downloads]# useradd mockbuild -g mockbuild[root@localhost Downloads]# rpm -ivh kernel-3.16.2-200.fc20.src.rpm 正在升级/安装... 1:kernel-3.16.2-200.fc20 ################################# [100%]

2.4 使用rpmbuild编译源码包

  进入SPECS目录,准备编译源代码:

[xiaoku@localhost Downloads]$ cd ~/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命令,就能够完成编译任务了。可以从用户目录下看到如下的情况:

[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


三、编译内核

通过如下命令配置并编译内核

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启动菜单*/

reboot                             /* 重启机器。起来之后就是新内核了 */


  1. 驱动程序和用户程序不一样,它是作为一个模块连接到内核模块来运行的,运行在内核空间里面。所以要运行我们自己构造的模块,需要自己的系统已经配置好内核树,然后把目标模块和内核树连接起来运行!如何查看自己的 ubuntu 系统中是否已经有了内核源码树了?直接去查看 /lib/modules/ 目录下是否存在 build 目录,如果存在,则表示我们自己的系统已经拥有内核源码树了
阅读(1362) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~