Skip to content

Commit

Permalink
Added support for arm64(aarch64) UEFI
Browse files Browse the repository at this point in the history
Signed-off-by: Pankaj Bansal <[email protected]>
Signed-off-by: Curt Brune <[email protected]>
  • Loading branch information
pankajbansal3073 authored and Curt Brune committed Nov 29, 2016
1 parent 44a1f46 commit 6c3b92f
Show file tree
Hide file tree
Showing 38 changed files with 270 additions and 122 deletions.
15 changes: 10 additions & 5 deletions build-config/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ PLATFORM = $(ARCH)-$(MACHINE_PREFIX)

ifeq ($(UBOOT_ENABLE),yes)
ROOTFS_ARCH = u-boot-arch
else ifeq ($(GRUB_ENABLE),yes)
ROOTFS_ARCH = grub-arch
else
ROOTFS_ARCH = $(ONIE_ARCH)
endif
Expand Down Expand Up @@ -289,12 +291,14 @@ endif
# Default mirror for packages needed by ONIE
ONIE_MIRROR ?= http://mirror.opencompute.org/onie

include make/crosstool-ng.make
include make/kernel-download.make
ifneq ($(XTOOLS_LIBC),glibc)
include make/uclibc-download.make
ifeq ($(XTOOLS_ENABLE),yes)
include make/crosstool-ng.make
ifneq ($(XTOOLS_LIBC),glibc)
include make/uclibc-download.make
endif
include make/xtools.make
endif
include make/xtools.make
include make/sysroot.make
include make/kernel.make
ifeq ($(UBOOT_ENABLE),yes)
Expand Down Expand Up @@ -426,7 +430,8 @@ DEBIAN_BUILD_HOST_PACKAGES = build-essential stgit u-boot-tools util-linux \
gperf device-tree-compiler python-all-dev xorriso \
autoconf automake bison flex texinfo libtool libtool-bin \
realpath gawk libncurses5 libncurses5-dev bc \
dosfstools mtools pkg-config
dosfstools mtools pkg-config git wget help2man libexpat1 \
libexpat1-dev fakeroot

PHONY += debian-prepare-build-host
debian-prepare-build-host:
Expand Down
2 changes: 2 additions & 0 deletions build-config/arch/armv7a.make
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
#
# Copyright (C) 2014,2015 Curt Brune <[email protected]>
# Copyright (C) 2016 david_yang <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
# ARM v7a Softfloat Architecture and Toolchain Setup
#

ARCH ?= arm
XTOOLS_ENABLE ?= yes
TARGET ?= $(ARCH)-onie-linux-uclibcgnueabi
CROSSPREFIX ?= $(TARGET)-
CROSSBIN ?= $(XTOOLS_INSTALL_DIR)/$(TARGET)/bin
Expand Down
100 changes: 100 additions & 0 deletions build-config/arch/armv8a.make
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# This file is derived from https://github.com/opencomputeproject/onie/blob/master/build-config/arch/armv7a/armv7a.make
#-------------------------------------------------------------------------------
#
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
# ARM v8 Softfloat Architecture and Toolchain Setup
#

ARCH ?= arm64
XTOOLS_ENABLE ?= yes
TARGET ?= aarch64-onie-linux-gnueabi
CROSSPREFIX ?= $(TARGET)-
CROSSBIN ?= $(XTOOLS_INSTALL_DIR)/$(TARGET)/bin

KERNEL_ARCH = arm64
KERNEL_DTB ?= $(MACHINE).dtb
KERNEL_DTB_PATH ?= $(KERNEL_DTB)
KERNEL_IMAGE_FILE = $(LINUX_BOOTDIR)/Image.gz
KERNEL_INSTALL_DEPS += $(KERNEL_VMLINUZ_INSTALL_STAMP)

#Toolchain Options
XTOOLS_LIBC ?= glibc
XTOOLS_LIBC_VERSION ?= 2.24

