Linux内核源代码中的Makefile分析
来源:互联网 发布:淘宝微淘标题大全 编辑:程序博客网 时间:2024/05/29 15:53
Linux, Kernel, Makefile
#Linux Kernel Makefile Analysis.
Linux内核源代码中的Makefile分析
linux-2.6.26内核原代码中共有大约2170个Makefile文件,大约110个Kbuild文件,大约990个Kconfig文件.
这么庞大的编译系统,我想肯定会有一种简单的逻辑规则来组织起来,但目前我依然对此一无所知.
概述
Makefile包括五部分:
- Makefile 顶层Makefile文件
- .config 内核配置文件
- arch/$(ARCH)/Makefile 机器体系结构Makefile文件
- scripts/Makefiles 所有内核Makefiles共用规则,与Makefile文件一起编译出内核程序。
- kbuild Makefiles 其它Makefile文件
在make menuconfig进行内核配置操作时,所显示的Menu list是由各层Kconfig组成的。最底层Kconfig存放在 ~/arch/i386/Kconfig. 以此为头,它会一层层使用source来把需要加入的各个目录中Keconfig添加近来。例如:source "drivers/Kconfig",则将~/drivers/Kconfig添加进Menu list中。通过内核配置操作产生.config文件.
顶层Makefile文件读取该文件的配置。顶层Makefile文件负责产生两个主要的程序:vmlinux (内核image)和模块。顶层Makefile文件根据内核配置,通过递归编译内核代码树子目录建立这两个文件。顶层Makefile文件文本一个名为 arch/$(ARCH)/Makefile的机器体系结构Makefile文件。机器体系结构Makefile文件为顶层Makefile文件提供与机器相关的信息。每一个子目录有一个Makefile文件,子目录Makefile文件根据上级目录Makefile文件命令启动编译。这些Makefile使用.config文件配置数据构建各种文件列表,并使用这些文件列表编译内核或模块的目标文件。
详细信息参考:/Documentation/kbuild/makefiles.txt - This document describes the Linux kernel Makefiles.中文译稿
人们与内核Makefile存在四种不同的关系
- 用户 用户使用"make menuconfig"或"make"命令编译内核。他们通常不读或编辑内核Makefile文件或其他源文件。
- 普通开发者 普通开发者维护设备驱动程序、文件系统和网络协议代码,他们维护相关子系统的Makefile文件,因此他们需要内核Makefile文件整体性的一般知识和关于kbuild公共接口的详细知识。
- 体系开发者 体系开发者关注一个整体的体系架构,比如sparc或者ia64。体系开发者既需要掌握关于体系的Makefile文件,也要熟悉内核Makefile文件。
- 内核开发者 内核开发者关注内核编译系统本身。他们需要清楚内核Makefile文件的所有方面。
编译内核(v2.6.26)时Makefile的执行步骤
编译内核(v2.6.26)时Makefile的执行步骤包括两个过程:一是配置内核过程;二是编译生成内核目标文件的过程,稍微具体一点大致分为以下几步:
- 1) 配置内核 => 产生 .config文件;
- 2) 保存内核版本到include/linux/version.h文件中;
- 3) 符号链接include/asm to include/asm-$(ARCH);
- 4) 更新所有目标对象的其它前提文件,附加前提文件定义在arch/$(ARCH)/Makefile文件中;
- 5) 递归进入init- core- drivers- net- libs-中的所有子目录和编译所有的目标对象,上面变量值都引用到arch/$(ARCH)/Makefile文件中;
- 6) 链接所有的object文件生成vmlinux文件,vmlinux文件放在代码树根目录下。最开始链接的几个object文件列举在arch/$(ARCH)/Makefile文件的head-y变量中;
- 7) 最后体系Makefile文件定义编译后期处理规则和建立最终的引导映像bootimage。包括创建引导记录,准备initrd映像和相关处理。
References
- Make的执行过程
- Linux内核源代码中的Makefile分析
- /Documentation/kbuild/makefiles.txt - This document describes the Linux kernel Makefiles.中文译稿
- 配置内核过程
- 入口点的问题
- 编译生成内核目标文件的过程
- Linux内核源代码中的Makefile分析
- Linux内核源代码中的Makefile分析
- Linux内核源代码的Makefile文件分析
- Linux 内核Makefile分析
- Linux内核Makefile分析
- Linux内核Makefile分析
- Linux内核Makefile分析
- Linux内核Makefile分析
- linux 内核中的 Makefile
- linux内核源代码分析
- Linux内核源代码中的C语言代码(Linux内核源代码情景分析读书笔记连载)
- Linux 3.0内核Makefile分析
- linux内核只Makefile分析
- linux 2.6内核makefile分析
- Linux 3.0内核Makefile分析
- linux内核Makefile整体分析
- linux内核Makefile整体分析
- linux内核顶层Makefile分析
- WIN32汇编下的窗口程序
- [unix] Unix 是简单的,你不需要成为一个天才或是计算机专家也能理解它!
- 如何在25步之内开发出一个网站
- JVM调优总结:分代垃圾回收详述
- eclipse占用cpu近100%
- Linux内核源代码中的Makefile分析
- Android中Form Post方式提交,上传文件的实现
- Android cocos2d-x开发(三)之创建Android工程和编译
- 常见的Android游戏开发引擎
- 定时执行存储过程(对大数据量的预处理)
- codeforces Cthulhu 简单图论
- ThinkPHP学习笔记(十一)自动填充一个无限极分类
- how to flash LG Optimus Vu 100L
- c语言中函数传指针学习小结