????linux?????Makefile ???????????????????????????????????????б???????????????????????????????γ? Linux ?????????????
???????? Linux ????????????????ν??????????? Makefile ?????????????С?Linux ????е? Makefile ????? Makefile ???????????У?
????1. Makefile?????? Makefile??????????????á??????????????????
????2.config???????????????????????????????????????????????ú???????? make config????
????3.arch/*/Makefile??λ????? CPU ??????μ? Makefile???? arch/arm/Makefile?????????????? Makefile??
????4.?????????μ? Makefile?????? drivers/Makefile??????????????????????????
????5.Rules.make????????????????е? Makefile ??á?
?????????? make config ???ú??????? .config?????? Makefile ???? .config ?е???????????? Makefile ??????????????????? vmlinux ??????????饗module?????????????????? Makefile ???????????????????У???????λ????Щ?????е? Makefile??????????????Щ??????????????????á?????? Makefile ?У??????include arch/$(ARCH)/Makefile??????????? CPU ??????μ? Makefile????? Makefile ?а????????????????
????λ??????????μ? Makefile ???????? .config ???????????????????????????????????????б?????????????? include $(TOPDIR)/Rules.make??
????Rules.make ??????????????????????????????? Makefile ??????????????磬?????????????????е? c ?????????????????? Makefile ???????μ???????
????%.s: %.c
????(CC)(CC)(CFLAGS) -S <?o<?o@
?????к???????????????????????????? Makefile ?а?????????????????鷳???? Linux ????????????????????????? Rules.make ?У????????? Makefile ?а??????? Rules.make??include Rules.make?????????????????? Makefile ????????????????????????????? Rules.make ?ж??????????
????%.s: %.c
????(CC)(CC)(CFLAGS) (EXTRACFLAGS)(EXTRACFLAGS)(CFLAGS_(?F))(?F))(CFLAGS_@)?S@)?S< -o $@
????Makefile ?е????
???????? Makefile ???岢?????????????????????????????μ? Makefile ?????Щ???????Щ?????????? SUBDIRS??????????? Makefile ?ж??岢?????????????? arch/*/Makefile ??????????
?????????????????????
????1?? ?汾???
?????汾????У?VERSION??PATCHLEVEL?? SUBLEVEL?? EXTRAVERSION??KERNELRELEASE???汾???????????????汾?????? VERSION=2??PATCHLEVEL=4??SUBLEVEL=18??EXATAVERSION=-rmk7??????????????????а汾KERNELRELEASE??2.4.18-rmk7
????2?? CPU ???????ARCH
????????? Makefile ???????? ARCH ??????? CPU ????????????? ARCH:=arm ???????????? Makefile ?У?????? ARCH ??????????????????б??
????3?? ·???????TOPDIR?? SUBDIRS
????TOPDIR ?????? Linux ?????????????????????磬?????????μ? Makefile ??? $(TOPDIR)/Rules.make ??????? Rules.make ??λ?á?
????SUBDIRS ????????????б????????????????????? Makefile ????? SUBDIRS ????????????Щ??????SUBDIRS ?????????????????????? Makefile ?? SUBDIRS ???? kernel drivers mm fs net ipc lib;??????????????????? arch/*/Makefile ???????? SUBDIRS ??????μ?4)?е??????
????4?? ???????????HEAD?? CORE_FILES?? NETWORKS?? DRIVERS?? LIBS
????Linux ?????? vmlinux ???????1?????????
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
(LD)(LD)(LINKFLAGS) $(HEAD) init/main.o init/version.o
--start-group
x$(CORE_FILES)
$(DRIVERS)
$(NETWORKS)
$(LIBS)
--end-group
-o vmlinux
?????????????vmlinux ???? HEAD??main.o??version.o??CORE_FILES??DRIVERS??NETWORKS ?? LIBS ???????Щ???????? HEAD?????????????????????? vmlinux ???????????????б?????У?HEAD??arch/*/Makefile ?ж??壬???????????????? vmlinux ??????б?????磬???? ARM ??е? CPU??HEAD ???????
????HEAD := arch/arm/kernel/head-$(PROCESSOR).o
????arch/arm/kernel/init_task.o
???????? head-$(PROCESSOR).o ?? init_task.o ??????????? vmlinux ?С?PROCESSOR ? armv ?? armo?????????? CPU?? CORE_FILES??NETWORK??DRIVERS ?? LIBS ????? Makefile ?ж??壬?????? arch/*/Makefile ??????????????? CORE_FILES ??????????????????? kernel/kernel.o??mm/mm.o??fs/fs.o??ipc/ipc.o?????????????Щ???????????????????????arch/arm/Makefile ?? CORE_FILES ??????????
# arch/arm/Makefile
# If we have a machine-specific directory?? then include it in the build.
MACHDIR         := arch/arm/mach-$(MACHINE)
ifeq ((MACHDIR)??(MACHDIR)??(wildcard $(MACHDIR)))
SUBDIRS         += $(MACHDIR)
CORE_FILES      := (MACHDIR)/(MACHDIR)/(MACHINE).o $(CORE_FILES)
endif
HEAD            := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
SUBDIRS         += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpe
CORE_FILES      := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
LIBS            := arch/arm/lib/lib.a $(LIBS)
????5?? ?????????CPP?? CC?? AS?? LD?? AR??CFLAGS??LINKFLAGS
?????? Rules.make ?ж????????????ù??????嵽??????????????????????????????????????????????ж???????????????????????? CROSS_COMPILE?????磺
????CROSS_COMPILE = arm-linux-
????CC = $(CROSS_COMPILE)gcc
????LD = $(CROSS_COMPILE)ld
????......
????CROSS_COMPILE ???????????????? arm-linux-?????????е?????????????? arm-linux- ???????????????????????????????????????? $(CROSS_COMPILE)??????????????????????????????????? arm-linux-gcc??
????CFLAGS ?????????? C ?????????????
????LINKFLAGS ?????????? vmlinux ????????????????????LINKFLAGS ?? arm/*/Makefile ?ж??壬???磺
????# arch/arm/Makefile
????LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds