aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile79
1 files changed, 79 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5e8b154
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,79 @@
+#
+# Makefile - build a kernel+filesystem image for stand-alone Linux booting
+#
+# Copyright (C) 2012 ARM Limited. All rights reserved.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE.txt file.
+
+# VE
+PHYS_OFFSET := 0x80000000
+UART_BASE := 0x1c090000
+GIC_DIST_BASE := 0x2c001000
+GIC_CPU_BASE := 0x2c002000
+CNTFRQ := 0x01800000 # 24Mhz
+
+#INITRD_FLAGS := -DUSE_INITRD
+CPPFLAGS += $(INITRD_FLAGS)
+
+BOOTLOADER := boot.S
+MBOX_OFFSET := 0xfff8
+KERNEL := Image
+KERNEL_OFFSET := 0x80000
+LD_SCRIPT := model.lds.S
+IMAGE := linux-system.axf
+
+FILESYSTEM := filesystem.cpio.gz
+FS_OFFSET := 0x10000000
+FILESYSTEM_START:= $(shell echo $$(($(PHYS_OFFSET) + $(FS_OFFSET))))
+FILESYSTEM_SIZE := $(shell stat -Lc %s $(FILESYSTEM) 2>/dev/null || echo 0)
+FILESYSTEM_END := $(shell echo $$(($(FILESYSTEM_START) + $(FILESYSTEM_SIZE))))
+
+FDT_SRC := vexpress-v2p-aarch64.dts
+FDT_INCL_REGEX := \(/include/[[:space:]]*"\)\([^"]\+\)\(".*\)
+FDT_DEPS := $(FDT_SRC) $(addprefix $(dir $(FDT_SRC)), $(shell sed -ne 'sq$(strip $(FDT_INCL_REGEX)q\2q p' < $(FDT_SRC))))
+FDT_OFFSET := 0x08000000
+
+ifneq (,$(findstring USE_INITRD,$(CPPFLAGS)))
+BOOTARGS := "console=ttyAMA0 $(BOOTARGS_EXTRA)"
+CHOSEN_NODE := chosen { \
+ bootargs = $(BOOTARGS); \
+ linux,initrd-start = <$(FILESYSTEM_START)>; \
+ linux,initrd-end = <$(FILESYSTEM_END)>; \
+ };
+else
+BOOTARGS := "console=ttyAMA0 root=/dev/nfs nfsroot=10.1.69.68:/work/debootstrap/aarch64,tcp rw ip=dhcp $(BOOTARGS_EXTRA)"
+CHOSEN_NODE := chosen { \
+ bootargs = $(BOOTARGS); \
+ };
+endif
+
+CROSS_COMPILE := aarch64-none-linux-gnu-
+CC := $(CROSS_COMPILE)gcc
+LD := $(CROSS_COMPILE)ld
+DTC := $(if $(wildcard ./dtc), ./dtc, $(shell which dtc))
+
+all: $(IMAGE)
+
+clean:
+ rm -f $(IMAGE) boot.o model.lds fdt.dtb
+
+$(IMAGE): boot.o model.lds fdt.dtb $(KERNEL) $(FILESYSTEM)
+ $(LD) -o $@ --script=model.lds
+
+boot.o: $(BOOTLOADER) Makefile
+ $(CC) $(CPPFLAGS) -DCNTFRQ=$(CNTFRQ) -DUART_BASE=$(UART_BASE) -DSYS_FLAGS=$(SYS_FLAGS) -DGIC_DIST_BASE=$(GIC_DIST_BASE) -DGIC_CPU_BASE=$(GIC_CPU_BASE) -c -o $@ $(BOOTLOADER)
+
+model.lds: $(LD_SCRIPT) Makefile
+ $(CC) $(CPPFLAGS) -DPHYS_OFFSET=$(PHYS_OFFSET) -DMBOX_OFFSET=$(MBOX_OFFSET) -DKERNEL_OFFSET=$(KERNEL_OFFSET) -DFDT_OFFSET=$(FDT_OFFSET) -DFS_OFFSET=$(FS_OFFSET) -DKERNEL=$(KERNEL) -DFILESYSTEM=$(FILESYSTEM) -E -P -C -o $@ $<
+
+ifeq ($(DTC),)
+ $(error No dtc found! You can git clone from git://git.jdl.com/software/dtc.git)
+endif
+
+fdt.dtb: $(FDT_DEPS) Makefile
+ @sed -e 's%/\* chosen \*/%$(CHOSEN_NODE)%' -e 's%$(strip $(FDT_INCL_REGEX))%\1$(dir $(FDT_SRC))\2\3%' $< | \
+ $(DTC) -O dtb -o $@ -
+
+# The filesystem archive might not exist if INITRD is not being used
+.PHONY: all clean $(FILESYSTEM)