一起分析Linux系统设计思想——01内核配置和编译

在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。

1 内核配置流程

内核配置流程如下图所示:

在这里插入图片描述

配置的最终目的是裁剪,裁剪分为文件粒度的裁剪和代码行粒度的裁剪。因此需要分别生成auto.conf文件和autoconf.h文件给Makefile和源文件使用。

核心中转文件是.config文件。该文件其实可以直接由用户通过make menuconfig一项项地进行配置,但是往往不会选择这样做,一个原因是配置项太多,用户不可能一一全部弄懂;还有一个原因是本着 继承复用 的思想,一般都需要整一个 蓝本 ,然后在这个基础上再去修改。这也就是设计Step1和Step2的初衷。


2 文件组织背后的逻辑

Tips:无论是Linux源码还是其他大型工程的源码,其复杂性很大一部分体现在文件组织的复杂上。首先理清文件的组织结构对理解大型软件架构有很大的帮助,而不是一头扎进源码实现。

首先我们思考一下,Linux源码在进行文件组织时为什么要设计一个 /include 文件夹。

C语言的封装性是由.c文件和.h文件(一般和.c文件同名)共同完成的:对于一个模块,.c文件负责模块功能实现,.h文件负责对外接口呈现。

但.h文件除了上面这个功能之外,还用于同层跨模块,跨层,甚至是整个系统中配置和信息的共享。此时的.h文件是不依赖同名.c文件独立存在的。这类.h文件,一部分(同层跨模块,跨层的)放在层所在的文件夹内,一部分(系统相关的)就需要建立一个 /include 来专门存放。

2.1 auto.conf为什么放在/include/config目录下

auto.conf后缀名虽然不是.h,但也是被顶层Makefile包含的,也属于头文件系;而且该文件就是用来配置的文件,所以放在/include/config目录下无可厚非。如果是你,你也会这样设计。

2.2 autoconf.h为什么放在/include/linux目录下

那autoconf.h为什么不直接放在/include/config目录下而要放在/include/linux目录下呢?

源码中/include/config目录下在配置和编译之前都是空的,配置和编译之后自动生成的配置相关的头文件会放在这里。从这个道理上来讲,autoconf.h放在这个文件夹中并没有什么问题。

但是,你会发现/include/linux目录下存放的都是编译内核时真正要用到的系统相关的头文件,而autoconf.h确实也属于这类头文件,所以放在这里从逻辑上讲也是合情合理。而且编译时处理起来可能更加方便(就像炒菜时将原材料全部放在手边一样)。还有一个原因就是,作者可能故意将auto.conf和autoconf.h分开存放,因为它们两个的名字太像了~~

因此,最终选择将autoconf.h放在/include/linux目录下。

Tips:仅仅是个人分析的结论,如果有更好的看法欢迎交流探讨。而且,我觉得autoconf.h放在/include/config目录下也并没有什么不妥,在此提起这个议题主要是为了强调对文件组织分析的重要性,引导大家以分析代替死记硬背,因为Linux实在是太庞大了。


3 内核配置的底层思想

Linux之所以可以任意裁剪,支持多款处理器架构,就是因为具有强大的配置体系。

支持单一处理器架构或单一功能的代码,设计思想是设计的功能即支持的功能。简单来说就是——存在的模块即为有效的模块。

配置思想 则将“存在即有效”改进为“存在不一定有效”,将 存在与否有效与否 区分开来(相当于增加了一层配置层)。概念的拆分反映到代码上就是增加一层,虽然层数增加了,但功能变得灵活和强大了。

这种 配置思想 也可以迁移到我们平时的工程代码中,使代码可以支持更多的设备和拥有更灵活的裁剪特性,设计出强大的平台软件。


<完>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿越临界点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值