Linux优美代码赏析0.0:Makefile

你离开我真会死。 提交于 2020-03-18 07:10:55

首先阅读根目录下的makefile:

 

1.编译器设置
ARCH            := arm
CROSS_COMPILE   :
= $(shell if [ -f .cross_compile ]; then \
                                cat .cross_compile; \
                                fi)

此处说明交叉编译器定义在.cross_compile文件中

 

 

2.生成依赖:
SRCARCH     := $(ARCH)

#主目标

all: vmlinux  

#下面文件引入架构相关的编译目录

include $(srctree)
/arch/$(SRCARCH)/Makefile

#下面引入系统相关的编译目录
# Objects we will link into vmlinux 
/ subdirs we need to visit
init
-y        := init/
drivers
-y    := drivers/ sound/ firmware/
net
-y        := net/
libs
-y        := lib/
core
-y        := usr/


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

vmlinux
-dirs    := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
             $(core
-y) $(core-m) $(drivers-y) $(drivers-m) \
             $(net
-y) $(net-m) $(libs-y) $(libs-m)))

vmlinux
-alldirs    := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
             $(init
-n) $(init-) \
             $(core
-n) $(core-) $(drivers-n) $(drivers-) \
             $(net
-n)  $(net-)  $(libs-n)    $(libs-))))

#将目录改成目标,即编译成每个目录下的built
-in.o

init
-y        := $(patsubst %/%/built-in.o, $(init-y))
core
-y        := $(patsubst %/%/built-in.o, $(core-y))
drivers
-y    := $(patsubst %/%/built-in.o, $(drivers-y))
net
-y        := $(patsubst %/%/built-in.o, $(net-y))
libs
-y1        := $(patsubst %/%/lib.a, $(libs-y))
libs
-y2        := $(patsubst %/%/built-in.o, $(libs-y))
libs
-y        := $(libs-y1) $(libs-y2)

vmlinux
-init := $(head-y) $(init-y)
vmlinux
-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
vmlinux
-all  := $(vmlinux-init) $(vmlinux-main)
vmlinux
-lds  := arch/$(SRCARCH)/kernel/vmlinux.lds

vmlinux: $(vmlinux
-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE


modpost
-init := $(filter-out init/built-in.o, $(vmlinux-init))
vmlinux.o: $(modpost
-init) $(vmlinux-main) FORCE
    $(call if_changed_rule,vmlinux
-modpost)


$(sort $(vmlinux
-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;


PHONY 
+= $(vmlinux-dirs)
$(vmlinux
-dirs): prepare scripts
    $(Q)$(MAKE) $(build)
=$@
 

3.arch\arm\Makefile
head-y        := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
textofs
-y    := 0x00008000

 machine
-$(CONFIG_ARCH_S3C64XX)       := s3c6400 s3c6410
    plat
-$(CONFIG_PLAT_S3C64XX)       := s3c64xx s3c

TEXT_OFFSET :
= $(textofs-y)

MACHINE  :
= arch/arm/mach-$(word 1,$(machine-y))/

machdirs :
= $(patsubst %,arch/arm/mach-%/,$(machine-y))
platdirs :
= $(patsubst %,arch/arm/plat-%/,$(plat-y))

core
-y                += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
core
-y                += $(machdirs) $(platdirs)
core
-$(CONFIG_FPE_NWFPE)    += arch/arm/nwfpe/
core
-$(CONFIG_FPE_FASTFPE)    += $(FASTFPE_OBJ)
core
-$(CONFIG_VFP)        += arch/arm/vfp/

drivers
-$(CONFIG_OPROFILE)      += arch/arm/oprofile/

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

boot :
= arch/arm/boot

# Convert bzImage to zImage
bzImage: zImage

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

zinstall install: vmlinux
    $(Q)$(MAKE) $(build)
=$(boot) MACHINE=$(MACHINE) $@

清晰的获得系统对哪些目标进行了编译。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!