Linux内核源代码中的Makefile分析
来源:互联网 发布:linux 查杀进程 编辑:程序博客网 时间:2024/06/07 08:30
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映像和相关处理。
- 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分析
- 前台调用后台方法
- JSTL标签库学习总结
- vb6 打印
- DataSnap与JSON序列化(4)
- const关键字在类的成员函数上的应用(2)
- Linux内核源代码中的Makefile分析
- HtmlParser初步研究(转帖加其他参考理解)
- 高性能WEB开发(6) - web性能测试工具推荐
- 视频去交错:基于模糊控制的运动自适应算法(GPU实现)
- Linux内核Makefile编译生成内核目标文件的过程
- jqgrid中文属性方法大全
- Linux Kernel Makefile入口点问题
- Ubuntu中如下几个文件可以设置环境变量
- 汇编语言