大家或许会比较想了解,Linux 内核代码里面,有这么多文件夹,各自占了多大空间,大概的代码分布是怎样的呢? 通过这篇文章,我们就可以找到相应的答案。
在写这个文章的时候, Linux 内核最新的版本是2021-01-18 发布的 5.11-rc4。我们就拿这个最新的版本作为例子做分析。
把内核下载下来发现,单linux-5.11-rc4.tar.gz 压缩包就有 181M 这么大;解压缩之后,居然达到了 1.1G, 还是大的有点吓人。如果我们回顾一下,在1994-03-13 发布的 linux-1.0.tar.gz 只有 1M , 而解压缩之后,也只有 5.8M而已。
那现在,就让我们来看看都是什么把现在的内核撑的这么大吧。
这里,我做了两个简单的统计图,通过这两个统计图,我们就可以对内核中的代码分布一目了然了。
图1, 以kilobytes 为单位
我们看看体积(以KB作为单位)占据前3的部分:
1. 排第一的是内核的 drivers 部分,这个是针对不同硬件的驱动,达到 66% , 达到了721344K(大约704MB)。
2. 排第二的是内核的 arch 部分,这个是针对不同体系结构的代码,比如X86, ARM,PowerPC等,达到12%, 135288K (大约132MB)
3. 排第三的是内核的 sound (声音系统相关),include (头文件等),fs(文件系统,如XFS,ext4/3 等),tools(比如 bpf,perf等 ) 这几个部分。 它们占用基本接近,达到4%, 在46820K左右(大约46MB)。
图2, 以代码(包含.c , .h 和 .S 后缀名的源码文件)的行数为单位
我们看看代码行数据前3的部分(总体上,与图1类似):
1. 排第一的是内核的 drivers 部分,这个是针对不同硬件的驱动,达到 67% , 有15973493行。
2. 排第二的是内核的 arch 部分,这个是不同体系结构的代码,比如X86, ARM,PowerPC等,达到9%,有2186299行。
3. 排第三的是内核的 sound (声音系统相关),fs(文件系统,如XFS,ext4/3 等),达到5%, 大约在1201724行左右。
最后简要总结:
我们看到Linux内核为了支持多种不同的硬件,内核里面的驱动贡献了超过66%的代码量;接下来,Linux内核为了支持多种体系结构,也贡献了不少的代码量; 再往下,Linux内核为了要支持声音系统,支持多种文件系统,也贡献不少的代码量。
从这里也可以从侧面了解到,Linux 内核为了支持多硬件,多体系,使其体积越来越大;或许以后,随着新硬件的加入,保持旧硬件的兼容,其体积还是会继续膨胀下去。
如果是自己定制内核的话,刨去不用的驱动,再针对特定的体系,还是可以编译出自己的精简内核。