Centos 7 源码编译安装内核4.14.12

简介:

为什么要编译内核

需要新功能的支持:

在生产环境中,突然会需要使用一些新的功能,但是原有的内核并不支持此功能,这是就需要重新编译出一个新的内核来提供对此新功能的支持,比如虚拟化、iptables功能必须要在2.4.X以上版本的内核中才支持。


原核心太过于臃肿:

原来安装的内核中,有很多不常用甚至基本上用不到的功能支持,而这些功能又会使内核文件变得很大,这时要将此变成一个简化切功能够用的内核就需要进行重新编译。


与硬件搭配的稳定性:

很多情况下,系统内核中默认一般默认支持的CPU类型为Inter,但在其它厂商,如AMD或者是较新的CPU硬件上使用此系统,可能就不能很好的支持,且不稳定。因此就需要重新编译内核来支持最新的硬件驱动。


其它特殊需求:

linux除了在pc机上运行,当然也能支持一些其它设备,比如嵌入式的APM、智能手机等,这时或许就要进行重新编译支持的CPU架构来支持这些特殊需求。

总结一点:kernel的作业就是所需要的硬件支持,因此在此基础上只加需要的功能,来实现内核文件的短小精干。


实验环境:VMware Workstation Pro 14(试用版)

系统平台:

CentOS Linux release 7.4.1708 (Core)       内核  3.10.0-693.el7.x86_64


步骤如下:

内核源码官网,请下载标记为stable的版本

https://www.kernel.org/

本次编译的源码版本为

stable:

4.14.12

2018-01-05


1.准备编译环境

a.至少准备10GB的磁盘剩余空间

b.# yum -y groups install "Development Tools"

# yum -y install ncurses-devel elfutils-libelf-devel bc openssl-devel.x86_64


2.解压源码包

#tar xvf linux-4.14.12.tar.xz

源码包解压后的大小为979M


3.在当前已经安装的系统中的/boot目录下存在一个名为conf-xxx 的文件,那个文件其实就是核心功能列表选择文件,如

-rw-r--r--.  1 root root   140894 Aug 22 17:21 config-3.10.0-693.el7.x86_64

copy当前系统内核中的config-xxx文件到需要编译的内核目录下。这一步不是必须的,可以用来参考之前系统的内核选项。

#cp config-3.10.0-693.el7.x86_64 /kernel/linux-4.14.12


4.所有操作均在源码编译目录内进行

#cd /kernel/linux-4.14.12/


编码内核选择界面(生成.config的方法):

make help

支持更新模式进行配置

make menuconfig

基于curses的文本窗口界面

make gconfig

基于GTK(GOME)环境窗口界面

make xconfig

基于QT(KDE) 环境的窗口界面

make oldconfig

透过已经存在的./.config文件内容,

并使用该文件内设定值为默认值,

只将新版本核心的新功能列出让用户选择,

可以简化核心功能挑选过程。对与升级内核很好选择。

make defconfig

基于内核为目标平台执行提供的“默认”配置进行配置

make allyesconfig

所有选项均回答为”yes”

make allnoconfig

所有选项均回答为”no”

make mrproper

清理所有编译生成的文件、 config及某些备份文件

make clean

清理大多数编译生成的文件,但会保留config文件等

make distclean

mrproper、 patches以及编辑器备份文件


5.使用make menuconfig 命令进行菜单化界面来选择内核功能:

spacer.gif1.png

spacer.gif1.png

左右箭头键:用来移动选择最下面的select、exit、help、save、load几个按钮

上下箭头键:可移动上面的菜单来选中对应的功能选项,选项后与--> 表示内部有子菜单需要选择。

选定项目:使用上下键选择设定的项目,并使用左右键选择select按钮,然后按回车就可进入项目中 的子菜单选择。

挑选功能:在项目的功能名称前面,有 [ ]或者 < > 才可以使用 空格键 来选择。

挑选说明:

[ ]: 不编译此项

[M]: 表示编译成模块,也就是存放在/lib/modules/内核版本号/

< * > [ * ] : 表示编译进核心,也就是/boot下的vmlinuz-内核版本号 文件

功能选择的建议:

核心一定要的功能,直接编译进核心内;

可能以后会用到的功能,尽量编译成模块;


离开选择项:左右键选择Exit按回车即可


一些编译项目如下:

[*] 64-bit kernel                                

General setup  --->             基本的linux核心功能,最相关的驱动程序、版本说明 核心说明代码

[*] Enable loadable module support  --->         模块加载和卸载