STRACE_ENABLE ?= yes

# Enable u-boot support by default. a machine make file can override this
UBOOT_ENABLE ?= yes
UBOOT_ITB_ARCH = $(KERNEL_ARCH)

# Disable Grub support by default. a machine make file can override this
GRUB_ENABLE ?= no
GRUB_IMAGE_NAME = grubaa64.efi

# Disable UEFI support by default. a machine make file can override this
UEFI_ENABLE ?= no
ifeq ($(UEFI_ENABLE),yes)
# Set the target firmware type. Possible values are "uefi"
FIRMWARE_TYPE = uefi
endif

PLATFORM_IMAGE_COMPLETE = $(IMAGE_UPDATER_STAMP) $(RECOVERY_ISO_STAMP)

PXE_EFI64_ENABLE ?= no

ifeq ($(PXE_EFI64_ENABLE),yes)
PLATFORM_IMAGE_COMPLETE += $(PXE_EFI64_STAMP)
endif

UPDATER_IMAGE_PARTS = $(UPDATER_VMLINUZ) $(UPDATER_INITRD) $(UPDATER_ONIE_TOOLS) \
$(ROOTCONFDIR)/grub-arch/sysroot-lib-onie/onie-blkdev-common $(UPDATER_IMAGE_PARTS_PLATFORM)
UPDATER_IMAGE_PARTS_COMPLETE = $(KERNEL_INSTALL_STAMP) $(UPDATER_INITRD) $(UPDATER_ONIE_TOOLS)

DEMO_IMAGE_PARTS = $(DEMO_KERNEL_VMLINUZ) $(DEMO_SYSROOT_CPIO_XZ)
DEMO_IMAGE_PARTS_COMPLETE = $(DEMO_KERNEL_COMPLETE_STAMP) $(DEMO_SYSROOT_CPIO_XZ)
DEMO_ARCH_BINS = $(DEMO_OS_BIN) $(DEMO_DIAG_BIN)

# Include MTD utilities
MTDUTILS_ENABLE ?= yes

# Default to GPT on ARM. A particular machine.make can override this.
PARTITION_TYPE ?= gpt

# Include the GPT partitioning tools
GPT_ENABLE = yes

# gptfdisk requires C++
REQUIRE_CXX_LIBS = yes

# Include the GNU parted partitioning tools
PARTED_ENABLE = yes

# Include ext3/4 file system tools
EXT3_4_ENABLE = yes

# Default to include the i2ctools. A particular machine.make can
# override this.
I2CTOOLS_ENABLE ?= yes

# Include lvm2 tools (needed for parted)
LVM2_ENABLE = yes

# Include ethtool by default
ETHTOOL_ENABLE ?= yes

# Include kexec-tools
KEXEC_ENABLE = yes

# Update this if the configuration mechanism changes from one release
# to the next.
ONIE_CONFIG_VERSION = 1

#-------------------------------------------------------------------------------
#
# Local Variables:
# mode: makefile-gmake
# End:

2 changes: 2 additions & 0 deletions build-config/arch/powerpc-softfloat.make
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
#
# Copyright (C) 2013,2014,2015 Curt Brune <[email protected]>
# Copyright (C) 2014,2016 david_yang <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
# PowerPC Softfloat Architecture and Toolchain Setup
#

ARCH ?= powerpc
XTOOLS_ENABLE ?= yes
TARGET ?= $(ARCH)-onie-linux-uclibc
CROSSPREFIX ?= $(TARGET)-
CROSSBIN ?= $(XTOOLS_INSTALL_DIR)/$(TARGET)/bin
Expand Down
5 changes: 4 additions & 1 deletion build-config/arch/x86_64.make
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
# Copyright (C) 2014,2015 Curt Brune <[email protected]>
# Copyright (C) 2014 david_yang <[email protected]>
# Copyright (C) 2014 Stephen Su <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
# x86 Architecture and Toolchain Setup
#

