Skip to content

Commit

Permalink
arm64: Build infrastructure
Browse files Browse the repository at this point in the history
This patch adds Makefile and Kconfig files required for building an
AArch64 kernel.

Signed-off-by: Will Deacon <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
Acked-by: Tony Lindgren <[email protected]>
Acked-by: Nicolas Pitre <[email protected]>
Acked-by: Olof Johansson <[email protected]>
Acked-by: Santosh Shilimkar <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
  • Loading branch information
ctmarinas committed Sep 17, 2012
1 parent 10b663a commit 8c2c3df
Show file tree
Hide file tree
Showing 14 changed files with 654 additions and 3 deletions.
222 changes: 222 additions & 0 deletions arch/arm64/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
config ARM64
def_bool y
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
select GENERIC_CLOCKEVENTS
select GENERIC_HARDIRQS_NO_DEPRECATED
select GENERIC_IOMAP
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
select GENERIC_SMP_IDLE_THREAD
select GENERIC_TIME_VSYSCALL
select HARDIRQS_SW_RESEND
select HAVE_ARCH_TRACEHOOK
select HAVE_DMA_API_DEBUG
select HAVE_DMA_ATTRS
select HAVE_GENERIC_DMA_COHERENT
select HAVE_GENERIC_HARDIRQS
select HAVE_HW_BREAKPOINT if PERF_EVENTS
select HAVE_IRQ_WORK
select HAVE_MEMBLOCK
select HAVE_PERF_EVENTS
select HAVE_SPARSE_IRQ
select IRQ_DOMAIN
select NO_BOOTMEM
select OF
select OF_EARLY_FLATTREE
select PERF_USE_VMALLOC
select RTC_LIB
select SPARSE_IRQ
help
ARM 64-bit (AArch64) Linux support.

config 64BIT
def_bool y

config ARCH_PHYS_ADDR_T_64BIT
def_bool y

config MMU
def_bool y

config NO_IOPORT
def_bool y

config STACKTRACE_SUPPORT
def_bool y

config LOCKDEP_SUPPORT
def_bool y

config TRACE_IRQFLAGS_SUPPORT
def_bool y

config GENERIC_LOCKBREAK
def_bool y
depends on SMP && PREEMPT

config RWSEM_GENERIC_SPINLOCK
def_bool y

config GENERIC_HWEIGHT
def_bool y

config GENERIC_CSUM
def_bool y

config GENERIC_CALIBRATE_DELAY
def_bool y

config ZONE_DMA32
def_bool y

config ARCH_DMA_ADDR_T_64BIT
def_bool y

config NEED_DMA_MAP_STATE
def_bool y

config NEED_SG_DMA_LENGTH
def_bool y

config SWIOTLB
def_bool y

config IOMMU_HELPER
def_bool SWIOTLB

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "System Type"

endmenu

menu "Bus support"

config ARM_AMBA
bool

endmenu

menu "Kernel Features"

source "kernel/time/Kconfig"

config ARM64_64K_PAGES
bool "Enable 64KB pages support"
help
This feature enables 64KB pages support (4KB by default)
allowing only two levels of page tables and faster TLB
look-up. AArch32 emulation is not available when this feature
is enabled.

config SMP
bool "Symmetric Multi-Processing"
select USE_GENERIC_SMP_HELPERS
help
This enables support for systems with more than one CPU. If
you say N here, the kernel will run on single and
multiprocessor machines, but will use only one CPU of a
multiprocessor machine. If you say Y here, the kernel will run
on many, but not all, single processor machines. On a single
processor machine, the kernel will run faster if you say N
here.

If you don't know what to do here, say N.

config NR_CPUS
int "Maximum number of CPUs (2-32)"
range 2 32
depends on SMP
default "4"

source kernel/Kconfig.preempt

config HZ
int
default 100

config ARCH_HAS_HOLES_MEMORYMODEL
def_bool y if SPARSEMEM

config ARCH_SPARSEMEM_ENABLE
def_bool y
select SPARSEMEM_VMEMMAP_ENABLE

config ARCH_SPARSEMEM_DEFAULT
def_bool ARCH_SPARSEMEM_ENABLE

config ARCH_SELECT_MEMORY_MODEL
def_bool ARCH_SPARSEMEM_ENABLE

config HAVE_ARCH_PFN_VALID
def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM

config HW_PERF_EVENTS
bool "Enable hardware performance counter support for perf events"
depends on PERF_EVENTS
default y
help
Enable hardware performance counter support for perf events. If
disabled, perf events will use software events only.

