????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 ??????????楗梞odule?????????????????? 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??????????????????邪姹綤ERNELRELEASE??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