ARCH ?= x86_64
XTOOLS_ENABLE ?= yes
TARGET ?= $(ARCH)-onie-linux-uclibc
CROSSPREFIX ?= $(TARGET)-
CROSSBIN ?= $(XTOOLS_INSTALL_DIR)/$(TARGET)/bin
Expand Down Expand Up @@ -86,7 +88,7 @@ ifeq ($(PXE_EFI64_ENABLE),yes)
endif

UPDATER_IMAGE_PARTS = $(UPDATER_VMLINUZ) $(UPDATER_INITRD) $(UPDATER_ONIE_TOOLS) \
$(ROOTCONFDIR)/x86_64/sysroot-lib-onie/onie-blkdev-common $(UPDATER_IMAGE_PARTS_PLATFORM)
$(ROOTCONFDIR)/grub-arch/sysroot-lib-onie/onie-blkdev-common $(UPDATER_IMAGE_PARTS_PLATFORM)

UPDATER_IMAGE_PARTS_COMPLETE = $(KERNEL_INSTALL_STAMP) $(UPDATER_INITRD) $(UPDATER_ONIE_TOOLS)

Expand Down Expand Up @@ -118,6 +120,7 @@ BTRFS_PROGS_ENABLE = yes

# Include GRUB tools
GRUB_ENABLE = yes
GRUB_IMAGE_NAME = grubx64.efi

