欢迎关注个人公众号: Core&Chip 持续更新,免费观看。
在上一期中我们介绍了如何使用Linux的编译系统构建一个内核,本期我们来介绍一下Linux编译系统。
Linux 内核采用统一的代码基础,却可以在大到服务器,小到微型的嵌入式设备上使用,其高度可裁剪、可定制化的构建在业界都是一流的。
在初期Linux是通过Makefile
来编译,但是随着系统复杂度的提升,编译体系的复杂度也随着提升。于是在2.6版本,Linux采用了Kbuild
机制,将编译做成了一个更加科学的系统。
这套系统现在不仅用在Linux内核编译,许多项目都在使用例如:uboot
、buildroot
等。所以了解和学会使用这套编译系统对于日常开发尤其是嵌入式领域是非常有必要的。
Linux编译系统,也有的文章会把它简称为Kbuild子系统,内核文档中将其称为:Kernel Build System
,我觉得官方的名称更准确一些。因为Kbuild同样也是一个编译机制,并不能代表整个编译系统,放在一起容易混淆。
我们本文主要参考内核的官方文档:Kernel Build System — The Linux Kernel documentation
1. Kernel Build System 结构
Linux编译系统主要分为两个部分:Kconfig
+ Kbuild
我们先一句话总结:Kconfig
作用是将配置以菜单的形式列出来供用户选择,Kbuild
作用是将用户选择的配置的整理并生成.config
配置文件用于镜像编译。
一个形象的比喻就是在饭店点菜:
-
Kconfig就是服务员给你提供的菜单
-
你根据菜单把要点的菜,服务员将你点的菜记录在本子上,生成了.config文件
-
服务员将点的菜交给后厨,最后炒好了你的菜,生成了对应的镜像
下面是简略的内核中编译系统的文件结构,可以看到:
-
顶层目录有
Makefile
,Kbuild
,Kconfig
三个文件 -
其余子目录都有
Makefile
/Kbuild
+Kconfig
文件
linux-6.12.28
|---arch
|---block
|---drivers
|---i2c
|---spi
......
|---Makefile
|---Kconfig
.......
|---Makefile
|---Kbuild
|---Kconfig
需要注意的有以下几点: