一、背景介绍

编译内核虽然在实际工作中用到的几率不大,但作为一个Linux运维人员,还是要对编译内核有初步的了解,以下就来介绍下编译内核的方法

二、操作步骤

1.检查开发环境

以CentOS6为例,确认Server Platform Development和Development tools这两个包组已安装。

yum grouplist | grep "Development"

2.下载内核源码

此处以3.10.105版本为例,下载到root用户的家目录下并解压到指定目录,同时创建一个软连接(创建软连接的目的是以后更换内核时直接更改软连接指向)

tar -xf linux-3.10.105.tar.xz -C /usr/src/

ln -sv linux-3.10.105 linux

3.准备内核模板

编译内核其实就是对内核功能的开启或者关闭,类似于编译安装源码程序./config --apr.....一样,只是内核的选项过于多,使用模板会大大降低选择的时间。CentOS6早已准备了一个内核模板在/boot/目录下名为config-$(uname -r)的文件,将它拷贝至内核源码目录中

cd /usr/src/linux

cp /boot/config-2.6.32-642.el6.i686 .config

4.选择内核启用的功能

make menuconfig

需要注意的是:任何编译操作只能在内核源码目录下进行,即/usr/src/linux 目录下,使用make help查看更多信息,选择完成后退出并保存

5.编译内核

make -j #     

进行编译,#表示同时展开的作业数,建议和CPU核心数保持一致,make是对.config文件进行编译,如果对.config文件编译完成后发现遗漏或者想新增几个功能可以在内核源码目录下进行部分功能、特定模块的编译:

cd /usr/src/linux

make dir/  只编译莫目录中的相关代码(部分功能)

make dir/file.ko  只编译一个特定的模块

6.安装模块

make modules_install  建议在安装编译好的内核前先安装模块,避免缺少相关的模块

7.安装内核

make install  

安装内核,此步骤完成后会在/boot目录下会创建新的内核及initramfs,

wKiom1j0yAqByjf-AABDdVVrmzw746.png

同时也会将新内核的配置信息加入grub目录下的grub.conf文件中,只是默认还是使用老内核

wKioL1j0yArAueEMAAB9RaBGrpk604.png

重启操作系统,此时你会看到新的内核已经可以使用

wKioL1j0yAuDRbYJAAAmaoLGuC8888.png

三、补充说明

1.screen命令的使用

在编译时make命令的等待时间过长,如果此时终端与服务器断开链接(ssh中断),那由此ssh发起的命令同样会终止,为了避免这种情况出现,建议使用screen命令,screen命令的常用选项:

screen    #打开一个监视器

Crtl+a后松开键盘再按d键    #暂时退出screen界面

screen -ls    #查看当前所有的screen界面

screen -r <屏幕号>     #返回指定屏幕号的screen界面

exit    #关闭screen界面

2.交叉编译内核

如果编译的目标平台与当前平台不相同,在当前平台上直接编译的内核就无法在指定平台上运行,此时就需要交叉编译,编译是使用:make ARCH=arch_name,要获取特定目标平台的使用帮助make ARCH=arch_name help