source: mainline/defaults/arm64/Makefile.config@ 5411bd3

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 5411bd3 was 84176f3, checked in by Jakub Jermář <jakub@…>, 6 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: 787 bytes
Line 
1# Platform
2PLATFORM = arm64
3
4# Ramdisk format
5RDFMT = ext4fs
6
7# Compiler
8COMPILER = gcc_cross
9
10# In case compiler is clang, whether or not to use its integrated assembler.
11INTEGRATED_AS = default
12
13# Debug build
14CONFIG_DEBUG = y
15
16# Deadlock detection support for spinlocks
17CONFIG_DEBUG_SPINLOCK = y
18
19# Support for SMP
20CONFIG_SMP = y
21
22# Lazy FPU context switching
23CONFIG_FPU_LAZY = y
24
25# Support for userspace debuggers
26CONFIG_UDEBUG = y
27
28# Kernel console support
29CONFIG_KCONSOLE = y
30
31# Kernel symbol information
32CONFIG_SYMTAB = y
33
34# Detailed kernel logging
35CONFIG_LOG = n
36
37# Kernel function tracing
38CONFIG_TRACE = n
39
40# Compile kernel tests
41CONFIG_TEST = y
42
43# Input device class
44CONFIG_HID_IN = generic
45
46# Output device class
47CONFIG_HID_OUT = generic
48
49# Optimization level
50OPTIMIZATION = 3
Note: See TracBrowser for help on using the repository browser.