内核定制的介绍和使用

本章主要简述内核定制流程和应用。

关于内核定制

普通的Linux内核是通过文本交互、文本窗口、图形窗口,对内核进行定制。定制的内核配置,保证内核级别的应用可以正常运行。

Poly OS面向多板卡,内核配置尽量满足多版本内核;因为下载和编译是自动化,内核定制配置尽量自动化,减少人工的参与。

内核定制的处理流程

将厂商的初始内核配置与用户定制内核配置融合,取配置的并集,内核最初的处理:只将满足依赖的配置项写入到.config,导致用户的配置没能真正写入到内核中。

PolyOS中加的功能:

将内核认为因为缺少依赖而没加到.config的布尔和三态的配置项也加到.config中,将.config所有为布尔和三态的配置转换为符号,检测是否满足依赖,没满足依赖的配置进行修复,确保加入的配置项还是满足依赖关系,更新.config内容。

../../_images/customed_kernel_flow_chart.png

内核配置定制流程图

内核定制的结果

内核配置的定制来说,以docker内核配置CONFIG_IP_NF_FILTER为例。

内核之前的默认处理,因为内核发现CONFIG_IP_NF_FILTER没满足依赖关系,没把它加入到内核配置中。

内核日志merge_config_build.log显示:

Value requested for CONFIG_IP_NF_FILTER not in final .config
Requested value:  CONFIG_IP_NF_FILTER=y
Actual value:

Poly OS中加了内核配置检查和修复功能,为了确保docker内核配置CONFIG_IP_NF_FILTER生效,需要检查所有依赖配置,并对其进行修复。

修复程序遵循三个原则:

•正确性:修复导致的任何配置必须正确;

•最大范围:当范围重叠时,固定应包含最大范围;

•变化的最小化:需要改变的特征数量应该合理地最小化,以避免不必要地破坏用户之前设置的特征值。

内核日志merge_config_build.log显示:

need fixed found symbol IP_NF_FILTER, type tristate,fact value y
=== GENERATED DIAGNOSES ===
[IP_NF_FILTER => yes, NETFILTER_XTABLES => yes, IP_NF_IPTABLES => yes]
Trying to apply fixes now...
NETFILTER_XTABLES set to yes.
IP_NF_IPTABLES set to yes.
Fixes successfully applied.