kbuild: doc: replace arch/$(ARCH)/ with arch/$(SRCARCH)/
Precisely speaking, the arch directory is specified by $(SRCARCH),
not $(ARCH).
In old days, $(ARCH) actually matched to the arch directory because
32-bit and 64-bit were supported as separate architectures.
Most architectures (except arm/arm64) were unified like follows:
arch/i386, arch/x86_64 -> arch/x86
arch/sh, arch/sh64 -> arch/sh
arch/sparc, arch/sparc64 -> arch/sparc
To not break the user interface, commit 6752ed90da
("Kbuild: allow
arch/xxx to use a different source path") introduced SRCARCH to point
to the arch directory, still allowing to pass in the former ARCH=i386
or ARCH=x86_64.
Update the documents for preciseness, and add the explanation of SRCARCH.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
This commit is contained in:
parent
b044a535d9
commit
8c4d9b145b
|
@ -67,11 +67,11 @@ This document describes the Linux kernel Makefiles.
|
||||||
|
|
||||||
The Makefiles have five parts::
|
The Makefiles have five parts::
|
||||||
|
|
||||||
Makefile the top Makefile.
|
Makefile the top Makefile.
|
||||||
.config the kernel configuration file.
|
.config the kernel configuration file.
|
||||||
arch/$(ARCH)/Makefile the arch Makefile.
|
arch/$(SRCARCH)/Makefile the arch Makefile.
|
||||||
scripts/Makefile.* common rules etc. for all kbuild Makefiles.
|
scripts/Makefile.* common rules etc. for all kbuild Makefiles.
|
||||||
kbuild Makefiles exist in every subdirectory
|
kbuild Makefiles exist in every subdirectory
|
||||||
|
|
||||||
The top Makefile reads the .config file, which comes from the kernel
|
The top Makefile reads the .config file, which comes from the kernel
|
||||||
configuration process.
|
configuration process.
|
||||||
|
@ -82,7 +82,7 @@ It builds these goals by recursively descending into the subdirectories of
|
||||||
the kernel source tree.
|
the kernel source tree.
|
||||||
The list of subdirectories which are visited depends upon the kernel
|
The list of subdirectories which are visited depends upon the kernel
|
||||||
configuration. The top Makefile textually includes an arch Makefile
|
configuration. The top Makefile textually includes an arch Makefile
|
||||||
with the name arch/$(ARCH)/Makefile. The arch Makefile supplies
|
with the name arch/$(SRCARCH)/Makefile. The arch Makefile supplies
|
||||||
architecture-specific information to the top Makefile.
|
architecture-specific information to the top Makefile.
|
||||||
|
|
||||||
Each subdirectory has a kbuild Makefile which carries out the commands
|
Each subdirectory has a kbuild Makefile which carries out the commands
|
||||||
|
@ -933,7 +933,7 @@ When "make clean" is executed, make will descend down in arch/x86/boot,
|
||||||
and clean as usual. The Makefile located in arch/x86/boot/ may use
|
and clean as usual. The Makefile located in arch/x86/boot/ may use
|
||||||
the subdir- trick to descend further down.
|
the subdir- trick to descend further down.
|
||||||
|
|
||||||
Note 1: arch/$(ARCH)/Makefile cannot use "subdir-", because that file is
|
Note 1: arch/$(SRCARCH)/Makefile cannot use "subdir-", because that file is
|
||||||
included in the top level makefile, and the kbuild infrastructure
|
included in the top level makefile, and the kbuild infrastructure
|
||||||
is not operational at that point.
|
is not operational at that point.
|
||||||
|
|
||||||
|
@ -946,9 +946,9 @@ be visited during "make clean".
|
||||||
The top level Makefile sets up the environment and does the preparation,
|
The top level Makefile sets up the environment and does the preparation,
|
||||||
before starting to descend down in the individual directories.
|
before starting to descend down in the individual directories.
|
||||||
The top level makefile contains the generic part, whereas
|
The top level makefile contains the generic part, whereas
|
||||||
arch/$(ARCH)/Makefile contains what is required to set up kbuild
|
arch/$(SRCARCH)/Makefile contains what is required to set up kbuild
|
||||||
for said architecture.
|
for said architecture.
|
||||||
To do so, arch/$(ARCH)/Makefile sets up a number of variables and defines
|
To do so, arch/$(SRCARCH)/Makefile sets up a number of variables and defines
|
||||||
a few targets.
|
a few targets.
|
||||||
|
|
||||||
When kbuild executes, the following steps are followed (roughly):
|
When kbuild executes, the following steps are followed (roughly):
|
||||||
|
@ -956,14 +956,14 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
1) Configuration of the kernel => produce .config
|
1) Configuration of the kernel => produce .config
|
||||||
2) Store kernel version in include/linux/version.h
|
2) Store kernel version in include/linux/version.h
|
||||||
3) Updating all other prerequisites to the target prepare:
|
3) Updating all other prerequisites to the target prepare:
|
||||||
- Additional prerequisites are specified in arch/$(ARCH)/Makefile
|
- Additional prerequisites are specified in arch/$(SRCARCH)/Makefile
|
||||||
4) Recursively descend down in all directories listed in
|
4) Recursively descend down in all directories listed in
|
||||||
init-* core* drivers-* net-* libs-* and build all targets.
|
init-* core* drivers-* net-* libs-* and build all targets.
|
||||||
- The values of the above variables are expanded in arch/$(ARCH)/Makefile.
|
- The values of the above variables are expanded in arch/$(SRCARCH)/Makefile.
|
||||||
5) All object files are then linked and the resulting file vmlinux is
|
5) All object files are then linked and the resulting file vmlinux is
|
||||||
located at the root of the obj tree.
|
located at the root of the obj tree.
|
||||||
The very first objects linked are listed in head-y, assigned by
|
The very first objects linked are listed in head-y, assigned by
|
||||||
arch/$(ARCH)/Makefile.
|
arch/$(SRCARCH)/Makefile.
|
||||||
6) Finally, the architecture-specific part does any required post processing
|
6) Finally, the architecture-specific part does any required post processing
|
||||||
and builds the final bootimage.
|
and builds the final bootimage.
|
||||||
- This includes building boot records
|
- This includes building boot records
|
||||||
|
@ -1169,7 +1169,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
$(core-y), $(libs-y), $(drivers-y) and $(net-y).
|
$(core-y), $(libs-y), $(drivers-y) and $(net-y).
|
||||||
|
|
||||||
The top level Makefile defines values for all generic directories,
|
The top level Makefile defines values for all generic directories,
|
||||||
and arch/$(ARCH)/Makefile only adds architecture-specific
|
and arch/$(SRCARCH)/Makefile only adds architecture-specific
|
||||||
directories.
|
directories.
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
@ -1189,15 +1189,15 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
The actual goals are not standardized across architectures.
|
The actual goals are not standardized across architectures.
|
||||||
|
|
||||||
It is common to locate any additional processing in a boot/
|
It is common to locate any additional processing in a boot/
|
||||||
directory below arch/$(ARCH)/.
|
directory below arch/$(SRCARCH)/.
|
||||||
|
|
||||||
Kbuild does not provide any smart way to support building a
|
Kbuild does not provide any smart way to support building a
|
||||||
target specified in boot/. Therefore arch/$(ARCH)/Makefile shall
|
target specified in boot/. Therefore arch/$(SRCARCH)/Makefile shall
|
||||||
call make manually to build a target in boot/.
|
call make manually to build a target in boot/.
|
||||||
|
|
||||||
The recommended approach is to include shortcuts in
|
The recommended approach is to include shortcuts in
|
||||||
arch/$(ARCH)/Makefile, and use the full path when calling down
|
arch/$(SRCARCH)/Makefile, and use the full path when calling down
|
||||||
into the arch/$(ARCH)/boot/Makefile.
|
into the arch/$(SRCARCH)/boot/Makefile.
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
|
@ -1217,7 +1217,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
|
|
||||||
#arch/x86/Makefile
|
#arch/x86/Makefile
|
||||||
define archhelp
|
define archhelp
|
||||||
echo '* bzImage - Image (arch/$(ARCH)/boot/bzImage)'
|
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
When make is executed without arguments, the first goal encountered
|
When make is executed without arguments, the first goal encountered
|
||||||
|
@ -1332,7 +1332,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
|
|
||||||
objcopy
|
objcopy
|
||||||
Copy binary. Uses OBJCOPYFLAGS usually specified in
|
Copy binary. Uses OBJCOPYFLAGS usually specified in
|
||||||
arch/$(ARCH)/Makefile.
|
arch/$(SRCARCH)/Makefile.
|
||||||
OBJCOPYFLAGS_$@ may be used to set additional options.
|
OBJCOPYFLAGS_$@ may be used to set additional options.
|
||||||
|
|
||||||
gzip
|
gzip
|
||||||
|
@ -1395,7 +1395,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
When the vmlinux image is built, the linker script
|
When the vmlinux image is built, the linker script
|
||||||
arch/$(ARCH)/kernel/vmlinux.lds is used.
|
arch/$(SRCARCH)/kernel/vmlinux.lds is used.
|
||||||
The script is a preprocessed variant of the file vmlinux.lds.S
|
The script is a preprocessed variant of the file vmlinux.lds.S
|
||||||
located in the same directory.
|
located in the same directory.
|
||||||
kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.
|
kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.
|
||||||
|
@ -1405,9 +1405,6 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
#arch/x86/kernel/Makefile
|
#arch/x86/kernel/Makefile
|
||||||
extra-y := vmlinux.lds
|
extra-y := vmlinux.lds
|
||||||
|
|
||||||
#Makefile
|
|
||||||
export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
|
|
||||||
|
|
||||||
The assignment to extra-y is used to tell kbuild to build the
|
The assignment to extra-y is used to tell kbuild to build the
|
||||||
target vmlinux.lds.
|
target vmlinux.lds.
|
||||||
The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
|
The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
|
||||||
|
@ -1481,7 +1478,7 @@ See subsequent chapter for the syntax of the Kbuild file.
|
||||||
|
|
||||||
If an architecture uses a verbatim copy of a header from
|
If an architecture uses a verbatim copy of a header from
|
||||||
include/asm-generic then this is listed in the file
|
include/asm-generic then this is listed in the file
|
||||||
arch/$(ARCH)/include/asm/Kbuild like this:
|
arch/$(SRCARCH)/include/asm/Kbuild like this:
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
|
@ -1492,7 +1489,7 @@ See subsequent chapter for the syntax of the Kbuild file.
|
||||||
During the prepare phase of the build a wrapper include
|
During the prepare phase of the build a wrapper include
|
||||||
file is generated in the directory::
|
file is generated in the directory::
|
||||||
|
|
||||||
arch/$(ARCH)/include/generated/asm
|
arch/$(SRCARCH)/include/generated/asm
|
||||||
|
|
||||||
When a header is exported where the architecture uses
|
When a header is exported where the architecture uses
|
||||||
the generic header a similar wrapper is generated as part
|
the generic header a similar wrapper is generated as part
|
||||||
|
@ -1527,8 +1524,8 @@ See subsequent chapter for the syntax of the Kbuild file.
|
||||||
to define the minimum set of ASM headers that all architectures must have.
|
to define the minimum set of ASM headers that all architectures must have.
|
||||||
|
|
||||||
This works like optional generic-y. If a mandatory header is missing
|
This works like optional generic-y. If a mandatory header is missing
|
||||||
in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate
|
in arch/$(SRCARCH)/include/(uapi/)/asm, Kbuild will automatically
|
||||||
a wrapper of the asm-generic one.
|
generate a wrapper of the asm-generic one.
|
||||||
|
|
||||||
9 Kbuild Variables
|
9 Kbuild Variables
|
||||||
==================
|
==================
|
||||||
|
@ -1564,6 +1561,16 @@ The top Makefile exports the following variables:
|
||||||
|
|
||||||
make ARCH=m68k ...
|
make ARCH=m68k ...
|
||||||
|
|
||||||
|
SRCARCH
|
||||||
|
This variable specifies the directory in arch/ to build.
|
||||||
|
|
||||||
|
ARCH and SRCARCH may not necessarily match. A couple of arch
|
||||||
|
directories are biarch, that is, a single `arch/*/` directory supports
|
||||||
|
both 32-bit and 64-bit.
|
||||||
|
|
||||||
|
For example, you can pass in ARCH=i386, ARCH=x86_64, or ARCH=x86.
|
||||||
|
For all of them, SRCARCH=x86 because arch/x86/ supports both i386 and
|
||||||
|
x86_64.
|
||||||
|
|
||||||
INSTALL_PATH
|
INSTALL_PATH
|
||||||
This variable defines a place for the arch Makefiles to install
|
This variable defines a place for the arch Makefiles to install
|
||||||
|
|
|
@ -332,7 +332,7 @@ according to the following rule:
|
||||||
There are two notable exceptions to this rule: larger
|
There are two notable exceptions to this rule: larger
|
||||||
subsystems have their own directory under include/, such as
|
subsystems have their own directory under include/, such as
|
||||||
include/scsi; and architecture specific headers are located
|
include/scsi; and architecture specific headers are located
|
||||||
under arch/$(ARCH)/include/.
|
under arch/$(SRCARCH)/include/.
|
||||||
|
|
||||||
4.1 Kernel Includes
|
4.1 Kernel Includes
|
||||||
-------------------
|
-------------------
|
||||||
|
|
Loading…
Reference in New Issue