# Default to include the i2ctools. A particular machine.make can
# override this.
Expand Down
3 changes: 2 additions & 1 deletion build-config/make/demo.make
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#
# Copyright (C) 2013,2014,2015 Curt Brune <[email protected]>
# Copyright (C) 2015,2016 david_yang <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
Expand Down Expand Up @@ -105,7 +106,7 @@ DEMO_INSTALLER_FILES = $(shell test -d $(IMAGEDIR) && test -f $(DEMO_SYSROOT_CPI
endif

define demo_MKIMAGE
./scripts/onie-mk-demo.sh $(ONIE_ARCH) $(MACHINE) $(PLATFORM) \
./scripts/onie-mk-demo.sh $(ROOTFS_ARCH) $(MACHINE) $(PLATFORM) \
$(DEMO_INSTALLER_DIR) $(MACHINEDIR)/demo/platform.conf $(1) $(2) $(DEMO_IMAGE_PARTS)
endef

Expand Down
3 changes: 2 additions & 1 deletion build-config/make/firmware-update.make
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#-------------------------------------------------------------------------------
#
# Copyright (C) 2016 Curt Brune <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
Expand Down Expand Up @@ -68,7 +69,7 @@ $(FIRMWARE_UPDATE_COMPLETE_STAMP): $(IMAGE_UPDATER_SHARCH) $(MACHINE_FW_INSTALLE
$(Q) echo "onie_build_date=\"$$(date -Imin)\"" >> $(FIRMWARE_CONF)
$(Q) echo "==== Create firmware update $(PLATFORM) self-extracting archive ===="
$(Q) rm -f $(FIRMWARE_UPDATE_IMAGE)
$(Q) $(SCRIPTDIR)/onie-mk-installer.sh firmware $(ONIE_ARCH) $(MACHINEDIR) \
$(Q) $(SCRIPTDIR)/onie-mk-installer.sh firmware $(ROOTFS_ARCH) $(MACHINEDIR) \
$(FIRMWARE_CONF) $(INSTALLER_DIR) $(FIRMWARE_UPDATE_IMAGE)
$(Q) touch $@

Expand Down
58 changes: 29 additions & 29 deletions build-config/make/images.make
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
# Copyright (C) 2014 Stephen Su <[email protected]>
# Copyright (C) 2014 Puneet <[email protected]>
# Copyright (C) 2015 Carlos Cardenas <[email protected]>
# Copyright (C) 2016 Pankaj Bansal <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0
#
Expand Down Expand Up @@ -108,9 +109,9 @@ SYSROOT_NEW_FILES = $(shell \
find -L $(ROOTCONFDIR)/default -mindepth 1 -cnewer $(SYSROOT_COMPLETE_STAMP) \
-print -quit 2>/dev/null)
SYSROOT_NEW_FILES += $(shell \
test -d $(ROOTCONFDIR)/$(ONIE_ARCH) && \
test -d $(ROOTCONFDIR)/$(ROOTFS_ARCH) && \
test -f $(SYSROOT_INIT_STAMP) && \
find -L $(ROOTCONFDIR)/$(ONIE_ARCH) -mindepth 1 -cnewer $(SYSROOT_COMPLETE_STAMP) \
find -L $(ROOTCONFDIR)/$(ROOTFS_ARCH) -mindepth 1 -cnewer $(SYSROOT_COMPLETE_STAMP) \
-print -quit 2>/dev/null)
SYSROOT_NEW_FILES += $(shell \
test -d $(MACHINEDIR)/rootconf && \
Expand Down Expand Up @@ -205,16 +206,18 @@ $(SYSROOT_CHECK_STAMP): $(PACKAGES_INSTALL_STAMPS)
$(Q) find $(SYSROOTDIR) -path */lib/grub/* -prune -o \( -type f -print0 \) | xargs -0 file | \
grep ELF | awk -F':' '{ print $$1 }' | grep -v "/lib/modules/" | xargs $(CROSSBIN)/$(CROSSPREFIX)strip
$(Q) rm -rf $(CHECKROOT)
$(Q) mkdir -p $(CHECKROOT) && \
$(CROSSBIN)/$(CROSSPREFIX)populate -r $(DEV_SYSROOT) \
-s $(SYSROOTDIR) -d $(CHECKDIR) && \
(cd $(SYSROOTDIR) && find . | LC_ALL=C sort > $(SYSFILES)) && \
(cd $(CHECKDIR) && find . | LC_ALL=C sort > $(CHECKFILES)) && \
diff -q $(SYSFILES) $(CHECKFILES) > /dev/null 2>&1 || { \
(echo "ERROR: Missing files in SYSROOTDIR:" && \
diff $(SYSFILES) $(CHECKFILES) ; \
false) \
}
ifeq ($(XTOOLS_ENABLE),yes)
$(Q) mkdir -p $(CHECKROOT) && \
$(CROSSBIN)/$(CROSSPREFIX)populate -r $(DEV_SYSROOT) \
-s $(SYSROOTDIR) -d $(CHECKDIR) && \
(cd $(SYSROOTDIR) && find . | LC_ALL=C sort > $(SYSFILES)) && \
(cd $(CHECKDIR) && find . | LC_ALL=C sort > $(CHECKFILES)) && \
diff -q $(SYSFILES) $(CHECKFILES) > /dev/null 2>&1 || { \
(echo "ERROR: Missing files in SYSROOTDIR:" && \
diff $(SYSFILES) $(CHECKFILES) ; \
false) \
}
endif
$(Q) touch $@

# Setting RUNTIME_ONIE_PLATFORM and RUNTIME_ONIE_MACHINE on the
Expand Down Expand Up @@ -276,6 +279,9 @@ $(SYSROOT_COMPLETE_STAMP): $(SYSROOT_CHECK_STAMP)
$(Q) echo "onie_firmware=$(FIRMWARE_TYPE)" >> $(MACHINE_CONF)
$(Q) echo "onie_switch_asic=$(SWITCH_ASIC_VENDOR)" >> $(MACHINE_CONF)
$(Q) echo "onie_skip_ethmgmt_macs=$(SKIP_ETHMGMT_MACS)" >> $(MACHINE_CONF)
ifeq ($(GRUB_ENABLE),yes)
$(Q) echo "onie_grub_image_name=$(GRUB_IMAGE_NAME)" >> $(MACHINE_CONF)
endif
$(Q) cp $(LSB_RELEASE_FILE) $(SYSROOTDIR)/etc/lsb-release
$(Q) cp $(OS_RELEASE_FILE) $(SYSROOTDIR)/etc/os-release
$(Q) cp $(MACHINE_CONF) $(SYSROOTDIR)/etc/machine.conf
Expand All @@ -302,7 +308,7 @@ endif

$(UPDATER_ONIE_TOOLS): $(SYSROOT_COMPLETE_STAMP) $(SCRIPTDIR)/onie-mk-tools.sh
$(Q) echo "==== Create ONIE Tools tarball ===="
$(Q) $(SCRIPTDIR)/onie-mk-tools.sh $(ONIE_ARCH) $(ONIE_TOOLS_DIR) $@ \
$(Q) $(SCRIPTDIR)/onie-mk-tools.sh $(ROOTFS_ARCH) $(ONIE_TOOLS_DIR) $@ \
$(SYSROOTDIR) $(ONIE_SYSROOT_TOOLS_LIST)

.SECONDARY: $(ITB_IMAGE)
Expand Down Expand Up @@ -345,7 +351,7 @@ $(IMAGE_UPDATER_STAMP): $(UPDATER_IMAGE_PARTS_COMPLETE) $(SCRIPTDIR)/onie-mk-ins
UPDATER_UBOOT_NAME=$(UPDATER_UBOOT_NAME) \
EXTRA_CMDLINE_LINUX="$(EXTRA_CMDLINE_LINUX)" \
SERIAL_CONSOLE_ENABLE=$(SERIAL_CONSOLE_ENABLE) \
$(SCRIPTDIR)/onie-mk-installer.sh onie $(ONIE_ARCH) $(MACHINEDIR) \
$(SCRIPTDIR)/onie-mk-installer.sh onie $(ROOTFS_ARCH) $(MACHINEDIR) \
$(MACHINE_CONF) $(INSTALLER_DIR) \
$(UPDATER_IMAGE) $(UPDATER_IMAGE_PARTS)
$(Q) touch $@
Expand Down Expand Up @@ -400,15 +406,10 @@ $(RECOVERY_INITRD_STAMP): $(IMAGE_UPDATER_STAMP)
$(Q) xz --compress --force --check=crc32 --stdout -8 $(RECOVERY_CPIO) > $(RECOVERY_INITRD)
$(Q) touch $@

ifeq ($(UEFI_ENABLE),yes)
RECOVERY_XORRISO_OPTIONS = $(RECOVERY_CONF_DIR)/xorriso-options-uefi.cfg
else
RECOVERY_XORRISO_OPTIONS = $(RECOVERY_CONF_DIR)/xorriso-options-bios.cfg
endif
# Make hybrid .iso image containing the ONIE kernel and recovery intrd
recovery-iso: $(RECOVERY_ISO_STAMP)
$(RECOVERY_ISO_STAMP): $(GRUB_HOST_INSTALL_STAMP) $(RECOVERY_INITRD_STAMP) \
$(RECOVERY_CONF_DIR)/grub-iso.cfg $(RECOVERY_XORRISO_OPTIONS)
$(RECOVERY_CONF_DIR)/grub-iso.cfg
$(Q) echo "==== Create $(MACHINE_PREFIX) ONIE Recovery Hybrid iso ===="
$(Q) Q=$(Q) CONSOLE_SPEED=$(CONSOLE_SPEED) \
CONSOLE_DEV=$(CONSOLE_DEV) \
Expand All @@ -417,24 +418,23 @@ $(RECOVERY_ISO_STAMP): $(GRUB_HOST_INSTALL_STAMP) $(RECOVERY_INITRD_STAMP) \
UEFI_ENABLE=$(UEFI_ENABLE) \
EXTRA_CMDLINE_LINUX="$(EXTRA_CMDLINE_LINUX)" \
SERIAL_CONSOLE_ENABLE=$(SERIAL_CONSOLE_ENABLE) \
$(SCRIPTDIR)/onie-mk-iso.sh $(UPDATER_VMLINUZ) $(RECOVERY_INITRD) \
$(RECOVERY_DIR) \
$(SCRIPTDIR)/onie-mk-iso.sh $(ARCH) $(UPDATER_VMLINUZ) \
$(RECOVERY_INITRD) $(RECOVERY_DIR) \
$(MACHINE_CONF) $(RECOVERY_CONF_DIR) \
$(GRUB_HOST_LIB_I386_DIR) $(GRUB_HOST_BIN_I386_DIR) \
$(GRUB_HOST_LIB_UEFI_DIR) $(GRUB_HOST_BIN_UEFI_DIR) \
$(RECOVERY_XORRISO_OPTIONS) \
$(RECOVERY_ISO_IMAGE)
$(GRUB_TARGET_LIB_UEFI_DIR) $(GRUB_HOST_BIN_UEFI_DIR) \
$(FIRMWARE_TYPE) $(RECOVERY_ISO_IMAGE)
$(Q) touch $@

# Convert the .iso to a PXE-EFI64 bootable image using GRUB
pxe-efi64: $(PXE_EFI64_STAMP)
$(PXE_EFI64_STAMP): $(GRUB_HOST_INSTALL_STAMP) $(RECOVERY_ISO_STAMP) $(RECOVERY_CONF_DIR)/grub-embed.cfg
$(Q) echo "==== Create $(MACHINE_PREFIX) ONIE PXE EFI64 Recovery Image ===="
$(Q) cd $(GRUB_HOST_INSTALL_UEFI_DIR)/usr/lib/grub/x86_64-efi && \
$(Q) cd $(GRUB_TARGET_LIB_UEFI_DIR) && \
ls *.mod|sed -e 's/\.mod//g'|egrep -v '(ehci|at_keyboard)' > $(PXE_EFI64_GRUB_MODS)
$(Q) $(GRUB_HOST_INSTALL_UEFI_DIR)/usr/bin/grub-mkimage --format=x86_64-efi \
$(Q) $(GRUB_HOST_INSTALL_UEFI_DIR)/usr/bin/grub-mkimage --format=$(ARCH)-efi \
--config=$(RECOVERY_CONF_DIR)/grub-embed.cfg \
--directory=$(GRUB_HOST_INSTALL_UEFI_DIR)/usr/lib/grub/x86_64-efi \
--directory=$(GRUB_TARGET_LIB_UEFI_DIR) \
--output=$(PXE_EFI64_IMAGE) --memdisk=$(RECOVERY_ISO_IMAGE) \
$$(cat $(PXE_EFI64_GRUB_MODS))
$(Q) touch $@
Expand All @@ -452,7 +452,7 @@ $(IMAGE_COMPLETE_STAMP): $(PLATFORM_IMAGE_COMPLETE) $(MACHINE_IMAGE_COMPLETE_STA

USERSPACE_CLEAN += image-clean
image-clean:
$(Q) rm -f $(IMAGEDIR)/*$(MACHINE_PREFIX)* $(SYSROOT_CPIO_XZ) $(IMAGE_COMPLETE_STAMP)
$(Q) rm -f $(IMAGEDIR)/*$(MACHINE_PREFIX)* $(SYSROOT_CPIO_XZ) $(IMAGE_COMPLETE_STAMP) $(KERNEL_VMLINUZ_INSTALL_STAMP)
$(Q) rm -rf $(RECOVERY_DIR) $(MACHINE_IMAGE_COMPLETE_STAMP) $(MACHINE_IMAGE_PRODUCTS)
$(Q) echo "=== Finished making $@ for $(PLATFORM)"

Expand Down
Loading

0 comments on commit 6c3b92f

Please sign in to comment.