Kernel el7: CentOS 7 Kernel 4.10.10

By Tyumen(fengjie.zhou)

内核安装初体验

安装4.10.8版本内核

这里大家先装一版内核,然后后面再做一版内核,循序渐进,主要遵循如下流程:

下面我们先安装一个内核,并且使用新内核

通过rpm包安装内核

我们直接通过rpm包安装内核(devel是develop的意思,是开发包,比较常用所以装上)

修改内核4.10.8启动

vi /boot/grub2/grub.cfg #编辑内核启动引导文件


terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set default=0 #添加的内容行
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set default=0 #添加的内容行
  set timeout=5
fi
        

然后重启设备:reboot,系统起来之后执行uname -ra查看内核版本

4.10.10版本内核rpm包自制作

创建内核编译环境

为了尽量减少在测试过程中对系统带来影响,因此使用普通用户做rpm包

当前我们就具备了内核编译的spec文件和编译用户了,如下安装一下依赖工具并编译.

安装依赖编译rpm包

此步骤执行完毕,我们就有自己的编译完的内核rpm包了,然后执行前面的安装流程即可

内核代码编译

内核源代码目录说明

  /arch:目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构
  /block:块设备驱动程序I/O调度。
  /crypto:常用加密和散列算法(如AES,SHA等),还有一些压缩和CRC校验算法。
  /documentation:目录下是一些文档,没有内核代码,可惜都是English的,是对每个目录作用的具体说明。
  /drivers:目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录
  /firmware:保存用于驱动第三方设备的固件
  /fs:目录存放Linux支持的文件系统代码和各种类型的文件操作代码。每一个子目录支持一个文件系统,如ext3文件系统对应的就是ext3子目录
  /include:目录包括编译核心所需要的大部分头文件,例如与平台相关的头文件在/include/linux子目录下
  /init:目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。
  /ipc:目录包含了核心进程间的通信代码。
  /Kernel:内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c
  /lib:目录包含了核心的库代码,不过与处理器结构相关的库代码被放在/arch/*/lib/目录下。
  /mm:目录包含了所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等。
  /net:目录里是核心的网络部分代码,实现了各种常见的网络协议,其每个子目录对应于网络的一个方面。
  /scripts:目录包含用于配置核心的脚本文件等
  /security:主要包含SELinux模块。
  /sound:ALSA,OSS音频设备的驱动核心代码和常用设备驱动。
  /tools:一些常用工具,如性能剖析、自测试等
  /usr:实现了用于打包和压缩的cpio等。    /virt:提供虚拟机技术(KVM等)的支持    

内核config参数

4.10.11内核版本编译

可以参考:https://kernelnewbies.org/KernelBuild

内核模块使用

内核模块挂载使用

这里以常用的tcp模块westwood为例(未编译进内核,以module方式已经存在)

reno是最基本的拥塞控制算法,也是TCP协议的实验原型; bic适用于丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法; cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法; hybla适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。 westwood采用和Reno相同的慢启动算法、拥塞避免算法。 westwood的主要改进方面:在发送端做带宽估计,当探测到丢包时,根据带宽值来设置拥塞窗口、慢启动阈值

自编译内核模块

(只编译模块)

编译模块集成到内核源码中,后续待补充

内核模块开发

待补充