Kbuild 即kernel build,是用来编译Linux内核的一套Makefile。Kbuild基于GNU make设计,但是又对Makefile进行了各种扩充:
-
基于图形界面的菜单式配置
-
各种预定义目标和变量:menuconfig、obj-y
-
提供各种跨平台工具和编译
-
递归式Makefile
Linux内核可以灵活自由的高度裁剪和定制,其底层技术支撑除了模块机制之外,还有一项技术就是:可以使用Kbuild编译系统来方便地进行裁剪、配置、编译和安装。内核中的Kbuild子系统随着内核版本不断更新迭代,功能也越来越强大,也越来越受欢迎,被越来越多的开源软件借鉴和使用,比如U-boot、Busybox、Buildroot、Xen等,都在使用Kbuild这种编译系统来管理和维护。总结起来,Kbuild具有如下优势:
-
高度灵活可定制:编译参数、编译模块选项都可以定制
-
使用方便:内核裁剪、添加模块、删除模块操作简单
-
配置简单:可交互的图形菜单
学习Kbuild本期课程预期会有哪些收获?
-
深刻理解Makefile是如何编译Linux内核、U-boot等大型工程的
-
遇到编译错误时,提供更多的视角去分析
-
提供了一张地图,破解Linux内核的“黑暗森林”
-
有助于理解内核启动流程、组织架构
-
掌握Kbuild工作原理,对学习其他开源软件有帮助
本期课程主要内容:
如何使用Kbuild Makefile:
-
裁剪、配置内核
-
编译内核
-
往内核中添加新的模块
Kbuild工作流程分析:
-
内核镜像如何生成?
-
内核模块编译
-
内核模块安装
-
内核头文件安装
-
内核源码中的空头文件探秘
学习须知:
学习本课程前,需要具备Makefile基础知识,知道程序编译、链接的基本原理。如果没有此基础,建议先学习之前的《Linux三剑客》基础课程:Makefile工程实践:从零开始一步一步写项目的Makefile,学习效果会更好。