处理第3个目标:subdirs
Makefile:27 没有找到VENDOR_TOPDIRS的定义。
DIRS = $(VENDOR_TOPDIRS) include lib include user
.PHONY: subdirs
--LINUX target----- subdirs: linux modules
--LINUX target----- for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir || exit 1 ; done
--LINUX target-----
--LINUX target-----
--LINUX target----- 这里就需要先处理linux 和 modules
--LINUX target----- Makefile:201: target 'linux' does not exist
--LINUX target----- .PHONY: linux
--LINUX target----- linux:
--LINUX target----- . $(LINUXDIR)/.config; if [ "$$CONFIG_INITRAMFS_SOURCE" != "" ]; then \
--LINUX target----- ( \
--LINUX target----- cd $(LINUXDIR) ; \
--LINUX target----- mkdir -p `dirname $$CONFIG_INITRAMFS_SOURCE`; \
--LINUX target----- touch $$CONFIG_INITRAMFS_SOURCE || exit 1; \
--LINUX target----- ) \
--LINUX target----- fi
--LINUX target----- @if expr "$(LINUXDIR)" : 'linux-2\.[0-4].*' > /dev/null && \
--LINUX target----- [ ! -f $(LINUXDIR)/.depend ] ; then \
--LINUX target----- echo "ERROR: you need to do a 'make dep' first" ; \
--LINUX target----- exit 1 ; \
--LINUX target----- fi
--LINUX target----- $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
--LINUX target----- @if ! expr "$(LINUXDIR)" : 'linux-2.[01234].*' > /dev/null ; then \
--LINUX target----- : ignore failure in headers_install; \
--LINUX target----- $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) headers_install || true; \
--LINUX target----- fi
--LINUX target----- if [ -f $(LINUXDIR)/vmlinux ]; then \
--LINUX target----- ln -f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux ; \
--LINUX target----- fi
--LINUX target-----
--LINUX target----- 对应规则宏替换后的执行命令
--LINUX target-----
--LINUX target----- 第1条命令,检查是否配置了CONFIG_INITRAMFS_SOURCE,若有配置,进入LINUX创建文件。从命令结果看,是没有执行的
--LINUX target----- . linux/.config; if [ "$CONFIG_INITRAMFS_SOURCE" != "" ]; then \
--LINUX target----- ( \
--LINUX target----- cd linux ; \
--LINUX target----- mkdir -p `dirname $CONFIG_INITRAMFS_SOURCE`; \
--LINUX target----- touch $CONFIG_INITRAMFS_SOURCE || exit 1; \
--LINUX target----- ) \
--LINUX target----- fi
--LINUX target----- 第2条命令检查LINUX的版本,因为是4.4的内核,不需要执行make dep
--LINUX target----- if expr "linux" : 'linux-2\.[0-4].*' > /dev/null && \
--LINUX target----- [ ! -f linux/.depend ] ; then \
--LINUX target----- echo "ERROR: you need to do a 'make dep' first" ; \
--LINUX target----- exit 1 ; \
--LINUX target----- fi
--LINUX target----- 第3条命令,进入LINUX目录,创建zImage 目标
--LINUX target----- make ARCH=arm CROSS_COMPILE=arm-uclinuxeabi- CFLAGS_KERNEL="" AFLAGS_KERNEL="" EXTRA_MODULE_DIRS="" -j1 -C linux zImage || exit 1
--LINUX target-----
--LINUX target----- make[1]: Entering directory '/home/dx/uclinux/uClinux-dist/linux'
--LINUX target-----
--LINUX target----- % outputmakefile->scripts_basic->include/config/auto.conf->include/config/kernel.release->
--LINUX target----- %
--LINUX target----- %
--LINUX target----- %Makefile:576: update target 'include/config/auto.conf' due to: .config include/config/auto.conf.cmd
--LINUX target----- %
--LINUX target----- %//include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
--LINUX target----- % //$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
--LINUX target----- %
--LINUX target----- % 执行命令
--LINUX target----- % make -f ./Makefile silentoldconfig
--LINUX target----- %
--LINUX target----- % 因为Makefile:534: update target 'silentoldconfig' due to: scripts_basic outputmakefile FORCE
--LINUX target----- % //%config: scripts_basic outputmakefile FORCE
--LINUX target----- % // $(Q)$(MAKE) $(build)=scripts/kconfig $@
--LINUX target----- %
--LINUX target----- %
--LINUX target----- % 因此需要创建scripts_baseic
--LINUX target----- %
--LINUX target----- % Makefile:442: target 'scripts_basic' does not exist
--LINUX target----- % //# makefile (from 'scripts/Kbuild.include', line 175)
--LINUX target----- % // build := -f ./scripts/Makefile.build obj
--LINUX target----- % //# Basic helpers built in scripts/
--LINUX target----- % //PHONY += scripts_basic
--LINUX target----- % //scripts_basic:
--LINUX target----- % //$(Q)$(MAKE) $(build)=scripts/basic
--LINUX target----- % //$(Q)rm -f .tmp_quiet_recordmcount
--LINUX target----- %
--LINUX target----- % make -f ./scripts/Makefile.build obj=scripts/basic
--LINUX target----- % rm -f .tmp_quiet_recordmcount
--LINUX target----- %
--LINUX target----- % 处理完依赖关系后,处理silentoldconfig
--LINUX target----- % scripts/kconfig/Makefile:37: update target 'silentoldconfig' due to: scripts/kconfig/conf
--LINUX target----- % make -f ./scripts/Makefile.build obj=scripts/kconfig silentoldconfig
--LINUX target----- % 因为silentoldconfig 依赖conf
--LINUX target----- % silentoldconfig: $(obj)/conf
--LINUX target----- % $(Q)mkdir -p include/config include/generated
--LINUX target----- % $< $(silent) --$@ $(Kconfig)
--LINUX target----- %
--LINUX target----- % 先处理scripts/kconfig/conf
--LINUX target----- % mkdir -p include/config include/generated
--LINUX target----- % scripts/kconfig/conf --silentoldconfig Kconfig
--LINUX target----- %
--LINUX target----- %开始执行include/config/kernel.release的命令.这里反映出之前为什么先要处理auto.conf
--LINUX target----- %
--LINUX target----- %Makefile:954: update target 'include/config/kernel.release' due to: include/config/auto.conf FORCE
--LINUX target----- %include/config/kernel.release: include/config/auto.conf FORCE
--LINUX target----- % $(call filechk,kernel.release)
--LINUX target----- % 在# makefile (from 'scripts/Kbuild.include', line 54)定义了
--LINUX target----- % filechk = $(Q)set -e; $(kecho) ' CHK $@'; mkdir -p $(dir $@); $(filechk_$(1)) < $< >
[email protected]; if [ -r $@ ] && cmp -s $@
[email protected]; then rm -f
[email protected]; else $(kecho) ' UPD $@'; mv -f
[email protected] $@; fi
--LINUX target----- %莶问齥ernel.release,
--LINUX target----- % set -e; : ' CHK include/config/kernel.release'; mkdir -p include/config/; echo "4.4.0-uc0$(/bin/bash ./scripts/setlocalversion .)" < include/config/auto.conf > include/config/kernel.release.tmp; if [ -r include/config/kernel.release ] && cmp -s include/config/kernel.release include/config/kernel.release.tmp; then rm -f include/config/kernel.release.tmp; else : ' UPD include/config/kernel.release'; mv -f include/config/kernel.release.tmp include/config/kernel.release; fi
--LINUX target-----
--LINUX target----- +2)Makefile:462: target 'asm-generic' does not exist
--LINUX target----- +asm-generic:
--LINUX target----- +$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
--LINUX target----- + src=asm obj=arch/$(SRCARCH)/include/generated/asm
--LINUX target----- +$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
--LINUX target----- + src=uapi/asm obj=arch/$(SRCARCH)/include/generated/uapi/asm
--LINUX target----- +
--LINUX target----- + 根据arm/include/asm/kbuild中的内容,将linux/include/asm-generic目录中相关的头文件,以新生成头文件的方式inlucde
--LINUX target----- + make -f ./scripts/Makefile.asm-generic \
--LINUX target----- + src=asm obj=arch/arm/include/generated/asm
--LINUX target----- +
--LINUX target----- + 同上,根据arm/include/uapi/asm/kbuild中的内容,将linux/include/uapi/asm-generic目录中相关的头文件,以新生成头文件的方式inlucde
--LINUX target----- + make -f ./scripts/Makefile.asm-generic \
--LINUX target----- + src=uapi/asm obj=arch/arm/include/generated/uapi/asm
--LINUX target----- +
--LINUX target-----
--LINUX target----- 生成include/generated/uapi/linux/version.h
--LINUX target----- _ 3)Makefile:1016: update target 'include/generated/uapi/linux/version.h' due to: Makefile FORCE
--LINUX target----- _
--LINUX target----- _ define filechk_version.h
--LINUX target----- _ (echo \#define LINUX_VERSION_CODE $(shell \
--LINUX target----- _ expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
--LINUX target----- _ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
--LINUX target----- _ endef
--LINUX target----- _ $(version_h): $(srctree)/Makefile FORCE
--LINUX target----- _ $(call filechk,version.h)
--LINUX target----- _ $(Q)rm -f $(old_version_h)
--LINUX target-----
--LINUX target-----
--LINUX target----- *生成 include/generated/utsrelease.h
--LINUX target----- * 4)Makefile:1020: update target 'include/generated/utsrelease.h' due to: include/config/kernel.release FORCE
--LINUX target----- * include/generated/utsrelease.h: include/config/kernel.release FORCE
--LINUX target----- * $(call filechk,utsrelease.h)
--LINUX target-----
--LINUX target-----
--LINUX target----- + prepare3目标用于检查是否不再LINUX源代码目录下make.这里不存在这个问题,因此没有实质的处理
--LINUX target----- + prepare3: include/config/kernel.release 依赖关系前面已经处理了。
--LINUX target----- + prepare2: prepare3 outputmakefile asm-generic 前面已经处理了
--LINUX target----- + prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
--LINUX target----- + include/config/auto.conf
--LINUX target----- + $(cmd_crmodverdir)
--LINUX target----- export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
--LINUX target----- 创建 .tmp_versions 目录。后面编译过程中用于保存了与mod相关的文件
--LINUX target----- 5)Makefile:984: update target 'prepare1' due to: prepare2 include/generated/uapi/linux/version.h include/generated/utsrelease.h include/config/auto.conf
--LINUX target----- mkdir -p .tmp_versions
--LINUX target-----
--LINUX target----- 怎么又会执行这个目标了。为什么要重复执行呢。不清楚,也许工程文件写的不好吧。
--LINUX target----- 有空的时候,检查每次产生的文件时一样的吗。来确定是否是make文件的原因吧
--LINUX target----- 在下面紧接的地方,因为依赖关系里有scripts_basic,而且scripts_basic的处理规则是FORCE类型的因此会重复执行
--LINUX target----- 其实就是生成fixdep
--LINUX target----- 6)Makefile:442: target 'scripts_basic' does not exist
--LINUX target----- scripts_basic:
--LINUX target----- $(Q)$(MAKE) $(build)=scripts/basic
--LINUX target----- $(Q)rm -f .tmp_quiet_recordmcount
--LINUX target-----
--LINUX target-----
--LINUX target----- PHONY += archheaders
--LINUX target----- archheaders:
--LINUX target----- PHONY += archscripts
--LINUX target----- archscripts:
--LINUX target----- 因此这两个目标也没有任何执行
--LINUX target-----
--LINUX target----- 7)arch/arm/Makefile:314: update target 'archprepare' due to: archheaders archscripts prepare1 scripts_basic
--LINUX target----- archprepare:
--LINUX target----- $(Q)$(MAKE) $(build)=arch/arm/tools include/generated/mach-types.h
--LINUX target----- make -f ./scripts/Makefile.build obj=arch/arm/tools include/generated/mach-types.h
--LINUX target-----
--LINUX target-----
--LINUX target----- 根据arch/arm/tools目录里的文件生成inlude /generated/mach-types.h
--LINUX target----- 8) arch/arm/tools/Makefile:8: update target 'include/generated/mach-types.h' due to: arch/arm/tools/gen-mach-types arch/arm/tools/mach-types
--LINUX target----- include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
--LINUX target----- @$(kecho) ' Generating $@'
--LINUX target----- @mkdir -p $(dir $@)
--LINUX target----- $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
--LINUX target-----
--LINUX target-----
--LINUX target----- 9)Makefile:989: update target 'prepare0' due to: archprepare FORCE
--LINUX target----- archprepare: archheaders archscripts prepare1 scripts_basic
--LINUX target-----
--LINUX target----- prepare0: archprepare FORCE
--LINUX target----- $(Q)$(MAKE) $(build)=.
--LINUX target-----
--LINUX target----- 这里主要根据kbuild生成kernel/bounds.s
--LINUX target----- make -f ./scripts/Makefile.build obj=.
--LINUX target----- 参见根目录KBUILD文件中的注释,可以理解,但不清楚Makefile如何将Kbuild文件包含捡来的
--LINUX target----- 在scripts/Makefile.build44行include $(kbuild-file),这个里面定义了需要处理的内容
--LINUX target----- include/generated/bounds.h include/generated/timeconst.h arch/arm/kernel/asm-offsets.s missing-syscalls
--LINUX target-----
--LINUX target-----
--LINUX target----- 前面到prepare已经处理完成了
--LINUX target----- 应该是makefile 1119: modules_prepare: prepare scripts
--LINUX target-----
--LINUX target----- 10)Makefile:548: update target 'scripts' due to: scripts_basic include/config/auto.conf include/config/tristate.conf asm-generic
--LINUX target----- scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \
--LINUX target----- asm-generic
--LINUX target----- $(Q)$(MAKE) $(build)=$(@)
--LINUX target-----
--LINUX target----- scripts/Makefile.build:403: target 'scripts/mod' does not exist
--LINUX target----- make -f ./scripts/Makefile.build obj=scripts/mod
--LINUX target-----
--LINUX target-----
--LINUX target----- 因为这里的依赖关系,先处理额scripts
--LINUX target----- 到此,相关的依赖关系及准备工作已经完成,依次处理vmlinux-dirs目录
--LINUX target----- vmlinux-dirs := init usr arch/arm/kernel arch/arm/mm arch/arm/common
--LINUX target----- arch/arm/probes arch/arm/net arch/arm/crypto arch/arm/firmware
--LINUX target----- kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt
--LINUX target----- 11)Makefile:946: update target 'init' due to: prepare scripts
--LINUX target----- $(vmlinux-dirs): prepare scripts
--LINUX target----- $(Q)$(MAKE) $(build)=$@
--LINUX target----- make -f ./scripts/Makefile.build obj=init
--LINUX target-----
--LINUX target----- 经过这个处理,在每个init usr arch/arm/kernel arch/arm/mm arch/arm/common
--LINUX target----- arch/arm/probes arch/arm/net arch/arm/crypto arch/arm/firmware
--LINUX target----- kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt
--LINUX target----- 目录下,生成了built-in.o
--LINUX target-----
--LINUX target----- 13) Makefile:932: update target 'vmlinux' due to: scripts/link-vmlinux.sh arch/arm/kernel/vmlinux.lds arch/arm/kernel/head-nommu.o init/built-in.o usr/built-in.o arch/arm/nwfpe/built-in.o arch/arm/vfp/built-in.o arch/arm/kernel/built-in.o arch/arm/mm/built-in.o arch/arm/common/built-in.o arch/arm/probes/built-in.o arch/arm/net/built-in.o arch/arm/crypto/built-in.o arch/arm/firmware/built-in.o arch/arm/mach-versatile/built-in.o arch/arm/plat-versatile/built-in.o kernel/built-in.o certs/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o virt/built-in.o FORCE
--LINUX target----- vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE
--LINUX target----- //这是没有执行的
--LINUX target----- ifdef CONFIG_HEADERS_CHECK
--LINUX target----- $(Q)$(MAKE) -f $(srctree)/Makefile headers_check
--LINUX target----- endif
--LINUX target----- //这是没有执行的
--LINUX target----- ifdef CONFIG_SAMPLES
--LINUX target----- $(Q)$(MAKE) $(build)=samples
--LINUX target----- endif
--LINUX target----- //这是没有执行的
--LINUX target----- ifdef CONFIG_BUILD_DOCSRC
--LINUX target----- $(Q)$(MAKE) $(build)=Documentation
--LINUX target----- endif
--LINUX target----- //这是没有执行的
--LINUX target----- ifdef CONFIG_GDB_SCRIPTS
--LINUX target----- $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py
--LINUX target----- endif
--LINUX target----- +$(call if_changed,link-vmlinux)
--LINUX target-----
--LINUX target----- cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
--LINUX target----- # makefile (from 'scripts/Kbuild.include', line 251)
--LINUX target-----if_changed = $(if $(strip $(any-prereq) $(arg-check)), @set -e; $(echo-cmd) $(cmd_$(1)); printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
--LINUX target-----
--LINUX target-----# makefile (from '.vmlinux.cmd', line 1)
--LINUX target-----cmd_vmlinux := /bin/bash scripts/link-vmlinux.sh arm-uclinuxeabi-ld -EL -p --no-undefined -X --pic-veneer
--LINUX target-----
--LINUX target-----这里执行的都是 /bin/bash scripts/link-vmlinux.sh里的内容
--LINUX target-----#!/bin/sh
--LINUX target-----#
--LINUX target-----# link vmlinux
--LINUX target-----#
--LINUX target-----# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_INIT) and
--LINUX target-----# $(KBUILD_VMLINUX_MAIN). Most are built-in.o files from top-level directories
--LINUX target-----# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
--LINUX target-----# Ordering when linking is important, and $(KBUILD_VMLINUX_INIT) must be first.
--LINUX target-----#
--LINUX target-----# vmlinux
--LINUX target-----# ^
--LINUX target-----# |
--LINUX target-----# +-< $(KBUILD_VMLINUX_INIT)
--LINUX target-----# | +--< init/version.o + more
--LINUX target-----# |
--LINUX target-----# +--< $(KBUILD_VMLINUX_MAIN)
--LINUX target-----# | +--< drivers/built-in.o mm/built-in.o + more
--LINUX target-----# |
--LINUX target-----# +-< ${kallsymso} (see description in KALLSYMS section)
--LINUX target-----#
--LINUX target-----# vmlinux version (uname -v) cannot be updated during normal
--LINUX target-----# descending-into-subdirs phase since we do not yet know if we need to
--LINUX target-----# update vmlinux.
--LINUX target-----# Therefore this step is delayed until just before final link of vmlinux.
--LINUX target-----#
--LINUX target-----# System.map is generated to document addresses of all kernel symbols
--LINUX target-----
--LINUX target-----* set -e; echo ' /bin/bash scripts/link-vmlinux.sh arm-uclinuxeabi-ld -EL -p --no-undefined -X --pic-veneer '; /bin/bash scripts/link-vmlinux.sh arm-uclinuxeabi-ld -EL -p --no-undefined -X --pic-veneer ; printf '%s\n' 'cmd_vmlinux := /bin/bash scripts/link-vmlinux.sh arm-uclinuxeabi-ld -EL -p --no-undefined -X --pic-veneer ' > ./.vmlinux.cmd
--LINUX target-----
--LINUX target-----* /bin/bash scripts/link-vmlinux.sh arm-uclinuxeabi-ld -EL -p --no-undefined -X --pic-veneer
--LINUX target-----* LD vmlinux.o
--LINUX target-----第1步:这里通过modpost_link()生成了vmlinux.o
--LINUX target-----
--LINUX target-----第2步:
--LINUX target-----# modpost vmlinux.o to check for section mismatches
--LINUX target-----${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
--LINUX target-----* scripts/Makefile.modpost:97: update target 'vmlinux.o' due to: FORCE
--LINUX target-----
--LINUX target-----* echo ' scripts/mod/modpost -o ./Module.symvers -S vmlinux.o'; scripts/mod/modpost -o ./Module.symvers -S vmlinux.o
--LINUX target-----* scripts/mod/modpost -o ./Module.symvers -S vmlinux.o
--LINUX target-----第2步:
--LINUX target-----* GEN .version
--LINUX target-----
--LINUX target-----第4步:
--LINUX target-----# final build of init/
--LINUX target-----${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init
--LINUX target----- 这里重新生成了 init/built-in.o
--LINUX target-----
--LINUX target-----第5步:kallsyms support
--LINUX target-----* :
--LINUX target-----* KSYM .tmp_kallsyms1.o
--LINUX target-----* KSYM .tmp_kallsyms2.o
--LINUX target-----第6步:
--LINUX target-----vmlinux_link "${kallsymso}" vmlinux
--LINUX target-----* LD vmlinux
--LINUX target-----
--LINUX target-----第7步:
--LINUX target-----* SYSMAP System.map
--LINUX target----- $(obj)/Image: vmlinux FORCE
--LINUX target----- $(call if_changed,objcopy)
--LINUX target----- @$(kecho) ' Kernel: $@ is ready'
--LINUX target-----
--LINUX target-----$(obj)/compressed/vmlinux: $(obj)/Image FORCE
--LINUX target----- $(Q)$(MAKE) $(build)=$(obj)/compressed $@
--LINUX target-----
--LINUX target-----$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
--LINUX target----- $(call if_changed,objcopy)
--LINUX target----- @$(kecho) ' Kernel: $@ is ready'
--LINUX target----- 注意,这里的目标,是来自ARCH目录下的。因此先生成Image---> zImage -->arch/arm/boot/compressed/vmlinux
--LINUX target----- 为什么要先生成zImage呢,应该先生成compressed/vmlinux
--LINUX target-----arch/arm/Makefile:328: update target 'Image' due to: vmlinux
--LINUX target-----make -f ./scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/mach-versatile/ arch/arm/boot/Image
--LINUX target-----arch/arm/boot/Makefile:48: update target 'arch/arm/boot/Image' due to: vmlinux FORCE
--LINUX target-----set -e; echo ' arm-uclinuxeabi-objcopy -O binary -R .comment -S vmlinux arch/arm/boot/Image'; arm-uclinuxeabi-objcopy -O binary -R .comment -S vmlinux arch/arm/boot/Image; printf '%s\n' 'cmd_arch/arm/boot/Image := arm-uclinuxeabi-objcopy -O binary -R .comment -S vmlinux arch/arm/boot/Image' > arch/arm/boot/.Image.cmd
--LINUX target----- arm-uclinuxeabi-objcopy -O binary -R .comment -S vmlinux arch/arm/boot/Image
--LINUX target-----: ' Kernel: arch/arm/boot/Image is ready'
--LINUX target-----arch/arm/Makefile:328: update target 'zImage' due to: vmlinux Image
--LINUX target-----make -f ./scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/mach-versatile/ arch/arm/boot/zImage
--LINUX target-----arch/arm/boot/Makefile:48: update target 'arch/arm/boot/Image' due to: FORCE
--LINUX target-----: ' Kernel: arch/arm/boot/Image is ready'
--LINUX target-----arch/arm/boot/Makefile:52: update target 'arch/arm/boot/compressed/vmlinux' due to: arch/arm/boot/Image FORCE
--LINUX target-----make -f ./scripts/Makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux
--LINUX target-----
--LINUX target-----bad_syms=$(arm-uclinuxeabi-nm arch/arm/boot/compressed/vmlinux | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && [ -z "$bad_syms" ] || ( echo "following symbols must have non local/private scope:" >&2; echo "$bad_syms" >&2; rm -f arch/arm/boot/compressed/vmlinux; false )
--LINUX target-----arch/arm/boot/Makefile:55: update target 'arch/arm/boot/zImage' due to: arch/arm/boot/compressed/vmlinux FORCE
--LINUX target-----set -e; echo ' arm-uclinuxeabi-objcopy -O binary -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage'; arm-uclinuxeabi-objcopy -O binary -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage; printf '%s\n' 'cmd_arch/arm/boot/zImage := arm-uclinuxeabi-objcopy -O binary -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage' > arch/arm/boot/.zImage.cmd
--LINUX target----- arm-uclinuxeabi-objcopy -O binary -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage
--LINUX target-----: ' Kernel: arch/arm/boot/zImage is ready'
--LINUX target-----make[1]: Leaving directory '/home/dx/uclinux/uClinux-dist/linux'
--LINUX target-----
--LINUX target-----
--LINUX target-----到这里,完成subdir依赖关系里的第1个linux内核的处理,接下来处理第2个依赖关系
--LINUX target-----
--LINUX target-----
--LINUX target-----
--LINUX target-----这里仍然执行的是
--LINUX target-----.PHONY: linux
--LINUX target-----linux:
--LINUX target----- 目标的第4条规则 ,安装headers_install
--LINUX target----- if ! expr "linux" : 'linux-2.[01234].*' > /dev/null ; then \
--LINUX target----- : ignore failure in headers_install; \
--LINUX target----- make ARCH=arm CROSS_COMPILE=arm-uclinuxeabi- CFLAGS_KERNEL="" AFLAGS_KERNEL="" EXTRA_MODULE_DIRS="" -j1 -C linux headers_install || true; \
--LINUX target----- fi
--LINUX target----- __headers: $(version_h) scripts_basic asm-generic archheaders archscripts FORCE
--LINUX target----- $(Q)$(MAKE) $(build)=scripts build_unifdef
--LINUX target-----
--LINUX target----- headers_install: __headers
--LINUX target----- $(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/uapi/asm/Kbuild),, \
--LINUX target----- $(error Headers not exportable for the $(SRCARCH) architecture))
--LINUX target----- $(Q)$(MAKE) $(hdr-inst)=include/uapi
--LINUX target----- $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst)
--LINUX target-----
--LINUX target-----
--LINUX target----- make[1]: Entering directory '/home/dx/uclinux/uClinux-dist/linux'
--LINUX target----- 先处理__headers
--LINUX target----- 处理第1个依赖 version.h
--LINUX target----- Makefile:1016: update target 'include/generated/uapi/linux/version.h' due to: FORCE
--LINUX target----- $(version_h): $(srctree)/Makefile FORCE
--LINUX target----- $(call filechk,version.h)
--LINUX target----- $(Q)rm -f $(old_version_h)
--LINUX target----- 处理第2个依赖scripts_basic
--LINUX target----- 处理第3个依赖asm-generic
--LINUX target----- 后面两个依赖规则为空,不执行
--LINUX target----- Makefile:1054: update target '__headers' due to: include/generated/uapi/linux/version.h scripts_basic asm-generic archheaders archscripts FORCE
--LINUX target-----
--LINUX target----- 在处理headers_install
--LINUX target----- Makefile:1062: update target 'headers_install' due to: __headers
--LINUX target-----
--LINUX target----- $(Q)$(MAKE) $(hdr-inst)=include/uapi根据其kbuild,相关目录的头文件安装
--LINUX target----- # UAPI Header export list
--LINUX target-----# Top-level Makefile calls into asm-$(ARCH)
--LINUX target-----# List only non-arch directories below
--LINUX target-----
--LINUX target-----header-y += asm-generic/
--LINUX target-----header-y += linux/
--LINUX target-----header-y += sound/
--LINUX target-----header-y += mtd/
--LINUX target-----header-y += rdma/
--LINUX target-----header-y += video/
--LINUX target-----header-y += drm/
--LINUX target-----header-y += xen/
--LINUX target-----header-y += scsi/
--LINUX target-----header-y += misc/
--LINUX target-----
--LINUX target-----
--LINUX target-----
--LINUX target----- make[1]: Leaving directory '/home/dx/uclinux/uClinux-dist/linux'
--LINUX target-----
--LINUX target----- if [ -f linux/vmlinux ]; then \
--LINUX target----- ln -f linux/vmlinux linux/linux ; \
--LINUX target----- fi
--LINUX target-----
--LINUX target-----
--LINUX target----- 到此,subdirs第1个依赖关系linux处理完成
------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
--modules target--- PHONY += modules_prepare
--modules target--- modules_prepare: prepare scripts
--modules target---
--modules target---
--modules target--- //.PHONY: modules
--modules target--- //modules: generated_headers
--modules target--- // . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then \
--modules target--- // [ -d $(LINUXDIR)/modules ] || mkdir $(LINUXDIR)/modules; \
--modules target--- // $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) modules || exit 1; \
--modules target---
--modules target---
--modules target--- . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then \
--modules target--- [ -d $(LINUXDIR)/modules ] || mkdir $(LINUXDIR)/modules; \
--modules target--- $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) modules || exit 1; \
--modules target--- fi
--modules target---
--modules target--- Makefile:111: target 'generated_headers' does not exist
--modules target--- if [ ! -f linux/include/linux/autoconf.h ] ; then \
--modules target--- ln -sf /home/dx/uclinux/uClinux-dist/linux/include/generated/autoconf.h linux/include/linux/autoconf.h ; \
--modules target--- fi
--modules target---
--modules target---
--modules target--- 处理完modules的依赖目标 generated_headers
--modules target---
--modules target--- Makefile:117: update target 'modules' due to: generated_headers
--modules target--- . linux/.config; if [ "$CONFIG_MODULES" = "y" ]; then \
--modules target--- [ -d linux/modules ] || mkdir linux/modules; \
--modules target--- make ARCH=arm CROSS_COMPILE=arm-uclinuxeabi- CFLAGS_KERNEL="" AFLAGS_KERNEL="" EXTRA_MODULE_DIRS="" -j1 -C linux modules || exit 1; \
--modules target--- fi
--modules target--- make[1]: Entering directory '/home/dx/uclinux/uClinux-dist/linux'
--modules target---
--modules target--- 这里的处理步骤很类似处理LINUX的过程
--modules target--- //vmlinux-dirs := init usr arch/arm/nwfpe arch/arm/vfp arch/arm/kernel
--modules target--- arch/arm/mm arch/arm/common arch/arm/probes arch/arm/net
--modules target--- arch/arm/crypto arch/arm/firmware arch/arm/mach-versatile
--modules target--- arch/arm/plat-versatile kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt
--modules target--- //modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
--modules target--- //$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
--modules target---
--modules target--- //%/modules.builtin: include/config/auto.conf
--modules target--- //# recipe to execute (from 'Makefile', line 1114):
--modules target--- //$(Q)$(MAKE) $(modbuiltin)=$*
--modules target---
--modules target--- // PHONY += modules
--modules target--- //modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
--modules target--- //$(Q)$(AWK) '!x[$$0]++' $(vmlinux-only-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
--modules target--- //@$(kecho) ' Building modules, stage 2.';
--modules target--- //$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
--modules target--- //$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
--modules target---
--modules target---
--modules target--- 处理prepare0 ->archprepare -> prepare1 -> prepare2 ->include/generated/uapi/linux/version.h include/generated/utsrelease.h include/config/auto.conf
--modules target--- 这下面为什么还要执行呢,在处理每个目录目标时,都依赖了prepare scripts .
--modules target--- 而这些依赖关系里有些是FORCE规定的,因此会再次执行。
--modules target--- 因为处理linux目标时,只定义了KBUILD_BUILTIN,
--modules target--- 而处理modules目标时,定义的是KBUILD_MODULES,
--modules target--- 因此相应的依赖关系,还是有必要进行处理。只是那些依赖关系一定要处理,这个就是LINUX系统开发者确定的
--modules target--- 有空,可以比较两个阶段这些处理是否有不同。
--modules target--- 比如后面处理scripts_basic目录时,就因为是处理modules,增加了scripts/basic/modules.order依赖关系
--modules target---
--modules target---
--modules target--- Makefile:954: update target 'include/config/kernel.release' due to: FORCE
--modules target--- Makefile:1016: update target 'include/generated/uapi/linux/version.h' due to: FORCE
--modules target--- Makefile:1020: update target 'include/generated/utsrelease.h' due to: FORCE
--modules target--- Makefile:984: update target 'prepare1' due to: prepare2 include/generated/uapi/linux/version.h include/generated/utsrelease.h include/config/auto.conf
--modules target--- Makefile:442: target 'scripts_basic' does not exist
--modules target--- scripts/Makefile.build:353: update target 'scripts/basic/modules.order' due to: FORCE
--modules target--- scripts/Makefile.host:91: update target 'scripts/basic/fixdep' due to: FORCE
--modules target--- scripts/Makefile.build:97: update target '__build' due to: scripts/basic/modules.order scripts/basic/fixdep
--modules target--- arch/arm/Makefile:314: update target 'archprepare' due to: archheaders archscripts prepare1 scripts_basic
--modules target--- Makefile:989: update target 'prepare0' due to: archprepare FORCE
--modules target--- scripts/Makefile.build:353: update target 'modules.order' due to: FORCE
--modules target--- Makefile:548: update target 'scripts' due to: scripts_basic include/config/auto.conf include/config/tristate.conf asm-generic
--modules target--- scripts/Makefile.build:403: target 'scripts/mod' does not exist
--modules target--- scripts/Makefile.build:353: update target 'scripts/mod/modules.order' due to: FORCE
--modules target--- scripts/Makefile.build:353: update target 'scripts/modules.order' due to: scripts/mod FORCE
--modules target--- scripts/Makefile.host:91: update target 'scripts/kallsyms' due to: FORCE
--modules target--- scripts/Makefile.host:91: update target 'scripts/conmakehash' due to: FORCE
--modules target---
--modules target---
--modules target--- 这里完成prepare scripts依赖关系的处理
--modules target--- 接下来处理modules的关系。按照目录顺序处理moudles.order
--modules target---
--modules target--- Makefile:946: update target 'init' due to: prepare scripts
--modules target--- Makefile:946: update target 'usr' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/nwfpe' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/vfp' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/kernel' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/mm' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/common' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/probes' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/net' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/crypto' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/firmware' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/mach-versatile' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/plat-versatile' due to: prepare scripts
--modules target--- Makefile:946: update target 'kernel' due to: prepare scripts
--modules target--- Makefile:946: update target 'certs' due to: prepare scripts
--modules target--- Makefile:946: update target 'mm' due to: prepare scripts
--modules target--- Makefile:946: update target 'fs' due to: prepare scripts
--modules target--- Makefile:946: update target 'block' due to: prepare scripts
--modules target--- Makefile:946: update target 'drivers' due to: prepare scripts
--modules target--- Makefile:946: update target 'sound' due to: prepare scripts
--modules target--- Makefile:946: update target 'firmware' due to: prepare scripts
--modules target--- Makefile:946: update target 'net' due to: prepare scripts
--modules target--- Makefile:946: update target 'arch/arm/lib' due to: prepare scripts
--modules target--- Makefile:946: update target 'lib' due to: prepare scripts
--modules target--- Makefile:946: update target 'virt' due to: prepare scripts
--modules target--- make -f ./scripts/Makefile.build obj=virt
--modules target---
--modules target---
--modules target--- //vmlinux-dirs := init usr arch/arm/nwfpe arch/arm/vfp arch/arm/kernel
--modules target--- arch/arm/mm arch/arm/common arch/arm/probes arch/arm/net
--modules target--- arch/arm/crypto arch/arm/firmware arch/arm/mach-versatile
--modules target--- arch/arm/plat-versatile kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt
--modules target---
--modules target--- modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
--modules target--- $(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
--modules target---
--modules target--- %/modules.builtin: include/config/auto.conf
--modules target--- $(Q)$(MAKE) $(modbuiltin)=$*
--modules target---
--modules target--- %/modules.builtin: include/config/auto.conf
--modules target--- $(Q)$(MAKE) $(modbuiltin)=$*
--modules target---
--modules target--- 这里接下来处理modules的关系里的modules.builtin。
--modules target--- 按照目录顺序处理moudles.builtin
--modules target---
--modules target--- Makefile:1114: update target 'init/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'usr/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/nwfpe/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/vfp/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/kernel/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/mm/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/common/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/probes/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/net/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/crypto/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/firmware/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/mach-versatile/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/plat-versatile/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'kernel/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'certs/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'mm/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'fs/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'ipc/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'security/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'crypto/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'block/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'drivers/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'sound/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'firmware/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'net/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'arch/arm/lib/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'lib/modules.builtin' due to: include/config/auto.conf
--modules target--- Makefile:1114: update target 'virt/modules.builtin' due to: include/config/auto.conf
--modules target---
--modules target--- 执行modules.builtin 的处理规则
--modules target--- Makefile:1111: update target 'modules.builtin' due to: init/modules.builtin usr/modules.builtin arch/arm/nwfpe/modules.builtin arch/arm/vfp/modules.builtin arch/arm/kernel/modules.builtin arch/arm/mm/modules.builtin arch/arm/common/modules.builtin arch/arm/probes/modules.builtin arch/arm/net/modules.builtin arch/arm/crypto/modules.builtin arch/arm/firmware/modules.builtin arch/arm/mach-versatile/modules.builtin arch/arm/plat-versatile/modules.builtin kernel/modules.builtin certs/modules.builtin mm/modules.builtin fs/modules.builtin ipc/modules.builtin security/modules.builtin crypto/modules.builtin block/modules.builtin drivers/modules.builtin sound/modules.builtin firmware/modules.builtin net/modules.builtin arch/arm/lib/modules.builtin lib/modules.builtin virt/modules.builtin
--modules target---
--modules target--- awk '!x[$0]++' init/modules.builtin usr/modules.builtin arch/arm/nwfpe/modules.builtin arch/arm/vfp/modules.builtin arch/arm/kernel/modules.builtin arch/arm/mm/modules.builtin arch/arm/common/modules.builtin arch/arm/probes/modules.builtin arch/arm/net/modules.builtin arch/arm/crypto/modules.builtin arch/arm/firmware/modules.builtin arch/arm/mach-versatile/modules.builtin arch/arm/plat-versatile/modules.builtin kernel/modules.builtin certs/modules.builtin mm/modules.builtin fs/modules.builtin ipc/modules.builtin security/modules.builtin crypto/modules.builtin block/modules.builtin drivers/modules.builtin sound/modules.builtin firmware/modules.builtin net/modules.builtin arch/arm/lib/modules.builtin lib/modules.builtin virt/modules.builtin > ./modules.builtin
--modules target--- 这里才开始真正处理modules里定义的规则
--modules target--- Makefile:1105: update target 'modules' due to: init usr arch/arm/nwfpe arch/arm/vfp arch/arm/kernel arch/arm/mm arch/arm/common arch/arm/probes arch/arm/net arch/arm/crypto arch/arm/firmware arch/arm/mach-versatile arch/arm/plat-versatile kernel certs mm fs ipc security crypto block drivers sound firmware net arch/arm/lib lib virt modules.builtin
--modules target--- modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
--modules target--- $(Q)$(AWK) '!x[$$0]++' $(vmlinux-only-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
--modules target--- @$(kecho) ' Building modules, stage 2.';
--modules target--- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
--modules target--- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
--modules target---
--modules target--- awk '!x[$0]++' ./init/modules.order ./usr/modules.order ./arch/arm/nwfpe/modules.order ./arch/arm/vfp/modules.order ./arch/arm/kernel/modules.order ./arch/arm/mm/modules.order ./arch/arm/common/modules.order ./arch/arm/probes/modules.order ./arch/arm/net/modules.order ./arch/arm/crypto/modules.order ./arch/arm/firmware/modules.order ./arch/arm/mach-versatile/modules.order ./arch/arm/plat-versatile/modules.order ./kernel/modules.order ./certs/modules.order ./mm/modules.order ./fs/modules.order ./ipc/modules.order ./security/modules.order ./crypto/modules.order ./block/modules.order ./drivers/modules.order ./sound/modules.order ./firmware/modules.order ./net/modules.order ./arch/arm/lib/modules.order ./lib/modules.order ./virt/modules.order > ./modules.order
--modules target--- : ' Building modules, stage 2.';
--modules target--- make -f ./scripts/Makefile.modpost
--modules target--- make -f ./scripts/Makefile.fwinst obj=firmware __fw_modbuild
--modules target---
--modules target--- make[1]: Leaving directory '/home/dx/uclinux/uClinux-dist/linux'
Makefile:234: update target 'subdirs' due to: linux modules
.PHONY: subdirs
subdirs: linux modules
for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir || exit 1 ; done
for dir in include lib include user ; do [ ! -d $dir ] || make ARCH=arm -C $dir || exit 1 ; done
--subdir-inlucde- 根据inlude 目录里的Makefile,处理符号链接
--subdir-inlucde- make[1]: Entering directory '/home/dx/uclinux/uClinux-dist/include'
--subdir-inlucde- Makefile:70: target 'link' does not exist
--subdir-inlucde- echo "Making symlinks in /home/dx/uclinux/uClinux-dist/staging/include"
--subdir-inlucde- Making symlinks in /home/dx/uclinux/uClinux-dist/staging/include
--subdir-inlucde- mkdir -p /home/dx/uclinux/uClinux-dist/staging/include
--subdir-inlucde- for p in /home/dx/uclinux/uClinux-dist/linux/usr/include/*,. /home/dx/uclinux/uClinux-dist/linux/include/linux/autoconf.h,linux /home/dx/uclinux/uClinux-dist/autoconf.h,vendor /home/dx/uclinux/uClinux-dist/config,. /home/dx/uclinux/uClinux-dist/modules/autoconf.h,modules /home/dx/uclinux/uClinux-dist/modules/ocf/cryptodev.h,crypto /home/dx/uclinux/uClinux-dist/user/gdb/include/ansidecl.h,. /home/dx/uclinux/uClinux-dist/user/gdb/include/symcat.h,.; do \
--subdir-inlucde- src=`expr "$p" : '\(.*\),.*'` ; \
--subdir-inlucde- dst=/home/dx/uclinux/uClinux-dist/staging/include/`expr "$p" : '.*,\(.*\)'` ; \
--subdir-inlucde- for i in $src; do \
--subdir-inlucde- [ ! -e "$i" ] && continue; \
--subdir-inlucde- [ "`basename $i`" = CVS ] && continue; \
--subdir-inlucde- [ -L "$dst/`basename $i`" ] && continue; \
--subdir-inlucde- [ -d $dst ] || mkdir $dst; \
--subdir-inlucde- ln -s $i $dst/.; \
--subdir-inlucde- done ; \
--subdir-inlucde- done
--subdir-inlucde- Makefile:86: target 'cpplink' does not exist
--subdir-inlucde- echo "Making include/c++ symlink to compiler c++ includes"
--subdir-inlucde- Making include/c++ symlink to compiler c++ includes
--subdir-inlucde- rm -f /home/dx/uclinux/uClinux-dist/staging/include/c++
--subdir-inlucde- ln -s /usr/local/include/g++-v3 /home/dx/uclinux/uClinux-dist/staging/include/c++
--subdir-inlucde- GCCVER=`ucfront-gcc arm-uclinuxeabi-gcc -dumpversion` ; \
--subdir-inlucde- for i in `ucfront-g++ arm-uclinuxeabi-g++ -v -E -xc++ /dev/null 2>&1 | sed -e '/^Reading specs/,/^#include <\.\.\.>/d' -e '/End of search list/Q'`; do \
--subdir-inlucde- if [ -f $i/new ]; then rm -f /home/dx/uclinux/uClinux-dist/staging/include/c++; ln -s $i /home/dx/uclinux/uClinux-dist/staging/include/c++; break; fi; \
--subdir-inlucde- if [ -f $i/c++/$GCCVER/new ]; then rm -f /home/dx/uclinux/uClinux-dist/staging/include/c++; ln -s $i/c++/$GCCVER /home/dx/uclinux/uClinux-dist/staging/include/c++; break; fi; \
--subdir-inlucde- done
--subdir-inlucde- rm -f /home/dx/uclinux/uClinux-dist/staging/include/bits ; \
--subdir-inlucde- GCCVER=`ucfront-gcc arm-uclinuxeabi-gcc -dumpversion` ; \
--subdir-inlucde- GCCMACH=`ucfront-gcc arm-uclinuxeabi-gcc -dumpmachine` ; \
--subdir-inlucde- GCCMULTI=`ucfront-gcc arm-uclinuxeabi-gcc -print-multi-directory` ; \
--subdir-inlucde- GCCPATH=`ucfront-gcc arm-uclinuxeabi-gcc -print-libgcc-file-name | sed -e 's?/lib/gcc/.*$??g'` ; \
--subdir-inlucde- GPLUSBITS="$GCCPATH/$GCCMACH/include/c++/$GCCVER/$GCCMACH/$GCCMULTI/bits $GCCPATH/include/c++/$GCCVER/$GCCMACH/$GCCMULTI/bits"; \
--subdir-inlucde- echo "Checking for modern c++ bits..."; \
--subdir-inlucde- for i in $GPLUSBITS; do \
--subdir-inlucde- if [ -d $i ] ; then \
--subdir-inlucde- echo "Using modern c++ bits, $i" ; \
--subdir-inlucde- ln -s $i /home/dx/uclinux/uClinux-dist/staging/include/bits ; \
--subdir-inlucde- break; \
--subdir-inlucde- fi; \
--subdir-inlucde- done
--subdir-inlucde- Checking for modern c++ bits...
--subdir-inlucde- Using modern c++ bits, /home/dx/tools/dx/usr/local/bin/../arm-uclinuxeabi/include/c++/5.4.0/arm-uclinuxeabi/./bits
--subdir-inlucde- make[1]: Leaving directory '/home/dx/uclinux/uClinux-dist/include'
处理lib目录,根据lib 目录里的MAKEFILE