Makefile

本文介绍Makefile在Linux内核构建过程中的作用及其组成部分,包括KernelMakefile、ARCHMakefile、KBuildMakefile等,并解释了如何通过Makefile自动编译内核以提高开发效率。

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

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令(如在all后加入:echo "hello",但要注意换行后要使用tab键;另外为了使在终端不显示命令,只显示hello,在Makefile中要写成@echo "hello")。使用Makefile整个工程完全自动编译,极大提高了效率。Makefile 有自己的书写格式、关键字、函数。

Linux 内核Makefile 分为 5部分,Kernel Makefile、ARCH Makefile、KBuild Makefile、.config文件以及scripts/Makefile.*

 Kernel Makefile :Kernel Makefile 位于Linux 内核源代码的顶层目录,也叫 Top Makefile 。它主要用于指定编译Linux Kernel 目标文件(vmlinux )和模块(module )路径。它根据.config文件决定了内核根目录下哪些文件、子目录被编译进内核。对于内核或驱动开发人员来说,这个文件几乎不用任何修改。

ARCH Makefile:ARCH Makefile 位于ARCH/$(ARCH)/Makefile ,是系统对应平台的Makefile 。Kernel Top Makefile 会包含这个文件来指定平台相关信息。ARCH Makefile同样根据.config文件,决定了ARCH/$(ARCH) 目录下哪些文件、子目录被编译进内核只有平台开发人员会关心这个文件。

Kbuild Makefile:从Linux 内核2.6 开始,Linux 内核的编译采用Kbuild 系统 ,这同过去的编译系统有很大的不同,Kbuild 系统使用Kbuild Makefile 来编译内核或模块。当Kernel Makefile 被解析完成后,Kbuild 会读取相关的Kbuild Makefile 进行内核或模块的编译。Kbuild Makefile 有特定的语法指定哪些编译进内核中、哪些编译为模块、及对应的源文件是什么等。内核及驱动开发人员需要编写这个Kbuild Makefile 文件。

scripts/Makefile.* 通用规则:

Makefile.build :被顶层Makefile所调用,与各级子目录的Makefile合起来构成一个完整的Makefile文件,定义built-in.o、.lib以及目标文件.o的生成规则。这个Makefile文件生成了子目录的.lib、built-in.o以及目标文件.o

Makefile.clean :被顶层Makefile所调用,用来删除目标文件等

Makefile.lib :被Makefile.build所调用,主要是对一些变量的处理,比如说在obj-y前边加上obj目录


1)obj-y用来定义哪些文件被编进(built-in)内核:obj-y中定义的.o文件由当前目录下的.c或.S文件编译生成。

2)obj-m用来定义哪些文件被编译成可加载模块(Loadable module):obj-m中定义的.o文件由当前目录下的.c或.S文件编译生成。

3)lib-y用来定义哪些文件被编成库文件:lib-y中定义的.o文件由当前目录下的.c或.S文件编译生成,它们被打包成当前目录下的一个库文件:lib.a 。

 4)obj-y、obj-m还可以指定要进入的下一层子目录:obj-$(CONFIG_JFFS2_FS)   +=  jffs2/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值