很多时候我们使用别人已经编译好的linux发行版,并不一定符合我们的实际生产环境需求,可能我们我们需要的功能内核并没有编译进来,而我们用不到的功能,又被编译进内核了,加上如果当前系统存在较大BUG时,发行商还没得及重新发布修复过漏洞后的发行版系统时,就需要我们使用内核发行官网所提供的源码包自行编译并升级内核了。当然自行编译内核首先需要对自己的硬件特性有一个比较详细了解,与此同时,要对自己生产环境所需要的功能有一个详细的规划,否则我们盲目的去编译内核是存在很大风险的,所以我们在做此工作之前,需要做好充分的准备工作。


一、准备工作:

(1)准备好开发环境

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

(3)获取目标主机系统功能的相关信息

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


1、准备开发环境:

需要安装的包组:

Development Tools

Server Platform Developmnet

需要安装的包:ncureses—devel


2、获取目录主机上的硬件设备的相关信息

cpu:

cat /proc/info

lscpu

x86info -a(需要自行安装)


PCI:lsPCI -v|-vv 查看PCI设备

USB:lsusb -v|-vv 查看usb设备

块设备:lsblk


Centos 6查看全部硬件信息:hal-device


二、内核编译步骤:

(1)tar xf linux-version.tar.xz -C /usr/src

(2)cd /usr/src

(3)ln linux-version linux

(4)cd linux

(5)make menuconfig 配置内核编译选项

(6)make -j # 指定CPU的线程数

(7)make modules_install 安装内核模块

(8)make install 安装内核

(9)reboot 重启系统选择使用新内核


三、远程终端上编译内核时最好使用screen拨离,以防终端连接断开导致前功尽弃

screen命令:

打开screen:screen

拨离screen:ctrl+a,d

列出screen:screen -ls

连接至指定screen:screen -r screenID

关闭screen:切换到准备关闭的screen,执行exit


四、编译过程详细说明:

1,配置内核选项:

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

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

(b)make menuconfig:基于cureses的文本配置界面

(c)make gconfig:基于GTK开发环境的窗口界面

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


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

(a)make defconfig:基于内核为目标平台提供的默认配置

(b)make allnoconfig:所有选项都不编译(最小化编译)


2、编译:

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

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

cd /usr/src/linux

make path/to/dir

(c)只编译指定的模块

cd /usr/src/linux

make path/to/dir_file.ko(即将生成的模块名称)

(d)如何交叉编译:目标平台与当前编译所在的平台不同

make arch=arch_name

make arch=arch_name help获取指定平台的编译使用帮助

编译过程的时间长短视机器性能而定,I7八核全开的话10分钟也就编译完了,I3四核全开少说也得1一个小时吧,差距还是比较大的,编译过程是相当耗费CPU性能以及内存资源的,所以要看你的具体配置了。由于编译过程比较长,所以也就无法给大家展示过程详图了,只要你按着上面的详细步骤操作,是没有问题的,笔者在Centos7.2系统上成功编译安装并能正常使用的是当前kernel最新版4.7.3

wKiom1ffM5KiLHffAAAQ91b8Nw8143.png


wKioL1ffM9mTzEPlAAAKb0ESHyI121.png