| Project Structure |
| ================= |
| |
| The Hafnium repository contains Hafnium source code, along with testing code related to integration |
| tests, and unit tests. |
| To aid with the integration tests, the repository also contains a small client library |
| for partitions and prebuilt binaries of tools needed for the build and running the tests. |
| The build system is supported by `gn`_. |
| |
| Each platform has a single associated architecture. |
| |
| The source tree is organised as follows: |
| |
| :: |
| |
| ├── build |
| ├── docs |
| ├── inc |
| │ ├── hf |
| │ │ ├── arch |
| │ │ ├── plat |
| │ │ └── ffa |
| │ └── vmapi |
| │ └── hf |
| ├── kokoro |
| ├── prebuilts |
| ├── project |
| ├── src |
| │ ├── arch |
| │ └── ffa |
| ├── test |
| │ ├── arch |
| │ ├── hftest |
| │ ├── inc |
| │ ├── linux |
| │ └── vmapi |
| ├── third_party |
| ├── tools |
| ├── vmlib |
| └── out |
| |
| - `build`: Common GN configuration, build scripts, and linker script. |
| |
| - `docs`: Documentation. |
| |
| - `driver/linux`: Linux kernel driver for Hafnium as the hypervisor, in the primary VM (More |
| details see legacy :ref:`Hypervisor` documentation). |
| |
| - `inc`: Header files. |
| |
| - `hf`: internal to Hafnium. |
| |
| - `arch`: Architecture-dependent modules, which have a common interface |
| but separate implementations per architecture. This includes details |
| of CPU initialisation, exception handling, timers, page table management, |
| and other system registers. |
| |
| - `plat`: Platform-dependent modules, which have a common interface but |
| separate implementations per platform. This includes details of the boot |
| flow, and a UART driver for the debug log console. |
| |
| - `ffa`: Interface for FF-A features. |
| |
| - `vmapi/hf`: for the interface exposed to partitions. |
| |
| - `kokoro`: Scripts and configuration for continuous integration and presubmit checks. |
| |
| - `prebuilts`: Prebuilt binaries needed for building Hafnium or running tests. |
| |
| - `project`: Configuration and extra code for each project. |
| A project is a set of one or more platforms (see above) that are built |
| together. Hafnium comes with the `reference` project |
| for running it on some common emulators and development boards. To port |
| Hafnium to a new board, you can create a new project under this directory |
| with the platform or platforms you want to add, without affecting the core |
| Hafnium code. |
| |
| - `src`: Source code for Hafnium itself in C and assembly, and unit tests in C++. |
| |
| - `arch`: Implementation of architecture-dependent modules. |
| |
| - `ffa`: Abstraction over SPMC/hypervisor specific implementation details of FF-A features. |
| |
| - `test`: Integration tests |
| |
| - `arch`: Tests for components of Hafnium that need to be run on a real architecture. |
| |
| - `hftest`: A simple test framework that supports running tests standalone on bare |
| metal, in partitions under Hafnium. Also as user-space binaries under Linux, but these are |
| not yet integrated with system where Hafnium is the SPMC. |
| |
| - `vmapi`: Tests which are run in minimal test partitions under Hafnium. |
| |
| - `arch`: Tests which are rely on specific architectural details such as the GIC version. |
| |
| - `primary_only`: Tests which run only a single (primary) partition. |
| |
| - `primary_with_secondaries`: Test which run with a primary partition and one |
| or more secondary partitions to test how they interact. |
| |
| - `third_party`: Third party code needed for building Hafnium. |
| |
| - `vmlib`: A small client library for partitions running under Hafnium. |
| |
| - `out`: Output directory for the build artifacts. |
| |
| -------------- |
| |
| *Copyright (c) 2023, Arm Limited. All rights reserved.* |
| |
| .. _gn: https://gn.googlesource.com/gn/ |