summaryrefslogtreecommitdiff
path: root/documentation/overview.rst
blob: 3d5213f4d4e8b2a72eb2f268301f2c02341e706e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
..
 # Copyright (c) 2022, Arm Limited.
 #
 # SPDX-License-Identifier: MIT

########
Overview
########

************
Introduction
************

Shrinkwrap is a tool to simplify the process of building and running firmware on
Arm Fixed Virtual Platforms (FVP). Users simply invoke the tool to build the
required config, then pass their own kernel and rootfs to the tool to boot the
full system on FVP.

Firmware for Arm platforms is becoming increasingly complex with both more
firmware components (TF-A, Hafnium, OP-TEE, Trusty, RMM, EDK2, U-Boot, etc) and
more configuration options, both when building the components and when launching
the FVP. Shrinkwrap solves this problem by abstracting all of this complexity
into a set of configurations, which can be composed and extended. The tool reads
the config and generates appropriate shell commands to build, package and run
the firmware.

See :ref:`user_guide/quickstart:Quick Start Guide` to get up and running.

************
Architecture
************

Shrinkwrap is implemented in Python and has a command line interface similar to
git, with sub-commands that take options. The Python code parses the supplied
config(s) to generate shell commands that are executed in a backend runtime. The
runtime is specified by the user and may be ``null`` (executed natively on the
user's system), or a container runtime such as ``docker`` or ``podman``. For the
container runtimes, a standard image is provided with all tools preinstalled.

********
Features
********

- A simple and intuitive command line interface enables:

  - Building all required firmware components for a given configuration
  - Packaging built firmware components for easy distribution
  - Configuring and booting the FVP with the packaged firmware components

- Introspect and use any of supplied the out-of-box configurations
- Create your own configurations by composing with and extending others
- Choose from multiple runtime engines (Docker, Podman, native)
- Ensure Reproducible builds with supplied runtime container images
- Transparently view the generated bash commands for a given config build or run
- Parallelize builds to make best use of available resources
- Acquire source from Git remote or point to existing Git local repo
- Choose how to redirect each FVP UART terminal I/O:

  - mux to stdout
  - launch telnet
  - automatically launch xterm (only in native runtime)

********************
Repository Structure
********************

=================== ====
Directory           Description
=================== ====
./docker            Scripts to generate docker images used by shrinkwrap's
                    container runtimes.
./documentation     Source for this documentation.
./shrinkwrap        Shrinkwrap Python tool implementation.
./shrinkwrap/config Shrinkwrap standard config store.
=================== ====

******************
Repository License
******************

The software is provided under an MIT license (more details in
:ref:`license_file_link:License`).

Contributions to the project should follow the same license.

*****************************
Contributions and Bug Reports
*****************************

This project has not put in place a process for contributions currently.

For bug reports, please contact Ryan Roberts <ryan.roberts@arm.com>.

********************
Feedback and support
********************

To request support please contact Arm at support@arm.com. Arm licensees may also
contact Arm via their partner managers.

*************
Maintainer(s)
*************

- Ryan Roberts <ryan.roberts@arm.com>