#驱动程序选项依赖文件添加处
DRIVERS-n :=
DRIVERS-y :=
DRIVERS-m :=
DRIVERS- :=
DRIVERS-$(CONFIG_ACPI_BOOT) += drivers/acpi/acpi.o
DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
DRIVERS-y += drivers/serial/serial.o \
drivers/char/char.o \
drivers/block/block.o \
drivers/misc/misc.o \
drivers/net/net.o
DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o
DRIVERS-$(CONFIG_DRM_NEW) += drivers/char/drm/drm.o
DRIVERS-$(CONFIG_DRM_OLD) += drivers/char/drm-4.0/drm.o
DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
DRIVERS-$(CONFIG_NET_FC) += drivers/net/fc/fc.o
DRIVERS-$(CONFIG_DEV_APPLETALK) +=
drivers/net/appletalk/appletalk.o
DRIVERS-$(CONFIG_TR) += drivers/net/tokenring/tr.o
DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.o
DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnetdrv.o
DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
DRIVERS-$(CONFIG_FUSION_BOOT) +=
drivers/message/fusion/fusion.o
DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394drv.o
ifneq
($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
DRIVERS-y += drivers/cdrom/driver.o
endif
DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o
DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
DRIVERS-$(CONFIG_NET_PCMCIA) +=
drivers/net/pcmcia/pcmcia_net.o
DRIVERS-$(CONFIG_NET_WIRELESS) +=
drivers/net/wireless/wireless_net.o
DRIVERS-$(CONFIG_PCMCIA_CHRDEV) +=
drivers/char/pcmcia/pcmcia_char.o
DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/driver.o
DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
DRIVERS-$(CONFIG_PPC32) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
DRIVERS-$(CONFIG_ISAPNP) += drivers/pnp/pnp.o
DRIVERS-$(CONFIG_SGI_IP22) += drivers/sgi/sgi.a
DRIVERS-$(CONFIG_VT) += drivers/video/video.o
DRIVERS-$(CONFIG_PARIDE) += drivers/block/paride/paride.a
DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o
DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
DRIVERS-$(CONFIG_USB_GADGET) += drivers/usb/gadget/built-in.o
DRIVERS-y +=drivers/media/media.o
DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
DRIVERS-$(CONFIG_HIL) += drivers/hil/hil.o
DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o
DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
DRIVERS-$(CONFIG_GSC) += drivers/gsc/gscbus.o
DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
DRIVERS-$(CONFIG_HOTPLUG_PCI) +=
drivers/hotplug/vmlinux-obj.o
DRIVERS-$(CONFIG_ISDN_BOOL) += drivers/isdn/vmlinux-obj.o
DRIVERS-$(CONFIG_CRYPTO) += crypto/crypto.o
DRIVERS := $(DRIVERS-y)
# files removed with 'make clean'
CLEAN_FILES = \
kernel/ksyms.lst include/linux/compile.h \
$(LINUX) System.map \
.tmp* \
drivers/char/consolemap_deftbl.c
drivers/video/promcon_tbl.c \
drivers/char/conmakehash \
drivers/char/drm\1/'
uts_nodomain := sed -e 's/[.].*$$//'
#新版本建立的第二步
include/linux/compile.h: $(CONFIGURATION) include/linux/version.h
newversion
@echo -n \#`cat .version` >
.ver1
@if [ -n "$(CONFIG_SMP)" ] ; then echo -n " SMP"
>> .ver1; fi
@if [ -f .name ]; then echo -n
\-`cat .name` >> .ver1; fi
@LANG=C echo ' '`date`
>> .ver1
@echo \#define UTS_VERSION \"`cat .ver1 |
$(uts_truncate)`\" > .ver
@LANG=C echo \#define LINUX_COMPILE_TIME \"`date
+%T`\" >> .ver
@echo \#define LINUX_COMPILE_BY \"`whoami`\"
>> .ver
@echo \#define LINUX_COMPILE_HOST \"`hostname |
$(uts_truncate) | $(uts_nodomain)`\"
>> .ver
@([ -x /bin/dnsdomainname ]
&& /bin/dnsdomainname
> .ver1) || \
([ -x /bin/domainname ]
&& /bin/domainname >
.ver1) || \
echo > .ver1
@echo \#define LINUX_COMPILE_DOMAIN \"`cat .ver1
| $(uts_truncate)`\" >> .ver
@echo \#define LINUX_COMPILER \"`$(CC) $(CFLAGS)
-v 2>&1 | tail -n 1`\"
>> .ver
@mv -f .ver $@
@rm -f .ver1
#新版本建立的第三步
include/linux/version.h: ./Makefile
@expr length "$(KERNELRELEASE)"
\<= $(uts_len) > /dev/null || \
(echo KERNELRELEASE
\"$(KERNELRELEASE)\" exceeds $(uts_len) characters
>&2; false)
@echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
> .ver
@echo \#define LINUX_VERSION_CODE `expr
$(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`
>> .ver
@echo '#define KERNEL_VERSION(a,b,c) (((a)
<< 16) + ((b)
<< 8) + (c))'
>>.ver
@mv -f .ver $@
#
comma := ,
#建立版本目标文件
init/version.o: init/version.c include/linux/compile.h
include/config/MARKER
$(CC) $(CFLAGS) $(CFLAGS_KERNEL)
-DUTS_MACHINE='"$(ARCH)"' -DKBUILD_BASENAME=$(subst
$(comma),_,$(subst -,_,$(*F))) -c -o init/version.o
init/version.c
#生成main.O的规则
init/main.o: init/main.c include/config/MARKER
$(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING)
-DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@
$<
#生成do_mounts的规则
init/do_mounts.o: init/do_mounts.c include/config/MARKER
$(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING)
-DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@
$<
#一起编译fs lib mm ipc kernel drivers net的各自相关make命令:fs lib mm ipc
kernel drivers net
fs lib mm ipc kernel drivers net: dummy
$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)"
$(subst $@, _dir_$@, $@)
TAGS: dummy
{ find include/asm-${ARCH} -name '*.h' -print ;
\
find include -type d \( -name "asm-*" -o -name
config \) -prune -o -name '*.h' -print ; \
find $(SUBDIRS) init arch/${ARCH} -name '*.[chS]'
; } | grep -v SCCS | grep -v '\.svn' | etags -
# Exuberant ctags works better with -I
tags: dummy
CTAGSF=`ctags --version | grep -i exuberant
>/dev/null && echo
"-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`;
\
ctags $$CTAGSF `find include/asm-$(ARCH) -name
'*.h'` && \
find include -type d \( -name "asm-*" -o -name
config \) -prune -o -name '*.h' -print | xargs ctags $$CTAGSF -a
&& \
find $(SUBDIRS) init -name '*.[ch]' | xargs ctags
$$CTAGSF -a
#定义与模块有关的make命令
#第一步
ifdef CONFIG_MODULES
ifdef CONFIG_MODVERSIONS
MODFLAGS += -DMODVERSIONS -include
$(HPATH)/linux/modversions.h
endif
#第二步
.PHONY: modules
modules: $(patsubst %, _mod_%, $(SUBDIRS))
.PHONY: $(patsubst %, _mod_%, $(SUBDIRS))
$(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h
include/config/MARKER
$(MAKE) -C $(patsubst _mod_%, %, $@)
CFLAGS="$(CFLAGS) $(MODFLAGS)" MAKING_MODULES=1 modules
#第三步
.PHONY: modules_install
modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS))
_modinst_post
.PHONY: _modinst_
ifeq ($(CONFIG_UCLINUX),y)
_modinst_:
else
_modinst_:
@rm -rf $(MODLIB)/kernel
@rm -f $(MODLIB)/build
@mkdir -p $(MODLIB)/kernel
@ln -s $(TOPDIR) $(MODLIB)/build
endif
# If System.map exists, run depmod. This
deliberately does not have a
# dependency on System.map since that would run the dependency tree
on
# vmlinux. This depmod is only for convenience to
give the initial
# boot a modules.dep even before / is mounted
read-write. However the
# boot script depmod is the master version.
ifeq "$(strip $(INSTALL_MOD_PATH))" ""
depmod_opts :=
else
depmod_opts := -b $(INSTALL_MOD_PATH) -r
endif
.PHONY: _modinst_post
_modinst_post: _modinst_post_pcmcia
if [ -r System.map ]; then $(DEPMOD) -ae -F
System.map $(depmod_opts) $(KERNELRELEASE); fi
# Backwards compatibilty symlinks for people still using old
versions
# of pcmcia-cs with hard coded pathnames on
insmod. Remove
# _modinst_post_pcmcia for kernel 2.4.1.
.PHONY: _modinst_post_pcmcia
_modinst_post_pcmcia:
cd $(MODLIB); \
mkdir -p pcmcia; \
find kernel -path '*/pcmcia/*' -name '*.o' |
xargs -i -r ln -sf ../{} pcmcia
.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
$(patsubst %, _modinst_%, $(SUBDIRS)) :
$(MAKE) -C $(patsubst _modinst_%, %, $@)
modules_install
#第四步
# modules disabled....
else
modules modules_install: dummy
@echo
@echo "The present kernel configuration has
modules disabled."
@echo "Type 'make config' and enable loadable
module support."
@echo "Then build a kernel with module support
enabled."
@echo
@exit 1
endif
#关于清楚的make命令:clean 功能删除一些在文件编译中产生文件
clean: archclean
find . \( -name '*.[oas]' -o -name core -o -name
'.*.flags' \) -type f -print \
| grep -v lxdialog/ | xargs rm -f
rm -f $(CLEAN_FILES)
rm -rf $(CLEAN_DIRS)
$(MAKE) -C Documentation/DocBook clean
#关于清楚的make命令:mrproper 比clean更彻底
mrproper: clean archmrproper
find . \( -size 0 -o -name .depend \) -type f
-print | xargs rm -f
rm -f $(MRPROPER_FILES)
rm -rf $(MRPROPER_DIRS)
$(MAKE) -C Documentation/DocBook mrproper
#关于清楚的make命令:distclean 最彻底的清除指令
distclean: mrproper
rm -f core `find . \( -not -type d \) -and
\
\( -name '*.orig' -o -name '*.rej' -o -name '*~'
\
-o -name '*.bak' -o -name '#*#' -o -name
'.*.orig' \
-o -name '.*.rej' -o -name '.SUMS' -o -size 0 \)
-type f -print` TAGS tags
#系统备份的make命令:backup 因为mrproper位清除指令,因此系统备份就 在清除了系统垃圾以后的备份
backup: mrproper
cd .. && tar cf -
linux/ | gzip -9 > backup.gz
sync
sgmldocs:
chmod 755 $(TOPDIR)/scripts/docgen
chmod 755 $(TOPDIR)/scripts/gen-all-syms
chmod 755 $(TOPDIR)/scripts/kernel-doc
$(MAKE) -C $(TOPDIR)/Documentation/DocBook
books
psdocs: sgmldocs
$(MAKE) -C Documentation/DocBook ps
pdfdocs: sgmldocs
$(MAKE) -C Documentation/DocBook pdf
htmldocs: sgmldocs
$(MAKE) -C Documentation/DocBook html
mandocs:
chmod 755 $(TOPDIR)/scripts/kernel-doc
chmod 755 $(TOPDIR)/scripts/split-man
$(MAKE) -C Documentation/DocBook man
#对系统文件信息进行整合的make命令:sums
该指令可以统计uclinux源代码中的所有文件信息,并整合形成.SUM文件
sums:
find . -type f -print | sort | xargs sum
> .SUMS
#建立编译过程必须的文件间的依赖
dep-files: scripts/mkdep archdep include/linux/version.h
rm -f .depend .hdepend
$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS))
_FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
ifdef CONFIG_MODVERSIONS
$(MAKE) update-modverfile
endif
find $(FINDHPATH) \( -name SCCS -o -name .svn \)
-prune -o -follow -name \*.h ! -name modversions.h -print | xargs
scripts/mkdep -- > .hdepend
scripts/mkdep -- init/*.c >
.depend
#设定模块版本文件
ifdef CONFIG_MODVERSIONS
MODVERFILE := $(TOPDIR)/include/linux/modversions.h
else
MODVERFILE :=
endif
export MODVERFILE
#建立依赖的make命令:depend 和dep
depend dep: dep-files
checkconfig:
find * -name '*.[hcS]' -type f -print | sort |
xargs $(PERL) -w scripts/checkconfig.pl
checkhelp:
find * -name [cC]onfig.in -print | sort | xargs
$(PERL) -w scripts/checkhelp.pl
checkincludes:
find * -name '*.[hcS]' -type f -print | sort |
xargs $(PERL) -w scripts/checkincludes.pl
ifdef CONFIGURATION
..$(CONFIGURATION):
@echo
@echo "You have a bad or nonexistent"
.$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
@echo
$(MAKE) $(CONFIGURATION)
@echo
@echo "Successful. Try re-making (ignore the
error that follows)"
@echo
exit 1
#当系统需要进行系统配置时和dummy的实现
#dummy: ..$(CONFIGURATION)
dummy:
else
dummy:
endif
#执行规则make文件:Rules.make
include Rules.make
#
# This generates dependencies for the .h files.
#
#脚本解析文件
scripts/mkdep: scripts/mkdep.c
$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep
scripts/mkdep.c
scripts/split-include: scripts/split-include.c
$(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include
scripts/split-include.c
#
# RPM target
#
# If you do a make spec before packing the tarball you can rpm -ta
it
#
spec:
. scripts/mkspec >kernel.spec
#
# Build a tar ball, generate an rpm from it and pack the
result
# There arw two bits of magic here
# 1) The use of /. to avoid tar packing just the symlink
# 2) Removing the .dep files as they have source paths in them
that
# will become
invalid
#
#程序安装rpm
rpm: clean spec
find . \( -size 0 -o -name .depend -o -name
.hdepend \) -type f -print | xargs rm -f
set -e; \
cd $(TOPDIR)/.. ; \
ln -sf $(TOPDIR) $(KERNELPATH) ; \
tar -cvz --exclude CVS -f $(KERNELPATH).tar.gz
$(KERNELPATH)/. ; \
rm $(KERNELPATH) ; \
cd $(TOPDIR) ; \
. scripts/mkversion > .version ;
\
$(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ;
\
rm $(TOPDIR)/../$(KERNELPATH).tar.gz