-*- Enable the block layer --->                 块设备的支持

Processor type and features  --->            处理器类型和其功能选择

Power management and ACPI options  --->      电源管理和ACPI选项

Bus options (PCI etc.)  --->                 总线选项和PCI插槽

 Executable file formats / Emulations --->   编译后执行档的格式

[*] Networking support  --->           核心网络功能

Device Drivers  --->                 设备驱动

Firmware Drivers  --->

File systems --->                           文件系统的支持

Kernel hacking  --->

Security options  --->                 安全相关模块

-*- Cryptographic API  --->

[*] Virtualization  --->

Library routines --->


这里以编译2个功能为演示

(Hunk-2018v1.0) Local version - append to kernel release 追加内核版本

[*] Automatically append version information to the version string   自动追加版本号

DOS/FAT/NT Filesystems  ---> 核心层支持NTFS 文件系统格式读写

spacer.gif

都选择好核心功能后,记得选择SAVE保存


6.编译

要想快一点,可以查询当前系统CPU有几个核

#lscpu

CPU(s):                4


为了防止意外发生,开启一个screen窗口,命令功能请自行man

#screen -S kernel

#make -j 4

编译好之后的源码目录为9.8G

#make -j 4 modules


7.编译后安装

#make modules_install

#make install

安装好之后,会在/boot内生成对应的内核相关文件

spacer.gif1.png

模块目录也会生成/lib/modules/4.14.12Hunk-2018v1.0

spacer.gif1.png

#cat /boot/grub2/grub.cfg

menuentry 'CentOS Linux (4.14.12Hunk-2018v1.0) 7 (Core)'


8.检查无误后,重启以便使用新内核

spacer.gif1.png

#uname -r

4.14.12hunk-2018-1.0


至此,内核编译安装成功。


编译中的一些选择

全编译: make [-j #]

编译内核的一部分功能:

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

进入源码文件夹内

# make dir/   注意,不要进到那个需要编译指定部分功能的子目录。

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

cd /usr/src/linux

# make dir/file.ko

例如:只为e1000编译驱动:

# make drivers/net/ethernet/intel/e1000/e1000.ko


卸载内核

 删除/lib/modules/目录下不需要的内核库文件

#rm -rf 4.14.12hunk-2018-1.0/

 删除源码目录

 删除/boot目录下启动的内核和内核映像文件

#rm *-4*

rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img’? y

rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img.gz’? y

rm: remove regular file ‘System.map-4.14.12hunk-2018-1.0’? y

rm: remove regular file ‘vmlinuz-4.14.12hunk-2018-1.0’? y

 更改grub的配置文件,删除不需要的内核启动列表

# vim /boot/grub2/grub.cfg



本文转自 ljpwinxp 51CTO博客,原文链接:http://blog.51cto.com/191226139/2059117

相关文章
|
22天前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
15天前
|
存储 Linux 网络安全
Centos安装Docker的详细安装步骤,Docker相关组件:docker-ce-cli、docker-ce和containerd.io的区别
Centos安装Docker的详细安装步骤,Docker相关组件:docker-ce-cli、docker-ce和containerd.io的区别;CentOS7安装DockerCompose;Docker镜像仓库
281 11
|
21天前
|
应用服务中间件 Linux 网络安全
CentOS 7 上安装 Nginx
在 CentOS 7 上安装 Nginx 的步骤包括:添加 EPEL 仓库,安装 Nginx,启动 Nginx,配置防火墙规则,最后通过访问服务器 IP 验证安装是否成功
105 0
|
21天前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
21天前
|
SQL 关系型数据库 MySQL
MYSQL8.0在CentOS安装[单机软件]
MYSQL8.0在CentOS安装[单机软件]
|
22天前
|
关系型数据库 MySQL Linux
Centos7下在线安装mysql
【7 月更文挑战第 2 天】Centos7、mysql
|
24天前
|
Linux 网络安全 开发工具
旧手机别再换盆了,教你使用Linux Deploy安装CentOS
旧手机别再换盆了,教你使用Linux Deploy安装CentOS
18 0
|
25天前
|
NoSQL Linux MongoDB
Centos7安装MongoDB
Centos7安装MongoDB
44 0
|
25天前
|
Linux Docker 索引
docker(二):Centos安装docker
docker(二):Centos安装docker
148 0
|
25天前
|
Linux 虚拟化 数据安全/隐私保护
VMware安装centos7教程(2)
VMware安装centos7教程(2)
38 0