Linux内核的编译主要过程:配置、编译、安装。
- 配置主要由
Kconfig
提供图形界面完成 - 编译主要基于
Kbuild
编译系统,执行make
完成编译 - 安装主要也是基于
Kbuild
提供的脚本,然后执行make
完成安装
Kconfig
Kconfig
用于内核的配置,make menuconfig
显示的菜单就来自Kconfig
。
make menuconfig
的菜单包括了多层,每层都是各个目录下对应的Kconfig
产生的,选择好配置后,配置结果会被保存到.config
文件中。
执行Makefile
时,Makefile
就会根据.config
的结果来实现内核的编译。
Kconfig语法
Kbuild
Kbuild
即Kernel build
,是内核的一个编译系统。
简单来说,Kbuild
是对Makefile
语法功能的扩展。
例如,kbuild
定义了很多有用的变量如obj-m`` obj-y
,-objs
等等,用户只要为这些变量赋值,kbuild
会自动把代码编译到内核或者编译成模块。
Linux
内核使用kbuild
编译时,会扫描两次Linux
的Makefile
:首先读取顶层的Makefile
文件,然后根据读取到的内容第二次读取kbuild的Makefile
文件来编译Linux
内核。
内核的Makefile
包括五部分:
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈
Makefile
顶层的Makefile
是编译的入口,下面分析一下顶层Makefile
文件。
顶层Makefile
会向各子目录的Makefile
传递一些信息,有些变量,例如vmlinux-dirs
,不仅在顶层Makefile
中定义并且赋值,而且在arch/*/Makefile
还作了扩充。