[Funkunux] Linux_2.6.22.6的Makefile分析

当我们分析内核的时候,第一件事就是找出内核运行的入口点在哪里,也就是第一个文件。所以我们需要对内核的顶层目录Makefile进行分析。

一般我们编译内核的时候,需要把内核镜像文件uImage编译出来,然后烧进开发板上,所以在顶层Makefile中搜索uImage,可以找到这么一句话

zImage Image xipImage bootpImage uImage: vmlinux
	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@


也就是说uImage依赖于vmlinux。继续搜索:


vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
	$(call if_changed_rule,vmlinux__)
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
	$(Q)rm -f .old_version

这里可以看到vmlinux依赖于vmlinux-lds、vmlinux-init、vmlinux-main

搜索顶层Makefile和子目录Makefile,并将函数拆解开:

vmlinux-init := $(head-y) $(init-y)
    head-y		:= arch/arm/kernel/head-nommu.o arch/arm/kernel/init_task.o
    init-y		:= init/built-in.o
    
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
    core-y		:= usr/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o
    libs-y		:= lib/lib.a lib/built-in.o
    drivers-y	:= drivers/built-in.o sound/built-in.o
    net-y       :=net/build-in.o

vmlinux-lds  := arch/arm/kernel/vmlinux.lds

至于这些文件是怎么编译链接进去的,我们无需废精力去分析 $(srctree)/scripts/Makefile.modpost 这个脚本文件,只需要在顶层目录下,配置好linux后,执行命令make uImage V=1( V=1 表示编译过程会被详细列出来),然后在列出来的条目中可以找到下面这句话:

arm-linux-ld -EL  -p --no-undefined -X -o vmlinux
 -T arch/arm/kernel/vmlinux.lds 
 arch/arm/kernel/head.o arch/arm/kernel/init_task.o  init/built-in.o --start-group  usr/built-in.o  arch/arm/kernel/built-in.o  arch/arm/mm/built-in.o  arch/arm/common/built-in.o  arch/arm/mach-s3c2410/built-in.o  arch/arm/mach-s3c2400/built-in.o  arch/arm/mach-s3c2412/built-in.o  arch/arm/mach-s3c2440/built-in.o  arch/arm/mach-s3c2442/built-in.o  arch/arm/mach-s3c2443/built-in.o  arch/arm/nwfpe/built-in.o  arch/arm/plat-s3c24xx/built-in.o  kernel/built-in.o  mm/built-in.o  fs/built-in.o  ipc/built-in.o  security/built-in.o  crypto/built-in.o  block/built-in.o  arch/arm/lib/lib.a  lib/lib.a  arch/arm/lib/built-in.o  lib/built-in.o  drivers/built-in.o  sound/built-in.o  net/built-in.o --end-group .tmp_kallsyms2.o

至此,我们知道linux的第一条代码在顶层目录arch/arm/kernel/head.s中。

以上即是linux顶层目录Makefile的分析过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值