1、准备工作

1.1前提:

     (1) 准备好开发环境;

     (2) 获取目标主机上硬件设备的相关信息;

     (3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统; 

     (4) 获取内核源代码包:www.kernel.org


1.2准备开发环境:

CentOS 6.7:

     包组:

     Development Tools

     Server Platform Development 


CentOS 7:

     包组:

     Development Tools

     Server Platform Development 

使用yum grouplist可以查看所有的包组;

使用yum groupinstall安装包组

[root@wlm ~]# yum groupinstall  "Development Tools" "Server Platform Development"

1.3查看主机硬件设备信息

安装包:

ncurses-devel

[root@wlm ~]# yum install ncurses-devel


获取目标主机上硬件设备的相关信息:

CPU:

~]# cat  /proc/info
~]# lscpu
~]# x86info -a


PCI设备:

~]# lspci
-v
-vv
~]# lsusb
-v
-vv
~]# lsblk


了解全部硬件设备信息:

~]# hal-device

2、内核编译过程:

步骤:

将从官网下载内核压缩包解压到/usr/src目录下,创建软连接。
~]# tar  xf  linux-3.10.67.tar.xz  -C  /usr/src
~]# cd  /usr/src
~]# ln  -s  linux-3.10.67  linux
~]# cd  linux
~]# make menuconfig       配置内核选项
~]# make  [-j #]编译内核,可使用-j指定编译线程数量
#这个过程比较漫长,可以从/boot/目录下拷贝config-3.10.0-327.el7.x86_64到/usr/src/linux目录
#config-3.10.0-327.el7.x86_64为已安装好的内核默认配置
~]# make modules_install安装内核模块
~]# make install安装内核 
重启系统,选择使用新内核;


过程的详细说明:

    (1)  配置内核选项

支持“更新”模式进行配置:在已有的.config文件的基础之上进行“修改”配置;

     (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;

     (b) make  menuconfig:基于cureses的文本配置窗口;

     (c) make  gconfig:基于GTK开发环境的窗口界面;  包组“桌面平台开发”

     (d) make  xonfig:基于QT开发环境的窗口界面;

支持“全新配置”模式进行配置:

    (a) make  defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置;

    (b) make   allnoconfig:所有选项均为“no”;

(2) 编译

 

     (a) 多线程编译:make  [-j #]

     (b) 编译内核中的一部分代码:

         (i) 只编译某子目录中的相关代码:

         # cd  /usr/src/linux

         # make  path/to/dir/

    

         (ii)只编译一个特定的模块

         # cd  /usr/src/linux

         # make  path/to/dir/file.ko

    (c) 如何交叉编译:

     目标平台与当前编译操作所在的平台不同;

     # make  ARCH=arch_name

     要获取特定目标平台的使用帮助:

     # make  ARCH=arch_name help

    

    (3) 如何在执行过编译操作的内核源码树上做重新编译:

    事先清理操作:

     # make clean:清理编译生成的绝大多数文件,但会保留config,及编译外部模块所需要的文件;

     # make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;

     # make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;