linux Makefile 分析

本文详细介绍了Linux内核Makefile的组织结构及编译流程。从顶层Makefile到各子目录下的Makefile,再到配置文件.config的生成,全面解析了内核编译的过程。并介绍了如何使用makemenuconfig等工具进行内核配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Makefile组织层次
Linux的Make体系由如下几部分组成:
Ø         顶层Makefile
顶层Makefile通过读取配置文件,递归编译内核代码树的相关目录,从而产生两个重要的目标文件:vmlinux和模块。
Ø         内核相关Makefile
位于arch/$(ARCH) 目录下,为顶层Makefile提供与具体硬件体协结构相关的信息。
Ø         公共编译规则定义文件。
包括Makefile.build 、Makefile.clean、Makefile.lib、Makefile.host等文件组成。这些文件位于scripts目录中,定义了编译需要的公共的规则和定义。
Ø         内核配置文件 .config
通过调用make menuconfig或者make xconfig命令,用户可以选择需要的配置来生成期望的目标文件。
Ø         其他Makefile
主要为整个Makefile体系提供各自模块的目标文件定义,上层Makefile根据它所定义的目标来
完成各自模块的编译。

Makefile的使用
在编译内核之前,用户必须首先完成必要的配置。Linux内核提供了数不胜数的功能,支持众多的硬件体系结构,这就需要用户对将要生成的内核进行裁减。内核提供了多种不同的工具来简化内核的配置,最简单的一种是字符界面下命令行工具:
make config
这个工具会依次遍历内核所有的配置项,要求用户进行逐项的选择配置。这个工具会耗费用户太多时间,除非万不得以(你的编译主机不支持其他配置工具)一般不建议使用。
用户还可以使用利用ncurse库编制的图形界面工具,这就是大名鼎鼎的:
make menuconfig
相信以前对2.4内核比较熟悉的用户一定不会陌生。当然在2.6内核中提供了更漂亮和方便的基于X11的图形配置工具:
make xconfig
当用户使用这个工具对Linux内核进行配置时,界面下方会出现这个配置项相关的帮助信息和简单描述,当你对内核配置选项不太熟悉时,建议你使用这个工具来进行内核配置。
当用户完成配置后,配置工具会自动生成.config文件,它被保存在内核代码树的根目录下。用户可以很容易找到它,当然用户也可以直接对这个文件进行简单的修改。但是当你修改过配置文件之后,你必须通过下面的命令来验证和更新配置:
make oldconfig
跟2.4版本的不同之处在于,用户不需要显示的调用make dep命令来生成依赖文件,内核会自动维护代码间的依赖关系。
当一切工作完成以后,用户只需要简单键入make,剩下所有的工作makefile就会自动替你完成了。

Makefile编译流程
   当用户使用Linux的Makefile编译内核版本时,Makefile的编译流程如下:
Ø         使用命令行或者图形界面配置工具,对内核进行裁减,生成.config配置文件
Ø         保存内核版本信息到 include/linux/version.h
Ø         产生符号链接 include/asm,指向实际目录 include/asm-$(ARCH)
Ø         为最终目标文件的生成进行必要的准备工作
Ø         递归进入 /init 、/core、 /drivers、 /net、 /lib等目录和其中的子目录来编译生成所有的目标文件
Ø         链接上述过程产生的目标文件生成vmlinux,vmlinux存放在内核代码树的根目录下
Ø         最后根据 arch/$(ARCH)/Makefile文件定义的后期编译的处理规则建立最终的映象bootimage,包括创建引导记录、准备initrd映象和相关处理

目录递归

Makefile文件只负责当前目录下的目标文件,子目录中的文件由子目录中的makefile负责编译,编译系统使用obj-y 和 obj-m来自动递归编译各个子目录中的文件。

对于fs/Makefile:

obj-$(CONFIG_EXT2_FS) += ext2/

如果在内核配置文件.config中,CONFIG_EXT2_FS被设置为y或者m,则内核makefile会自动进入ext2目录来进行编译。内核Makefile只使用这些信息来决定是否需要编译这个目录,子目录中的makefile规定哪些文件编译为模块,哪些文件编译进内核。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/mbtrend/archive/2008/10/05/3016889.aspx


深入系统内部:Linux内核配置系统分析 http://dev.firnow.com/course/6_system/linux/linuxjq/2007211/18116.html

Linux内核源代码中的Makefile分析 http://code.google.com/p/androidteam/wiki/LinuxMakefileAnalysis

Linux 3.0内核Makefile分析
http://blog.youkuaiyun.com/mbtrend/archive/2008/10/05/3016889.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值