source: mainline/boot/arch/arm64/Makefile.inc@ a4bd537

Last change on this file since a4bd537 was a4bd537, checked in by Petr Pavlu <setup@…>, 7 years ago

arm64: Add support for the architecture

This changeset adds basic support to run HelenOS on AArch64, targeting
the QEMU virt platform.

Boot:

  • Boot relies on the EDK II firmware, GRUB2 for EFI and the HelenOS bootloader (UEFI application). EDK II loads GRUB2 from a CD, GRUB2 loads the HelenOS bootloader (via UEFI) which loads OS components.
  • UEFI applications use the PE/COFF format and must be relocatable. The first problem is solved by manually having the PE/COFF headers and tables written in assembler. The relocatable requirement is addressed by compiling the code with -fpic and having the bootloader relocate itself at its startup.

Kernel:

  • Kernel code for AArch64 consists mostly of stubbing out various architecture-specific hooks: virtual memory management, interrupt and exception handling, context switching (including FPU lazy switching), support for virtual timer, atomic sequences and barriers, cache and TLB maintenance, thread and process initialization.
  • The patch adds a kernel driver for GICv2 (interrupt controller).
  • The PL011 kernel driver is extended to allow userspace to take ownership of the console.
  • The current code is not able to dynamically obtain information about available devices on the underlying machine. The port instead implements a machine-func interface similar to the one implemented by arm32. It defines a machine for the QEMU AArch64 virt platform. The configuration (device addresses and IRQ numbers) is then baked into the machine definition.

User space:

  • Uspace code for AArch64 similarly mostly implements architecture-specific hooks: context saving/restoring, syscall support, TLS support.

The patchset allows to boot the system but user interaction with the OS
is not yet possible.

  • Property mode set to 100644
File size: 2.8 KB
Line 
1#
2# Copyright (c) 2015 Petr Pavlu
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29BOOT_OUTPUT = image.boot
30POST_OUTPUT = $(ROOT_PATH)/image.iso
31POSTBUILD = Makefile.grub
32GRUB_LOADER = chainloader
33
34BFD_NAME = elf64-littleaarch64
35# Request binary BFD output. The ARM64 port manually prepares the .text
36# section to look as a PE file than can be loaded on EFI systems.
37BFD_OUTPUT = binary
38BFD_ARCH = aarch64
39
40BITS = 64
41ENDIANESS = LE
42
43# UEFI binaries should be relocatable, the EFI boot service LoadImage() will
44# rebase the boot file using the .reloc information in the image if it cannot
45# load the binary at its preferred address. The ARM64 port does not provide this
46# information in its PE file (that would require manually creating it) but
47# instead the boot code is compiled with the -fpic option and the bootloader
48# relocates itself at runtime.
49#
50# N.B. The UEFI guarantees for AArch64 that during boot time the primary
51# processor is in the execution mode that has unaligned access enabled. The
52# -mstrict-align option is therefore not needed.
53EXTRA_CFLAGS = -fpic -fvisibility=hidden
54EXTRA_LDFLAGS = -Wl,-shared
55
56SOURCES = \
57 arch/$(BARCH)/src/asm.S \
58 arch/$(BARCH)/src/main.c \
59 arch/$(BARCH)/src/relocate.c \
60 $(COMPS).o \
61 genarch/src/efi.c \
62 generic/src/gzip.c \
63 generic/src/inflate.c \
64 generic/src/kernel.c \
65 generic/src/memstr.c \
66 generic/src/payload.c \
67 generic/src/printf.c \
68 generic/src/printf_core.c \
69 generic/src/str.c \
70 generic/src/tar.c \
71 generic/src/version.c \
72 generic/src/vprintf.c
Note: See TracBrowser for help on using the repository browser.