首先阅读根目录下的makefile:
1.编译器设置
此处说明交叉编译器定义在.cross_compile文件中
ARCH :
=
arm
CROSS_COMPILE : = $(shell if [ - f .cross_compile ]; then \
cat .cross_compile; \
fi)
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) = $@
#主目标
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) $@
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) $@
清晰的获得系统对哪些目标进行了编译。