source "mm/Kconfig"

endmenu

menu "Boot options"

config CMDLINE
string "Default kernel command string"
default ""
help
Provide a set of default command-line options at build time by
entering them here. As a minimum, you should specify the the
root device (e.g. root=/dev/nfs).

config CMDLINE_FORCE
bool "Always use the default kernel command string"
help
Always use the default kernel command string, even if the boot
loader passes other arguments to the kernel.
This is useful if you cannot or don't want to change the
command-line options your boot loader passes to the kernel.

endmenu

menu "Userspace binary formats"

source "fs/Kconfig.binfmt"

config COMPAT
bool "Kernel support for 32-bit EL0"
depends on !ARM64_64K_PAGES
select COMPAT_BINFMT_ELF
help
This option enables support for a 32-bit EL0 running under a 64-bit
kernel at EL1. AArch32-specific components such as system calls,
the user helper functions, VFP support and the ptrace interface are
handled appropriately by the kernel.

If you want to execute 32-bit userspace applications, say Y.

config SYSVIPC_COMPAT
def_bool y
depends on COMPAT && SYSVIPC

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/arm64/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
27 changes: 27 additions & 0 deletions arch/arm64/Kconfig.debug
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
menu "Kernel hacking"

source "lib/Kconfig.debug"

config FRAME_POINTER
bool
default y

config DEBUG_ERRORS
bool "Verbose kernel error messages"
depends on DEBUG_KERNEL
help
This option controls verbose debugging information which can be
printed when the kernel detects an internal error. This debugging
information is useful to kernel hackers when tracking down problems,
but mostly meaningless to other people. It's safe to say Y unless
you are concerned with the code size or don't want to see these
messages.

config DEBUG_STACK_USAGE
bool "Enable stack utilization instrumentation"
depends on DEBUG_KERNEL
help
Enables the display of the minimum amount of free stack which each
task has ever had available in the sysrq-T output.

endmenu
71 changes: 71 additions & 0 deletions arch/arm64/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#
# arch/arm64/Makefile
#
# This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies.
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
# Copyright (C) 1995-2001 by Russell King

LDFLAGS_vmlinux :=-p --no-undefined -X
CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
OBJCOPYFLAGS :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
GZFLAGS :=-9

LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)

KBUILD_DEFCONFIG := defconfig

KBUILD_CFLAGS += -mgeneral-regs-only
KBUILD_CPPFLAGS += -mlittle-endian
AS += -EL
LD += -EL

comma = ,

CHECKFLAGS += -D__aarch64__

# Default value
head-y := arch/arm64/kernel/head.o

# The byte offset of the kernel image in RAM from the start of RAM.
TEXT_OFFSET := 0x00080000

export TEXT_OFFSET GZFLAGS

core-y += arch/arm64/kernel/ arch/arm64/mm/
libs-y := arch/arm64/lib/ $(libs-y)
libs-y += $(LIBGCC)

# Default target when executing plain make
KBUILD_IMAGE := Image.gz

all: $(KBUILD_IMAGE)

boot := arch/arm64/boot

Image Image.gz: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

zinstall install: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@

%.dtb:
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

# We use MRPROPER_FILES and CLEAN_FILES now
archclean:
$(Q)$(MAKE) $(clean)=$(boot)

define archhelp
echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
echo ' install - Install uncompressed kernel'
echo ' zinstall - Install compressed kernel'
echo ' Install using (your) ~/bin/installkernel or'
echo ' (distribution) /sbin/installkernel or'
echo ' install to $$(INSTALL_PATH) and run lilo'
endef
2 changes: 2 additions & 0 deletions arch/arm64/boot/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Image
Image.gz
36 changes: 36 additions & 0 deletions arch/arm64/boot/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#
# arch/arm64/boot/Makefile
#
# This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies.
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
# Copyright (C) 2012, ARM Ltd.
# Author: Will Deacon <[email protected]>
#
# Based on the ia64 boot/Makefile.
#

targets := Image Image.gz

$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)

$(obj)/Image.gz: $(obj)/Image FORCE
$(call if_changed,gzip)

$(obj)/%.dtb: $(src)/dts/%.dts
$(call cmd,dtc)

install: $(obj)/Image
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
$(obj)/Image System.map "$(INSTALL_PATH)"

zinstall: $(obj)/Image.gz
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
$(obj)/Image.gz System.map "$(INSTALL_PATH)"

clean-files += *.dtb
Loading

0 comments on commit 8c2c3df

Please sign in to comment.