doc: Document boot process and image formats

This commit is contained in:
Tobias Waldekranz
2023-03-13 09:55:16 +01:00
parent 9869c1a290
commit d1607cc2f3
+115
View File
@@ -0,0 +1,115 @@
Disk Layout
-----------
Infix runs from a block device (e.g. eMMC or virtio disk) with the
following layout. The disk is expected to use the GPT partitioning
scheme. Partitions marked with an asterisk are optional.
.-----------.
| GPT Table |
:-----------:
| boot* |
:-----------:
| aux |
:-----------:
| |
| primary |
| |
:-----------:
| |
| secondary |
| |
:-----------:
| cfg |
:-----------:
| |
| var* |
| |
'-----------'
### `boot` - Bootloader
| Parameter | Value |
|-----------|-----------------------------------------|
| Required | No |
| Size | 4 MiB |
| Format | Raw binary, as dictated by the hardware |
Optional partition containing the system's bootloader. May also reside
in a separate storage device, e.g. a serial FLASH.
### `aux` - Auxiliary Data
| Parameter | Value |
|-----------|-----------------|
| Required | Yes |
| Size | 4 MiB |
| Format | EXT4 filesystem |
Holds information that is shared between Infix and its bootloader,
such as image signatures required to validate the chain of trust,
bootloader configuration etc.
Typical layout when using U-Boot bootloader:
/
├ primary.itbh
├ secondary.itbh
└ uboot.env
During boot, an ITB header along with the corresponding root
filesystem image are concatenated in memory, by U-Boot, to form a
valid FIT image that is used to verify its integrity and origin before
any files are extracted from it.
Note that the bootloader's primary environment is bundled in the
binary - `uboot.env` is only used to import a few settings that is
required to configure the boot order.
### `primary`/`secondary` - Infix Root Filesystem Images
| Parameter | Value |
|-----------|-------------------|
| Required | Yes |
| Size | >= 256 MiB |
| Format | Squash filesystem |
The main Infix image - the `rootfs.squashfs` image in your `images/`
directory. Two copies exist so that an incomplete upgrade does not
brick the system, and to allow fast rollbacks when upgrading to a new
version.
### `cfg` - Configuration Data
| Parameter | Value |
|-----------|-----------------|
| Required | Yes |
| Size | >= 16 MiB |
| Format | EXT4 filesystem |
Non-volatile storage of the system configuration and user
data. Concretely, user data is everything stored under `/root` and
`/home`. Depending on the operating mode, the configuration is either
the NETCONF databases from `/cfg`, or the contents of `/etc` when
operating in native mode.
### `var` - Variable Data
| Parameter | Value |
|-----------|-----------------|
| Required | No |
| Size | >= 16 MiB |
| Format | EXT4 filesystem |
Persistent storage for everything under `/var`. This is maintained as
a separate filesystem from the data in `cfg`, because while the system
can funtion reasonably well without a persistent `/var`, loosing
`/cfg` or `/etc` is much more difficult.
If `var` is not available, Infix will still persist `/var/lib` using
`cfg` as the backing storage.