linux内核makefile编译生成内核目标文件的过程,内核Makefile编译的过程的学习之 Makefile...

1. make menuconfig

该命令完成的工作 : 生成 .condig 文件

将menuconfg'的配置项全部列在该文件中

2. make

该命令完成的工作 :生成/include/config/auto.conf

将.config中的配置为编进内核或模块的选项定义在这里

如  CONFIG_SMDK2440_CPU2440=y

该文件被包含于 顶层Makefile中

生成/include/linux/autoconf.h

将.config中的配置为编进内核或模块的选项宏定义在这里

如  #define CONFIG_SMDK2440_CPU2440 1

3. 顶层Makefile

顶层Makefile决定哪些子目录被编译进vmlinux镜像

# Objects we will link into vmlinux / subdirs we need to visit

init-y          := init/

drivers-y       := drivers/ sound/

net-y           := net/

libs-y          := lib/

core-y          := usr/

562 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

同时顶层Makefile中包含arch/arm/Makefile所以该目录也被编译进内核

理解时可以将该目录看成顶层目录看待 Makefile 也看成顶层Makefile

arch/arm/Makefile  内容如下

94 head-y   := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o

core-y                          += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/

172 core-y                          += $(MACHINE)

173 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2400/

174 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2412/

175 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2440/

176 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2442/

177 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2443/

libs-y                          := arch/arm/lib/ $(libs-y)

这里的 CONFIG_ARCH_S3C2410 就是在/include/config/auto.conf 中定义

编译内核时 将依次进入 init——y core——y libs——y driver——y net——y所列的目录中执行

他们的Makefile 每个子目录生成 built-in.o(lib-y 目录中可能生成lib.a)

最后 head-y 所表示的文件和这些 built-in.o lib.a 一起 链接成 vmlinux

4. 子目录下的Makefile

各子目录下的 Makefile 决定该目录下的哪些文件编译进内核或模块 进入哪些子目录的

内容如下 以/net/Makefile为例

obj-y   := nonet.o

obj-$(CONFIG_NET)               := socket.o core/

tmp-$(CONFIG_COMPAT)            := compat.o

obj-$(CONFIG_NET)               += $(tmp-y)

这里的CONFIG_NET 也是在auto.conf里定义

可知 obj -y和 lib-y 同时决定编译哪些文件 进入哪些子目录

5.总结

.config 中定义了一系列的变量  Makefile 根据这些变量  决定哪些

文件被编译进内核 哪些文件被编译成模块 涉及哪些子目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值