
1: VERSION = 2 2: PATCHLEVEL = 6 3: SUBLEVEL = 23 4: EXTRAVERSION = 5: NAME = Arr Matey! A Hairy Bilge Rat! 6: 7: # *DOCUMENTATION* 8: # To see a list of typical targets execute "make help" 9: # More info can be located in ./README 10: # Comments in this file are targeted only to the developer, do not 11: # expect to learn how to build the kernel reading this file. 12: 13: # Do not: 14: # o use make's built-in rules and variables 15: # (this increases performance and avoid hard-to-debug behavour); 16: # o print "Entering directory ..."; 17: MAKEFLAGS += -rR --no-print-directory 18: 19: # We are using a recursive build, so we need to do a little thinking 20: # to get the ordering right. 21: # 22: # Most importantly: sub-Makefiles should only ever modify files in 23: # their own directory. If in some directory we have a dependency on 24: # a file in another dir (which doesn't happen often, but it's often 25: # unavoidable when linking the built-in.o targets which finally 26: # turn into vmlinux), we will call a sub make in that other dir, and 27: # after that we are sure that everything which is in that other dir 28: # is now up to date. 29: # 30: # The only cases where we need to modify files which have global 31: # effects are thus separated out and done before the recursive 32: # descending is started. They are now explicitly listed as the 33: # prepare rule. 34: 35: # To put more focus on warnings, be less verbose as default 36: # Use 'make V=1' to see the full commands 37: 38: ifdef V 39: ifeq ("$(origin V)", "command line") 40: KBUILD_VERBOSE = $(V) 41: endif 42: endif 43: ifndef KBUILD_VERBOSE 44: KBUILD_VERBOSE = 0 45: endif 46: 47: # Call a source code checker (by default, "sparse") as part of the 48: # C compilation. 49: # 50: # Use 'make C=1' to enable checking of only re-compiled files. 51: # Use 'make C=2' to enable checking of *all* source files, regardless 52: # of whether they are re-compiled or not. 53: # 54: # See the file "Documentation/sparse.txt" for more details, including 55: # where to get the "sparse" utility. 56: 57: ifdef C 58: ifeq ("$(origin C)", "command line") 59: KBUILD_CHECKSRC = $(C) 60: endif 61: endif 62: ifndef KBUILD_CHECKSRC 63: KBUILD_CHECKSRC = 0 64: endif 65: 66: # Use make M=dir to specify directory of external module to build 67: # Old syntax make ... SUBDIRS=$PWD is still supported 68: # Setting the environment variable KBUILD_EXTMOD take precedence 69: ifdef SUBDIRS 70: KBUILD_EXTMOD ?= $(SUBDIRS) 71: endif 72: ifdef M 73: ifeq ("$(origin M)", "command line") 74: KBUILD_EXTMOD := $(M) 75: endif 76: endif 77: 78: 79: # kbuild supports saving output files in a separate directory. 80: # To locate output files in a separate directory two syntaxes are supported. 81: # In both cases the working directory must be the root of the kernel src. 82: # 1) O= 83: # Use "make O=dir/to/store/output/files/" 84: # 85: # 2) Set KBUILD_OUTPUT 86: # Set the environment variable KBUILD_OUTPUT to point to the directory 87: # where the output files shall be placed. 88: # export KBUILD_OUTPUT=dir/to/store/output/files/ 89: # make 90: # 91: # The O= assignment takes precedence over the KBUILD_OUTPUT environment 92: # variable. 93: 94: 95: # KBUILD_SRC is set on invocation of make in OBJ directory 96: # KBUILD_SRC is not intended to be used by the regular user (for now) 97: ifeq ($(KBUILD_SRC),) 98: 99: # OK, Make called in directory where kernel src resides 100: # Do we want to locate output files in a separate directory? 101: ifdef O 102: ifeq ("$(origin O)", "command line") 103: KBUILD_OUTPUT := $(O) 104: endif 105: endif 106: 107: # That's our default target when none is given on the command line 108: PHONY := _all 109: _all: 110: 111: ifneq ($(KBUILD_OUTPUT),) 112: # Invoke a second make in the output directory, passing relevant variables 113: # check that the output directory actually exists 114: saved-output := $(KBUILD_OUTPUT) 115: KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) 116: $(if $(KBUILD_OUTPUT),, \ 117: $(error output directory "$(saved-output)" does not exist)) 118: 119: PHONY += $(MAKECMDGOALS) 120: 121: $(filter-out _all,$(MAKECMDGOALS)) _all: 122: $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ 123: KBUILD_SRC=$(CURDIR) \ 124: KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@ 125: 126: # Leave processing to above invocation of make 127: skip-makefile := 1 128: endif # ifneq ($(KBUILD_OUTPUT),) 129: endif # ifeq ($(KBUILD_SRC),) 130: 131: # We process the rest of the Makefile if this is the final invocation of make 132: ifeq ($(skip-makefile),) 133: 134: # If building an external module we do not care about the all: rule 135: # but instead _all depend on modules 136: PHONY += all 137: ifeq ($(KBUILD_EXTMOD),) 138: _all: all 139: else 140: _all: modules 141: endif 142: 143: srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) 144: TOPDIR := $(srctree) 145: # FIXME - TOPDIR is obsolete, use srctree/objtree 146: objtree := $(CURDIR) 147: src := $(srctree) 148: obj := $(objtree) 149: 150: VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) 151: 152: export srctree objtree VPATH TOPDIR 153: 154: 155: # SUBARCH tells the usermode build what the underlying arch is. That is set 156: # first, and if a usermode build is happening, the "ARCH=um" on the command 157: # line overrides the setting of ARCH below. If a native build is happening, 158: # then ARCH is assigned, getting whatever value it gets normally, and 159: # SUBARCH is subsequently ignored. 160: 161: SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ 162: -e s/arm.*/arm/ -e s/sa110/arm/ \ 163: -e s/s390x/s390/ -e s/parisc64/parisc/ \ 164: -e s/ppc.*/powerpc/ -e s/mips.*/mips/ ) 165: 166: # Cross compiling and selecting different set of gcc/bin-utils 167: # --------------------------------------------------------------------------- 168: # 169: # When performing cross compilation for other architectures ARCH shall be set 170: # to the target architecture. (See arch/* for the possibilities). 171: # ARCH can be set during invocation of make: 172: # make ARCH=ia64 173: # Another way is to have ARCH set in the environment. 174: # The default ARCH is the host where make is executed. 175: 176: # CROSS_COMPILE specify the prefix used for all executables used 177: # during compilation. Only gcc and related bin-utils executables 178: # are prefixed with $(CROSS_COMPILE). 179: # CROSS_COMPILE can be set on the command line 180: # make CROSS_COMPILE=ia64-linux- 181: # Alternatively CROSS_COMPILE can be set in the environment. 182: # Default value for CROSS_COMPILE is not to prefix executables 183: # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile 184: 185: ARCH ?= $(SUBARCH) 186: CROSS_COMPILE ?= 187: 188: # Architecture as present in compile.h 189: UTS_MACHINE := $(ARCH) 190: 191: KCONFIG_CONFIG ?= .config 192: 193: # SHELL used by kbuild 194: CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 195: else if [ -x /bin/bash ]; then echo /bin/bash; \ 196: else echo sh; fi ; fi) 197: 198: HOSTCC = gcc 199: HOSTCXX = g++ 200: HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer 201: HOSTCXXFLAGS = -O2 202: 203: # Decide whether to build built-in, modular, or both. 204: # Normally, just do built-in. 205: 206: KBUILD_MODULES := 207: KBUILD_BUILTIN := 1 208: 209: # If we have only "make modules", don't compile built-in objects. 210: # When we're building modules with modversions, we need to consider 211: # the built-in objects during the descend as well, in order to 212: # make sure the checksums are up to date before we record them. 213: 214: ifeq ($(MAKECMDGOALS),modules) 215: KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) 216: endif 217: 218: # If we have "make <whatever> modules", compile modules 219: # in addition to whatever we do anyway. 220: # Just "make" or "make all" shall build modules as well 221: 222: ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) 223: KBUILD_MODULES := 1 224: endif 225: 226: ifeq ($(MAKECMDGOALS),) 227: KBUILD_MODULES := 1 228: endif 229: 230: export KBUILD_MODULES KBUILD_BUILTIN 231: export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD 232: 233: # Beautify output 234: # --------------------------------------------------------------------------- 235: # 236: # Normally, we echo the whole command before executing it. By making 237: # that echo $($(quiet)$(cmd)), we now have the possibility to set 238: # $(quiet) to choose other forms of output instead, e.g. 239: # 240: # quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ 241: # cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< 242: # 243: # If $(quiet) is empty, the whole command will be printed. 244: # If it is set to "quiet_", only the short version will be printed. 245: # If it is set to "silent_", nothing will be printed at all, since 246: # the variable $(silent_cmd_cc_o_c) doesn't exist. 247: # 248: # A simple variant is to prefix commands with $(Q) - that's useful 249: # for commands that shall be hidden in non-verbose mode. 250: # 251: # $(Q)ln $@ :< 252: # 253: # If KBUILD_VERBOSE equals 0 then the above command will be hidden. 254: # If KBUILD_VERBOSE equals 1 then the above command is displayed. 255: 256: ifeq ($(KBUILD_VERBOSE),1) 257: quiet = 258: Q = 259: else 260: quiet=quiet_ 261: Q = @ 262: endif 263: 264: # If the user is running make -s (silent mode), suppress echoing of 265: # commands 266: 267: ifneq ($(findstring s,$(MAKEFLAGS)),) 268: quiet=silent_ 269: endif 270: 271: export quiet Q KBUILD_VERBOSE 272: 273: 274: # Look for make include files relative to root of kernel src 275: MAKEFLAGS += --include-dir=$(srctree) 276: 277: # We need some generic definitions. 278: include $(srctree)/scripts/Kbuild.include 279: 280: # Make variables (CC, etc...) 281: 282: AS = $(CROSS_COMPILE)as 283: LD = $(CROSS_COMPILE)ld 284: CC = $(CROSS_COMPILE)gcc 285: CPP = $(CC) -E 286: AR = $(CROSS_COMPILE)ar 287: NM = $(CROSS_COMPILE)nm 288: STRIP = $(CROSS_COMPILE)strip 289: OBJCOPY = $(CROSS_COMPILE)objcopy 290: OBJDUMP = $(CROSS_COMPILE)objdump 291: AWK = awk 292: GENKSYMS = scripts/genksyms/genksyms 293: DEPMOD = /sbin/depmod 294: KALLSYMS = scripts/kallsyms 295: PERL = perl 296: CHECK = sparse 297: 298: CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) 299: MODFLAGS = -DMODULE 300: CFLAGS_MODULE = $(MODFLAGS) 301: AFLAGS_MODULE = $(MODFLAGS) 302: LDFLAGS_MODULE = 303: CFLAGS_KERNEL = 304: AFLAGS_KERNEL = 305: 306: 307: # Use LINUXINCLUDE when you must reference the include/ directory. 308: # Needed to be compatible with the O= option 309: LINUXINCLUDE := -Iinclude \ 310: $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \ 311: -include include/linux/autoconf.h 312: 313: CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE) 314: 315: CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ 316: -fno-strict-aliasing -fno-common \ 317: -Werror-implicit-function-declaration 318: AFLAGS := -D__ASSEMBLY__ 319: 320: # Read KERNELRELEASE from include/config/kernel.release (if it exists) 321: KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) 322: KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 323: 324: export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION 325: export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC 326: export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE 327: export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS 328: 329: export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS 330: export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 331: export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE 332: 333: # When compiling out-of-tree modules, put MODVERDIR in the module 334: # tree rather than in the kernel tree. The kernel tree might 335: # even be read-only. 336: export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions 337: 338: # Files to ignore in find ... statements 339: 340: RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o 341: export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git 342: 343: # =========================================================================== 344: # Rules shared between *config targets and build targets 345: 346: # Basic helpers built in scripts/ 347: PHONY += scripts_basic 348: scripts_basic: 349: $(Q)$(MAKE) $(build)=scripts/basic 350: 351: # To avoid any implicit rule to kick in, define an empty command. 352: scripts/basic/%: scripts_basic ; 353: 354: PHONY += outputmakefile 355: # outputmakefile generates a Makefile in the output directory, if using a 356: # separate output directory. This allows convenient use of make in the 357: # output directory. 358: outputmakefile: 359: ifneq ($(KBUILD_SRC),) 360: $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ 361: $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) 362: endif 363: 364: # To make sure we do not include .config for any of the *config targets 365: # catch them early, and hand them over to scripts/kconfig/Makefile 366: # It is allowed to specify more targets when calling make, including 367: # mixing *config targets and build targets. 368: # For example 'make oldconfig all'. 369: # Detect when mixed targets is specified, and make a second invocation 370: # of make so .config is not included in this case either (for *config). 371: 372: no-dot-config-targets := clean mrproper distclean \ 373: cscope TAGS tags help %docs check% \ 374: include/linux/version.h headers_% \ 375: kernelrelease kernelversion 376: 377: config-targets := 0 378: mixed-targets := 0 379: dot-config := 1 380: 381: ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) 382: ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) 383: dot-config := 0 384: endif 385: endif 386: 387: ifeq ($(KBUILD_EXTMOD),) 388: ifneq ($(filter config %config,$(MAKECMDGOALS)),) 389: config-targets := 1 390: ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) 391: mixed-targets := 1 392: endif 393: endif 394: endif 395: 396: ifeq ($(mixed-targets),1) 397: # =========================================================================== 398: # We're called with mixed targets (*config and build targets). 399: # Handle them one by one. 400: 401: %:: FORCE 402: $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@ 403: 404: else 405: ifeq ($(config-targets),1) 406: # =========================================================================== 407: # *config targets only - make sure prerequisites are updated, and descend 408: # in scripts/kconfig to make the *config target 409: 410: # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. 411: # KBUILD_DEFCONFIG may point out an alternative default configuration 412: # used for 'make defconfig' 413: include $(srctree)/arch/$(ARCH)/Makefile 414: export KBUILD_DEFCONFIG 415: 416: config %config: scripts_basic outputmakefile FORCE 417: $(Q)mkdir -p include/linux include/config 418: $(Q)$(MAKE) $(build)=scripts/kconfig $@ 419: 420: else 421: # =========================================================================== 422: # Build targets only - this includes vmlinux, arch specific targets, clean 423: # targets and others. In general all targets except *config targets. 424: 425: ifeq ($(KBUILD_EXTMOD),) 426: # Additional helpers built in scripts/ 427: # Carefully list dependencies so we do not try to build scripts twice 428: # in parallel 429: PHONY += scripts 430: scripts: scripts_basic include/config/auto.conf 431: $(Q)$(MAKE) $(build)=$(@) 432: 433: # Objects we will link into vmlinux / subdirs we need to visit 434: init-y := init/ 435: drivers-y := drivers/ sound/ 436: net-y := net/ 437: libs-y := lib/ 438: core-y := usr/ 439: endif # KBUILD_EXTMOD 440: 441: ifeq ($(dot-config),1) 442: # Read in config 443: -include include/config/auto.conf 444: 445: ifeq ($(KBUILD_EXTMOD),) 446: # Read in dependencies to all Kconfig* files, make sure to run 447: # oldconfig if changes are detected. 448: -include include/config/auto.conf.cmd 449: 450: # To avoid any implicit rule to kick in, define an empty command 451: $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; 452: 453: # If .config is newer than include/config/auto.conf, someone tinkered 454: # with it and forgot to run make oldconfig. 455: # if auto.conf.cmd is missing then we are probably in a cleaned tree so 456: # we execute the config step to be sure to catch updated Kconfig files 457: include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd 458: $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig 459: else 460: # external modules needs include/linux/autoconf.h and include/config/auto.conf 461: # but do not care if they are up-to-date. Use auto.conf to trigger the test 462: PHONY += include/config/auto.conf 463: 464: include/config/auto.conf: 465: $(Q)test -e include/linux/autoconf.h -a -e $@ || ( \ 466: echo; \ 467: echo " ERROR: Kernel configuration is invalid."; \ 468: echo " include/linux/autoconf.h or $@ are missing."; \ 469: echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ 470: echo; \ 471: /bin/false) 472: 473: endif # KBUILD_EXTMOD 474: 475: else 476: # Dummy target needed, because used as prerequisite 477: include/config/auto.conf: ; 478: endif # $(dot-config) 479: 480: # The all: target is the default when no target is given on the 481: # command line. 482: # This allow a user to issue only 'make' to build a kernel including modules 483: # Defaults vmlinux but it is usually overridden in the arch makefile 484: all: vmlinux 485: 486: ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE 487: CFLAGS += -Os 488: else 489: CFLAGS += -O2 490: endif 491: 492: include $(srctree)/arch/$(ARCH)/Makefile 493: 494: ifdef CONFIG_FRAME_POINTER 495: CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls 496: else 497: CFLAGS += -fomit-frame-pointer 498: endif 499: 500: ifdef CONFIG_DEBUG_INFO 501: CFLAGS += -g 502: endif 503: 504: # Force gcc to behave correct even for buggy distributions 505: CFLAGS += $(call cc-option, -fno-stack-protector) 506: 507: # arch Makefile may override CC so keep this after arch Makefile is included 508: NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) 509: CHECKFLAGS += $(NOSTDINC_FLAGS) 510: 511: # warn about C99 declaration after statement 512: CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) 513: 514: # disable pointer signed / unsigned warnings in gcc 4.0 515: CFLAGS += $(call cc-option,-Wno-pointer-sign,) 516: 517: # Use --build-id when available. 518: LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ 519: $(call ld-option, -Wl$(comma)--build-id,)) 520: LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID) 521: LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID) 522: 523: # Default kernel image to build when no specific target is given. 524: # KBUILD_IMAGE may be overruled on the command line or 525: # set in the environment 526: # Also any assignments in arch/$(ARCH)/Makefile take precedence over 527: # this default value 528: export KBUILD_IMAGE ?= vmlinux 529: 530: # 531: # INSTALL_PATH specifies where to place the updated kernel and system map 532: # images. Default is /boot, but you can set it to other values 533: export INSTALL_PATH ?= /boot 534: 535: # 536: # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory 537: # relocations required by build roots. This is not defined in the 538: # makefile but the argument can be passed to make if needed. 539: # 540: 541: MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) 542: export MODLIB 543: 544: # 545: # INSTALL_MOD_STRIP, if defined, will cause modules to be 546: # stripped after they are installed. If INSTALL_MOD_STRIP is '1', then 547: # the default option --strip-debug will be used. Otherwise, 548: # INSTALL_MOD_STRIP will used as the options to the strip command. 549: 550: ifdef INSTALL_MOD_STRIP 551: ifeq ($(INSTALL_MOD_STRIP),1) 552: mod_strip_cmd = $(STRIP) --strip-debug 553: else 554: mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP) 555: endif # INSTALL_MOD_STRIP=1 556: else 557: mod_strip_cmd = true 558: endif # INSTALL_MOD_STRIP 559: export mod_strip_cmd 560: 561: 562: ifeq ($(KBUILD_EXTMOD),) 563: core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ 564: 565: vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ 566: $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ 567: $(net-y) $(net-m) $(libs-y) $(libs-m))) 568: 569: vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \ 570: $(init-n) $(init-) \ 571: $(core-n) $(core-) $(drivers-n) $(drivers-) \ 572: $(net-n) $(net-) $(libs-n) $(libs-)))) 573: 574: init-y := $(patsubst %/, %/built-in.o, $(init-y)) 575: core-y := $(patsubst %/, %/built-in.o, $(core-y)) 576: drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y)) 577: net-y := $(patsubst %/, %/built-in.o, $(net-y)) 578: libs-y1 := $(patsubst %/, %/lib.a, $(libs-y)) 579: libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y)) 580: libs-y := $(libs-y1) $(libs-y2) 581: 582: # Build vmlinux 583: # --------------------------------------------------------------------------- 584: # vmlinux is built from the objects selected by $(vmlinux-init) and 585: # $(vmlinux-main). Most are built-in.o files from top-level directories 586: # in the kernel tree, others are specified in arch/$(ARCH)/Makefile. 587: # Ordering when linking is important, and $(vmlinux-init) must be first. 588: # 589: # vmlinux 590: # ^ 591: # | 592: # +-< $(vmlinux-init) 593: # | +--< init/version.o + more 594: # | 595: # +--< $(vmlinux-main) 596: # | +--< driver/built-in.o mm/built-in.o + more 597: # | 598: # +-< kallsyms.o (see description in CONFIG_KALLSYMS section) 599: # 600: # vmlinux version (uname -v) cannot be updated during normal 601: # descending-into-subdirs phase since we do not yet know if we need to 602: # update vmlinux. 603: # Therefore this step is delayed until just before final link of vmlinux - 604: # except in the kallsyms case where it is done just before adding the 605: # symbols to the kernel. 606: # 607: # System.map is generated to document addresses of all kernel symbols 608: 609: vmlinux-init := $(head-y) $(init-y) 610: vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) 611: vmlinux-all := $(vmlinux-init) $(vmlinux-main) 612: vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds 613: export KBUILD_VMLINUX_OBJS := $(vmlinux-all) 614: 615: # Rule to link vmlinux - also used during CONFIG_KALLSYMS 616: # May be overridden by arch/$(ARCH)/Makefile 617: quiet_cmd_vmlinux__ ?= LD $@ 618: cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \ 619: -T $(vmlinux-lds) $(vmlinux-init) \ 620: --start-group $(vmlinux-main) --end-group \ 621: $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^) 622: 623: # Generate new vmlinux version 624: quiet_cmd_vmlinux_version = GEN .version 625: cmd_vmlinux_version = set -e; \ 626: if [ ! -r .version ]; then \ 627: rm -f .version; \ 628: echo 1 >.version; \ 629: else \ 630: mv .version .old_version; \ 631: expr 0$$(cat .old_version) + 1 >.version; \ 632: fi; \ 633: $(MAKE) $(build)=init 634: 635: # Generate System.map 636: quiet_cmd_sysmap = SYSMAP 637: cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap 638: 639: # Link of vmlinux 640: # If CONFIG_KALLSYMS is set .version is already updated 641: # Generate System.map and verify that the content is consistent 642: # Use + in front of the vmlinux_version rule to silent warning with make -j2 643: # First command is ':' to allow us to use + in front of the rule 644: define rule_vmlinux__ 645: : 646: $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version)) 647: 648: $(call cmd,vmlinux__) 649: $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd 650: 651: $(Q)$(if $($(quiet)cmd_sysmap), \ 652: echo ' $($(quiet)cmd_sysmap) System.map' &&) \ 653: $(cmd_sysmap) $@ System.map; \ 654: if [ $$? -ne 0 ]; then \ 655: rm -f $@; \ 656: /bin/false; \ 657: fi; 658: $(verify_kallsyms) 659: endef 660: 661: 662: ifdef CONFIG_KALLSYMS 663: # Generate section listing all symbols and add it into vmlinux $(kallsyms.o) 664: # It's a three stage process: 665: # o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is 666: # empty 667: # Running kallsyms on that gives us .tmp_kallsyms1.o with 668: # the right size - vmlinux version (uname -v) is updated during this step 669: # o .tmp_vmlinux2 now has a __kallsyms section of the right size, 670: # but due to the added section, some addresses have shifted. 671: # From here, we generate a correct .tmp_kallsyms2.o 672: # o The correct .tmp_kallsyms2.o is linked into the final vmlinux. 673: # o Verify that the System.map from vmlinux matches the map from 674: # .tmp_vmlinux2, just in case we did not generate kallsyms correctly. 675: # o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using 676: # .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a 677: # temporary bypass to allow the kernel to be built while the 678: # maintainers work out what went wrong with kallsyms. 679: 680: ifdef CONFIG_KALLSYMS_EXTRA_PASS 681: last_kallsyms := 3 682: else 683: last_kallsyms := 2 684: endif 685: 686: kallsyms.o := .tmp_kallsyms$(last_kallsyms).o 687: 688: define verify_kallsyms 689: $(Q)$(if $($(quiet)cmd_sysmap), \ 690: echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \ 691: $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map 692: $(Q)cmp -s System.map .tmp_System.map || \ 693: (echo Inconsistent kallsyms data; \ 694: echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \ 695: rm .tmp_kallsyms* ; /bin/false ) 696: endef 697: 698: # Update vmlinux version before link 699: # Use + in front of this rule to silent warning about make -j1 700: # First command is ':' to allow us to use + in front of this rule 701: cmd_ksym_ld = $(cmd_vmlinux__) 702: define rule_ksym_ld 703: : 704: +$(call cmd,vmlinux_version) 705: $(call cmd,vmlinux__) 706: $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd 707: endef 708: 709: # Generate .S file with all kernel symbols 710: quiet_cmd_kallsyms = KSYM $@ 711: cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \ 712: $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@ 713: 714: .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE 715: $(call if_changed_dep,as_o_S) 716: 717: .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS) 718: $(call cmd,kallsyms) 719: 720: # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version 721: .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE 722: $(call if_changed_rule,ksym_ld) 723: 724: .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE 725: $(call if_changed,vmlinux__) 726: 727: .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE 728: $(call if_changed,vmlinux__) 729: 730: # Needs to visit scripts/ before $(KALLSYMS) can be used. 731: $(KALLSYMS): scripts ; 732: 733: # Generate some data for debugging strange kallsyms problems 734: debug_kallsyms: .tmp_map$(last_kallsyms) 735: 736: .tmp_map%: .tmp_vmlinux% FORCE 737: ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@ 738: 739: .tmp_map3: .tmp_map2 740: 741: .tmp_map2: .tmp_map1 742: 743: endif # ifdef CONFIG_KALLSYMS 744: 745: # Do modpost on a prelinked vmlinux. The finally linked vmlinux has 746: # relevant sections renamed as per the linker script. 747: quiet_cmd_vmlinux-modpost = LD $@ 748: cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@ \ 749: $(vmlinux-init) --start-group $(vmlinux-main) --end-group \ 750: $(filter-out $(vmlinux-init) $(vmlinux-main) $(vmlinux-lds) FORCE ,$^) 751: define rule_vmlinux-modpost 752: : 753: +$(call cmd,vmlinux-modpost) 754: $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@ 755: $(Q)echo 'cmd_$@ := $(cmd_vmlinux-modpost)' > $(dot-target).cmd 756: endef 757: 758: # vmlinux image - including updated kernel symbols 759: vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) vmlinux.o FORCE 760: ifdef CONFIG_HEADERS_CHECK 761: $(Q)$(MAKE) -f $(srctree)/Makefile headers_check 762: endif 763: $(call vmlinux-modpost) 764: $(call if_changed_rule,vmlinux__) 765: $(Q)rm -f .old_version 766: 767: vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE 768: $(call if_changed_rule,vmlinux-modpost) 769: 770: # The actual objects are generated when descending, 771: # make sure no implicit rule kicks in 772: $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; 773: 774: # Handle descending into subdirectories listed in $(vmlinux-dirs) 775: # Preset locale variables to speed up the build process. Limit locale 776: # tweaks to this spot to avoid wrong language settings when running 777: # make menuconfig etc. 778: # Error messages still appears in the original language 779: 780: PHONY += $(vmlinux-dirs) 781: $(vmlinux-dirs): prepare scripts 782: $(Q)$(MAKE) $(build)=$@ 783: 784: # Build the kernel release string 785: # 786: # The KERNELRELEASE value built here is stored in the file 787: # include/config/kernel.release, and is used when executing several 788: # make targets, such as "make install" or "make modules_install." 789: # 790: # The eventual kernel release string consists of the following fields, 791: # shown in a hierarchical format to show how smaller parts are concatenated 792: # to form the larger and final value, with values coming from places like 793: # the Makefile, kernel config options, make command line options and/or 794: # SCM tag information. 795: # 796: # $(KERNELVERSION) 797: # $(VERSION) eg, 2 798: # $(PATCHLEVEL) eg, 6 799: # $(SUBLEVEL) eg, 18 800: # $(EXTRAVERSION) eg, -rc6 801: # $(localver-full) 802: # $(localver) 803: # localversion*