Loading...
bootctl - Boot Schema
=====================

Introduction
------------

This is a very basic prototype which aims to show some of the concepts behind
the 'boot schema' idea and how they can be implemented in practice.

Please see the FO215 document for details on the schema.

Features
--------

Very, very few features are supported:
- basic menu
- finding OSes for the menu (only extlinux.conf and EFI are supported)
- measurement of images using a TPM

Running on QEMU
---------------

To run this, first create an image with Ubuntu 2024.04. This script can help
but you will need to edit some variables at the top (imagedir and mnt) or pass
these vars into the script.

This runs the installer:

   ./scripts/build-qemu.sh -a x86 -r -k -d root.img -R 24.04

Go through the full install and then reboot.

Then run without the OS image:

   ./scripts/build-qemu.sh -a x86 -r -k -d root.img

Now you can install the u-boot-tools package so that an extlinux.conf file is
created on the disk.

When you reboot you should see a bootmenu with a few options.

If you know U-Boot well you can probably run on sandbox


Where is the schema?
--------------------

For now the schema is in `include/bootctl.dtsi` and is in devicetree format.
We will likely use YAML for this, although it may be useful to then compile the
YAML into devicetree in some cases.


Where is the boot logic?
------------------------

See `boot/bootctl/bootctl.c` for the top-level program. It really just gets the
logic driver and polls it until it either boots or gives up.

The real logic is in `boot/bootctl/logic.c`. The `logic_start()` function sets
things up, then `logic_poll()` actually manages finding things to boot and
sending them to the UI.

The data between `logic.c` and `ui.c` is a bit messy and can likely be tidied
up.

Source map
----------

boot/bootctl
    Directory containing the source for use with U-Boot

cmd/
    Provides a very simple 'bootctl' command to start things up

include/bootctl
    Include files for bootctl

test/boot/bootctl
    A few very simple tests to give a flavour of how tests might work

What about all the other patches related to expo? Please just ignore these. My
original prototype was terribly ugly so I spent some time trying to clean it
up.

Comments
--------

Please send any and all comments and suggestions to me.


--
Simon Glass
26-Mar-25