diff --git a/site/docs/maintain/index.md b/site/docs/maintain/index.md
index 3b42a02..b426e2a 100644
--- a/site/docs/maintain/index.md
+++ b/site/docs/maintain/index.md
@@ -1,257 +1,1125 @@
-% TODO
-% TODO
-% TODO
+---
+title: lbmk maintenance manual
+x-toc-enable: true
+...
+
+Automated freedom
+=================
+
+This manual describes the nature of `lbmk` (LibreBoot MaKe), the automated
+build system used to produce Libreboot releases. It is intended as a reference
+for *libreboot development*.
+
+If you simply wish to compile Libreboot from source, you should instead refer
+to the [build instructions](../build/)
+
+This documentation covers *modern* Libreboot; version 20160907 and below use a
+much older, less polished version, from before it was actually
+called `lbmk` (it was simply called "the libreboot build system" back then).
+Information about those build systems are provided in the documentation
+provided with those releases.
+
+Generally speaking, *testing* releases of Libreboot do not come with
+documentation; if you're using *old* testing releases, it is prudent to check
+the `lbwww.git` repository on a revision from around the same time as those
+releases. Future stable releases of Libreboot will come with a snapshot of
+the `lbwww.git` repository, for documentation pertaining to such releases. One
+way to do this, for releases from 2021 onwards, is to simply run `git log` on
+the `news/` section of `lbwww.git` and find the revision that added
+the *announcement* for a given release (again, 2021 onwards), and then you can
+just reset to that revision.
+
+As such, you should always refer to the *live* version of this page, on
+libreboot.org, when working on the `lbmk.git` repository; the live version is
+intended for development on the Git repository!
+
+Libreboot blob policy
+=====================
+
+Libreboot has a strict policy of *excluding* non-free software. It is to only
+distribute *free software*. Please keep this in mind, when you work on the
+Libreboot build system, if you will later submit patches to the project.
+
+[Learn more about Libreboot's policies](../../news/policy.md)
+
+osbmk
+=====
+
+Another project, named osboot, is also maintained by Leah Rowe, forked from
+Libreboot: - this project is just the same as Libreboot,
+with the same build system, except for some tweaks: *all* blobs are allowed,
+and CPU microcode updates are enabled by default, and the build system is
+modified accordingly, but mostly the same.
+
+The libreboot build system is `lbmk`. The osboot build system is `osbmk`.
+These two build systems are almost identical, except for a few differences.
+They are both actively maintained, in parallel, and lead/founded by Leah Rowe.
+
+Why bring up osboot? Because it's relevant for licensing and compliance, in
+case of audit in the future.
+
+The `osboot` project was forked from Libreboot 20160907's build system (which
+did not have a name back then), but with Libreboot documentation from December
+in 2020. It was then expanded upon, fixing many flaws in the 20160907 build
+system. At that time, a failed experimental re-write of Libreboot's build
+system had to either be revived and succeed (but that build system was very
+badly designed), or scrapped; the latter was decided, and osboot-libre was
+born, which was used to create `lbmk`. With this act, the Libreboot project,
+formerly a *dead project* for all intents and purposes, was completely restored.
+All of these acts took place during the early months of the year 2021; the
+failed Libreboot re-write took place after the Libreboot 20160907 release, and
+was scrapped during March of 2021, in favour of lbmk which is a fork of osbmk.
+(and lbmk is now, as of 2 January 2021, being re-forked to bring osbmk/lbmk
+back into feature parity. so you can fork your forks of your forks, and
+maybe fork the fork of your fork of your fork)
+
+Libreboot and osboot are two sides of a coin. Libreboot is the "light", and
+osboot is the *dark side*; osboot scrapts Libreboot's
+[zero blobs policy](../../policy.md) and it is targeted at those who don't
+want to (or can't) use Libreboot, but who still want some freedoms compared
+to otherwise fully non-free vendor firmware.
+
+What is lbmk?
+=============
+
+In the same way that Trisquel and Debian are GNU+Linux distributions, Libreboot
+is a **coreboot distribution**. The `lbmk` build system *is* that distribution,
+providing the glue necessary to integrate coreboot plus anything else that's
+needed, unifying everything in a completely automated and pre-configured
+fashion, so as to provide a distribution that is ease to install and use by
+non-technical users.
+
+In the past, installation of coreboot **required** extensive amounts of
+configuration by the user, because there was no automation available. It was a
+problem, and one that `lbmk` has *solved*; it is a problem, because most users
+simply want to *install* coreboot without giving it much thought. The `lbmk`
+build system is written for *those* people, while also providing some
+flexibility for those who do want to tinker and get their hands dirty.
+
+The `lbmk` build system is designed to be simple. Each part of it is its own
+separate program, which is to run independently. *Write one program that does
+one thing well*.
+
+Technically, `lbmk` isn't necessarily a build system, but rather, a handful of
+small scripts that run other scripts, or even C programs if you wish. What
+makes `lbmk` *be* `lbmk` is what each individual script does, and how scripts
+interact with or call each other to produce working ROM images. It takes
+a *light touch* approach, providing only the most minimal glue necessary to
+build working ROM images that the user can install, with sane defaults, while
+also providing some ability to customize the firmware, with documentation
+describing how to do just that. User-friendly documentation is provided, with
+simple installation steps, automating as much of it as possible.
+
+*This* document is different. The document you're reading right now is written
+for *technical* users who want to know how Libreboot is put together.
+
+The lbmk design also helps to ease copyright licensing and compliance, because
+each part of lbmk is literally its own separate program. With this design, it
+means that most scripts do not directly link/embed/include each other. Because
+of this, it's much easier to have different licenses in use for different
+files. Generally speaking, lbmk is GNU GPLv3+, but it's perfectly OK, for
+example, to add files that are GPLv2 or other licenses. By comparison, if you
+were to have a C program under GPLv3, you could not \#include C libraries that
+are GPLv2, at least not directly, or there would be many pitfalls to avoid at
+the very least. With lbmk's design, you can think of it as like when you have
+many programs running in your operating system, and not all of those programs
+are under the same license, and most of those different licenses are not
+compatible with each other; this is perfectly OK there, and it's OK here too.
+
+The purpose of this document is to (hopefully) cause you to understand the
+entire build system in Libreboot, so that you can contribute patches or
+otherwise make whatever changes you like. As such, this is a reference guide
+for Libreboot development.
+
+Libreboot is a *coreboot distro*, focusing on integration. As such, direct
+development on software such as coreboot, GNU GRUB, SeaBIOS etc should ideally
+be done upstream, or if it's a project hosted by Libreboot (such as ich9utils)
+developed in the corresponding separate repository.
+
+This document is written for developers and power users alike, or otherwise for
+anyone who is curious enough to learn more about what *makes* Libreboot!
+
+A major planned addition to lbmk in the future is: use it to implement a small
+busybox+linux distribution, with musl libc, plus u-root, and implement a
+linux-based bootloader setup similar to Heads, but do it *lbmk-style*. The
+lbmk build system is designed for absolute simplicity and modularity, making
+it easy to understand and maintain. It intentionally avoids use of rather
+complicated programs such as GNU Autoconf; the Makefile in lbmk is just bolted
+on but it not required. The `lbmk` build system is a *non-design*; it evolved
+over time, into what it is today. Its modularity and simplicity of non-design
+allows you to easily rewrite large parts of it, whenever you want to do so.
+
+lbmk is largely written in GNU BASH, and this is unlikely to change in the
+future. However, lbmk integrates several projects such as coreboot, GNU GRUB
+or SeaBIOS, and these all have *their* own build systems aswell. The `lbmk`
+build system is the glue that puts all of these together to produce ROM images
+for users, in a completely automated fashion. The purpose of `lbmk` is to
+provide an *unattended* build process, with as little user interaction as
+possible. Thus, `lbmk` is an *automated build system*. It says on the Libreboot
+home page that Libreboot is a *coreboot distribution* in much the same way that
+Trisquel is a *GNU+Linux distribution*, and `lbmk` is what implements that!
+
+Continue reading, and you will learn of each file contained in `lbmk`. This
+document largely pertains to the version of `lbmk` as hosted in `lbmk.git`, but
+this manual also covers source code archives containing the full downloaded
+set of modules such as coreboot and GRUB.
+
+In general, it is advisable to open *every* file in lbmk, after you downloaded
+it (from the Git repository), and study the logic in great detail. This manual
+attempts to explain all of it, and provide a general idea, but nothing beats
+simply *studying* the logic directly.
+
+AUTOMATED automation
+====================
+
+Every part of lbmk checks if the prerequisite steps are done, and performs them
+automatically if not. The `roms_helper` script is no different; for example, it
+automatically downloads coreboot if not present, aswell as GRUB and everything
+else. You can run each and every part of lbmk without having to worry about
+running something before it, because it is handled automatically; if that is
+ever not the case, it's a bug that should be fixed immediately (in Libreboot
+20160907, such fine tuned automation did not exist and you did have to run
+specific parts of the build system manually, in a precise order, but this is
+no longer the case in `lbmk` for Libreboot from 2021 onwards).
+
+Another example: if you run `./build payload grub` but `./build module grub` is
+not completed, it will automatically run that first, to produce
+the `grub-mkstandalone` binary which is then used by `./build payload grub`
+
+Another example: if you run `./build boot roms` and crossgcc isn't yet built
+for the revision used on each given board, it will automatically compile that
+version of it, using *that* coreboot tree's own build system to do it.
+
+This level of automation means that `lbmk` from 2021 onwards is much easier to
+use, compared to the build system present in Libreboot 20160907. Massive
+improvements to that build system were made, during most of 2021, when
+implementing both the `osbmk` *and* `lbmk` build systems.
+
+All sections below pertain to actual files in lbmk:
+
+COPYING
+=======
+
+This file contains a copy of the GNU General Public License, version 3.0. It is
+the license that most parts of `lbmk` are released under.
+
+Makefile
+========
+
+For use with GNU Make, this is a frontend to `lbmk`, which can be used to run
+various commands in `lbmk`.
+
+Use of this file is purely optional, and largely beneficial if you simply want
+to build all of `lbmk` (just run `make` when the current work directory is the
+root directory of `lbmk`).
+
+README.md
+=========
+
+This file contains a brief description of Libreboot, along with information
+about the project
+
+build
+=====
+
+This is the main BASH script, part of `lbmk`, used for running most `lbmk`
+commands. You could say that this file *is* `lbmk`. Run `./build help` for
+usage instructions.
+
+It calls scripts in `resources/scripts/build/`. For example, the
+command `./build boot roms` will execute `resources/scripts/build/boot/roms`.
+When running such commands, additional parameters can be given, which will
+be passed along to the corresponding script. For example, try:
+
+ ./build boot roms x60 x200_8mb w500_16mb
+
+This will run:
+
+ ./resources/scripts/build/boot/roms x60 x200_8mb w500_16mB
+
+The `list` function is very helpful. For example:
+
+ ./build boot list
+
+At the time of writing this section, this would have outputted:
+
+ Available options for mode 'boot':
+
+ roms
+ roms_helper
+
+Another use of `list` would be:
+
+ ./build boot roms list
+
+However, the `roms` script merely happens to implement a `list` command. For
+example, `./build payload grub list` does nothing differently
+than `./build payload grub`.
+
+You may also refer to the [build instructions](../build)
+
+download
+========
+
+This is the main BASH script for downloading various components used by `lbmk`.
+For example, this script downloads coreboot. Scripts called by `download` may
+also apply patches and such, to the corresponding project; for example, it will
+apply custom patches to GNU GRUB.
+
+This runs scripts in `resources/scripts/download`. For example:
+
+ ./download coreboot
+
+This would run:
+
+ ./resources/scripts/download/coreboot
+
+Additional parameters can be given, for example:
+
+ ./download coreboot default
+
+This would run:
+
+ ./resources/scripts/download/coreboot default
+
+For a full list of all `download` commands, run:
+
+ ./download help
+
+modify
+======
+
+This can be used to modify SeaBIOS and coreboot configs. It calls scripts
+in `resources/scripts/modify/`, for example:
+
+ ./modify coreboot configs
+
+This runs:
+
+ ./resources/scripts/modify/coreboot/configs
+
+Additional parameters can be given, for example:
+
+ ./modify coreboot configs x200_8mb x60
+
+This would run:
+
+ ./resources/scripts/modify/coreboot/configs x200_8mb x60
+
+projectname
+===========
+
+This file contains a single line of text, with the string "libreboot".
+
+This file exists because of [osboot](https://osboot.org/) existing, which uses
+a modified version of `lbmk`. Leah Rowe, the founder of Libreboot, is also the
+founder of osboot and actively maintains both projects. A lot of scripts
+in `lbmk` make use of the `projectname` file.
+
+If you were to fork Libreboot, you could very easily just modify this file, so
+as to rename your fork in a largely automated way.
+
+resources/coreboot/
+===================
+
+This directory contains configuration, patches and so on, for each mainboard
+supported in the `lbmk` build system. These directories contain such
+configuration, so that `lbmk` can build working ROM images.
+
+The scripts in `resources/scripts/build/boot/` make heavy use of this
+directory.
+
+resources/coreboot/BOARDNAME/
+=============================
+
+Each `BOARDNAME` directory defines configuration for a corresponding mainboard.
+It doesn't actually have to be for a board; it can also be used to just define
+a coreboot revision, with patches and so on.
+
+resources/coreboot/BOARDNAME/board.cfg
+======================================
+
+This file can contain several configuration lines, each being a string, such
+as:
+
+* `cbtree="default"` (example entry)
+* `romtype="normal"` (example entry)
+* `cbrevision="ad983eeec76ecdb2aff4fb47baeee95ade012225"` (example entry)
+* `arch="x86_64"` (example entry)
+* `payload_grub="y"` (example entry)
+* `payload_grub_withseabios="y"` (example entry)
+* `payload_seabios="y"` (example entry)
+* `payload_memtest="y"` (example entry)
+* `payload_seabios_withgrub="y"` (example entry)
+* `grub_scan_disk="ata"`
+
+More information about these and other variables will be provided throughout
+this document.
+
+The `cbtree` entry is actually a link, where its value is a directory name
+under `resources/coreboot`. For example, `cbtree="default"` would refer
+to `resources/coreboot/default` and the corresponding coreboot source tree
+created (when running `./download coreboot`, which makes use of `board.cfg`)
+would be `coreboot/default/`. In other words: a `board.cfg` file
+in `resources/coreboot/foo` might refer to `resources/coreboot/bar` by
+specifying `cbtree="bar"`, and the created coreboot source tree would
+be `coreboot/bar/`. ALSO:
+
+FUN FACT: such references are infinitely checked until resolved. For
+example, `foo` can refer to `bar` and `bar` can refer to `baz` but if there is
+an infinite loop, this is detected and handled by `lbmk`. For example,
+if `bar` refers to `foo` which refers back to `bar`, this is not permitted
+and will throw an error in `lbmk`.
+
+The `romtype` entry largely defines what `./build boot roms` does once the ROM
+is built; for example, `romtype="4MiB ICH9 IFD NOR flash"` would specify that
+an Intel Flash Descriptor for ICH9M, generated by `ich9gen`, would have to be
+inserted.
+
+The `cbrevision` entry defines which coreboot revision to use, from the
+coreboot Git repository. *At present, lbmk only supports use of the official
+repository from the upstream coreboot project*.
+
+The `arch` entry specifies which CPU architecture is to be used: currently
+recognized entries are `x86_32`, `x86_64` and `ARMv7`. *At present, setting it
+to ARMv7 only means that crossgcc-arm will be compiled, but no support for
+actually building ROMs exists in lbmk exists yet, except for 32-bit and 64-bit
+x86 machines.*
+
+The `payload_grub` entry specifies whether or not GNU GRUB is to be included in
+ROM images.
+
+The `payload_grub_withseabios` entry specifies whether or not SeaBIOS is to
+be included *with* GRUB, in ROM images. Turning this on also turns
+on `payload_seabios_withgrub`, unless that option is explicitly turned off.
+
+The `payload_seabios` entry specifies whether or not SeaBIOS is to be included
+in ROM images. This option is *automatically* enabled
+if `payload_grub_withseabios` and/or `payload_seabios_withgrub` are also turned
+on.
+
+The `payload_memtest` entry specifies whether or not MemTest86+ is to be
+included in ROM images; it will only be included in ROM images for *text mode*
+startup, on x86 machines.
+
+The `grub_scan_disk` option specifies can be `ahci`, `ata` or `both`, and it
+determines which types of disks are to be scanned, when the `grub.cfg` file in
+GRUB payloads tries to automatically find other `grub.cfg` files supplied by
+your GNU+Linux distribution. On some machines, setting it to `ata` or `ahci`
+can improve boot speed by reducing delays; for example, trying to scan `ata0`
+on a ThinkPad X60 with the optical drive may cause GRUB to hang, so on that
+machine it is advisable to set this option to `ahci` (becuse the default HDD
+slot is AHCI).
+
+resources/coreboot/BOARDNAME/config/\*
+======================================
+
+Files in this directory are *coreboot* configuration files.
+
+Configuration file names can be as follows:
+
+* `libgfxinit_corebootfb`
+* `libgfxinit_txtmode`
+* `vgarom_vesafb`
+* `vgarom_txtmode`
+* `normal`
+
+Information pertaining to this can be found on
+the [installation manual](../install/)
+
+In `lbmk`, a board-specific directory under `resources/coreboot/` should never
+specify a coreboot revision. Rather, a directory *without* coreboot configs
+should be created, specifying a coreboot revision. For example, the
+directory `resources/coreboot/default/` specifies a coreboot revision. In the
+board-specific directory, your `board.cfg` could then
+specify `cbtree="default"` but without specifying a coreboot revision (this
+is specified by `resources/coreboot/default/board.cfg`).
+
+When you create a coreboot configuration, you should set the payload to *none*
+because `lbmk` itself will assume that is the case, and insert payloads itself.
+
+Configurations with `libgfxinit` will use coreboot's native graphics init code
+if available on that board. If the file name has `txtmode` in it, coreboot
+will be configured to start in *text mode*, when setting up the display. If
+the file name has `corebootfb` in it, coreboot will be configured to set up a
+high resolution *frame buffer*, when initializing the display.
+
+NOTE: If the configuration file is `libgfxinit_txtmode`, the SeaBIOS payload
+can still run *external* VGA option ROMs on graphics cards, and this is the
+recommended setup (SeaBIOS in text mode) if you have a board with both onboard
+and an add-on graphics card (e.g. PCI express slot) installed.
+
+Configuration files with `vgarom` in the name have coreboot itself configured
+to run VGA option ROMs (and perhaps other option ROMs). *This* setup is not
+strictly recommended for *SeaBIOS*, and it is recommended that you only run
+GRUB in this setup. As such, if you wish for a board to have coreboot initialize
+the VGA ROM (on an add-on graphics card, as opposed to onboard chipset), you
+should have a *separate* directory just for that, under `resources/coreboot/`;
+another directory for that board will have configs with `libgfxinit`. HOWEVER:
+
+It *is* supported in lbmk to have SeaBIOS used, on either setup. In the
+directory `resources/seabios/` there are SeaBIOS configs for both; the vgarom
+one sets VGA hardware type to *none* while the libgfxinit one sets it
+to *coreboot linear framebuffer*. However, if you use SeaBIOS on a setup with
+coreboot also doing option ROM initialization, such initialization is being
+performed *twice*. As such, if you want to use an add-on graphics card in
+SeaBIOS, but the board has libgfxinit, it is recommended that you do it from
+a `libgfxinit` ROM.
+
+HOWEVER: there's no hard and fast rule. For example, you could make a vgarom
+configuration, on a board in lbmk, but in its coreboot configuration, don't
+enable native init *or* oproms, and do SeaBIOS-only on that board.
+
+On `vgarom` setups, coreboot can be configured to start with a high resolution
+VESA frame buffer (NOT to be confused with the coreboot frame buffer), or just
+normal text mode. Text mode startup is always recommended, and in that setup,
+GRUB (including coreboot GRUB, but also PC GRUB) can use VGA modes.
+
+The name `libgfxinit` is simply what `./build boot roms` uses, but it may be
+that a board uses the old-school native video init code written in C. On some
+platforms, coreboot implemented a 3rd party library called `libgfxinit`, which
+is written in Ada and handles video initialization. In this setup, coreboot
+*itself* should *never* be configured to run any option ROMs, whether you
+start in text mode or with the coreboot framebuffer initialization.
+
+The `normal` config type is for desktop boards that lack onboard graphics
+chipsets, where you would always use an add-on graphics card (or *no* graphics
+card, which would be perfectly OK on servers).
+
+Even if your board doesn't actually use `libgfxinit`, the config for it should
+still be named as such. From a user's perspective, it really makes no
+difference.
+
+NOTE: In practise, most VGA option ROMs are proprietary, so Libreboot would
+never actually include them, but both coreboot and SeaBIOS are capable of
+executing option ROMs stored in CBFS, or on the add-on card (the card will
+have its own flash memory or ROM, containing the file). As such, in Libreboot,
+the `vgarom` setup will always only be for executing option ROMs stored on
+a card; this is perfectly OK to enable in Libreboot, because they could in
+theory be free, and Libreboot shouldn't dictate to the user what they can and
+cannot run; Libreboot itself merely doesn't include non-free software, but it
+will not try to stop you from running it, should you so choose. It's a very
+different story in [osboot](https://osboot.org/) which is a fork of Libreboot
+without the no-blob policy, where the only question is whether such a blob
+would be legally redistributable by the project, but with the added nuance:
+osboot policy is to still try, whenever possible, to educate users as much as
+possible about these issues, and about the *right* to freedom.
+
+COREBOOT build system
+---------------------
+
+If you wish to know about coreboot, refer here:\
+
+
+This and other documents from coreboot shall help you to understand *coreboot*.
+
+You create a config, for `resources/coreboot/BOARDNAME/configs`, by running
+the `make menuconfig` command in the *coreboot* build system. You should do
+this after running `./download coreboot` in lbmk.
+
+You can simply clone coreboot upstream, add whatever patches you want, and
+then you can make your config. It will appear afterwards in a file
+named `.config` which is your config for inside `resources/coreboot/BOARDNAME/`.
+
+You can then use `git format-patch -nX` where `X` is however many patches you
+added to that coreboot tree. You can put them in the patches directory
+under `resources/coreboot/BOARDNAME`.
+
+The *base* revision, upon which any custom patches you wrote are applied,
+shall be the `cbrevision` entry.
+
+REMINDER: Do not enable a payload in coreboot's build system. Set it
+to *none*, and enable whatever payload you want in lbmk.
+
+If a payload is not supported in lbmk, patches are very much welcome! It is
+the policy of Libreboot, to only ever use the *coreboot* build system inside
+coreboot, but not use any of *coreboot's* own integration for payloads. It is
+far more flexible and *robust* to handle payloads externally, relative to the
+coreboot build system.
+
+Scripts exist in `lbmk` for automating the modification/updating of *existing*
+configs, but not for adding them. Adding them is to be done manually, based on
+the above guidance.
+
+ALSO:
+
+If the option exists, for a given board, please configure coreboot to clear
+all DRAM upon boot. This is for security reasons. An exception is made when
+such functionality is not available, on the specific board/revision that you're
+configuring in coreboot.
+
+resources/coreboot/DEFAULT/blobs.list
+=====================================
+
+For directories in `resources/coreboot/` that specify `cbrevision`,
+a `blobs.list` file can be included. When running `./download coreboot`, lbmk
+will delete whatever files are listed in `blobs.list` for that coreboot tree.
+
+When downloading coreboot, lbmk checks out coreboot 3rdparty submodules, but
+only does `git submodule update --init`; on coreboot's side, it is set up so
+that this doesn't download most of the non-free software that coreboot
+distributes (for that, you run `git submodule --init --checkout` (you'll note
+that the `--checkout` option is included).
+
+However, some binary blobs still remain even when only doing `--init`. These
+are discovered, whenever a new coreboot revision is added to lbmk, by running
+the *linux-libre* deblob script on the coreboot source tree, *after* doing
+the `git submodule update --init` command.
+
+See `deblob-check` from the fsfla website:\
+
+
+The `deblob-check` script in fact *does* work quite well on the coreboot
+source tree! However, coreboot is far simpler than the Linux kernel, and much
+more conservative in its general scope, that the script was never actually
+forked specifically for Libreboot. Simply speaking, the way deblobbing is
+handled in Libreboot is as follows:
+
+* Copy the `blobs.list` from the *last* deblobbed coreboot revision
+* Run `deblob-check` on the *new* coreboot revision
+* Run `deblob-check` on the *last* deblobbed coreboot revision
+* Diff the results
+* Any file that was deleted on coreboot side, remove from the new `blobs.list`
+* Any new files get added to the new `blobs.list`
+
+Doing it manually, and in such a crude fashion as this, is perfectly acceptable
+because coreboot makes a good habit of always separating binary code blobs into
+completely *separate* files.
+
+There is some nuance in exactly how Libreboot handles binary blobs. As far as
+Libreboot is concerned, only *software* is deleted if a blob. Non-software
+blobs are retained, so long as they are in a well-understood format or are
+otherwise trivial. Of course, such data must not be under a non-free license!
+On the other hand, blobs such as CPU microcode are always to be deleted.
+
+For example: DDR training data is retained. These are data patterns used for
+memory controller initialization, specifically during *training* (bruteforcing
+the precise timings required at boot time).
+
+More nuance: lbmk does *not* disable any code for *loading* blobs, but rather,
+it only deletes the actual blobs. For example, you can still add CPU microcode
+updates to Libreboot ROM images, and libreboot's version of coreboot will still
+use them, if present. This has always been the case. Libreboot will never try
+to prevent you from running blobs; it merely does not *include* them. This is
+for the sake of efficiency, because deblobbing is actually only a very minor
+aspect of what Libreboot is, and time is better spent on other areas of
+development. Deblobbing is done in the most low-effort way possible, just so as
+to comply with the *GNU Free System Distribution Guidelines*.
+
+*Freedom of choice* is just as important as freedom over the software *itself*.
+For example, if Trisquel were to *prevent* you from running Nvidia's proprietary
+graphics drivers, that would hurt your freedom of *choice*. At the same time,
+it is desirable that all software should be free, so you should always avoid
+non-free software whenever possible. Libreboot's policy is simply to *exclude*
+proprietary software in releases, but not to stop you from running it if you
+wish to add it in your own modified version of the firmware. This level of
+nuance is something lacking in some projects; for example, the `linux-libre`
+kernel actually removes the code for loading binary blobs, and removes the
+code warning you about missing firmware; this is wrong, and an attack on your
+freedom to choose. It is even counter-productive, because such warnings (in
+dmesg) may infact educate the user about such blobs and provide a warning that
+they should be replaced, whereas hiding their existence reduces the chance that
+someone will see the problem and fix it (by reverse engineering the blob in
+question).
+
+Of course, deleting blobs from coreboot *breaks* coreboot, in situations where
+you actually want to build for a board where those blobs are used, but since
+those boards are not to be supported in lbmk anyway, it's moot (the boards that
+lbmk does support will all boot just fine, because all of the required files
+exist, and are free).
+
+resources/coreboot/BOARDNAME/patches/\*
+=======================================
+
+In cases where `cbrevision` is specified, where the given directory
+under `resources/coreboot/` does in fact define a version of coreboot to
+download, you can add custom *patches* on top of that revision. When you run
+the command `./download coreboot`, those patches will be applied chronologically
+in alphanumerical order as per patch file names.
+
+The patch files should be named with `.patch` file extensions. All other files
+will be ignored. By having `lbmk` do it this way, you could add a `README` file
+for instance, and `lbmk` will not erroneously try to apply `README` as though
+it were a patch file. This might be useful if you have a *lot* of patches, and
+you want to provide some explanations about specific files.
+
+FUN FACT: If you run `NODELETE= ./download coreboot`, lbmk will *skip* deleting
+blobs, and also skip deleting the `.git` files and directories in those
+coreboot clones. By default, the Git history is deleted, because it contains
+blobs. However, you may want to make changes and then create a patch
+using `git format-patch`, and you can do just that! Afterwards, you would
+simply delete the blobs manually and delete the Git history (or you could just
+run `./download coreboot` again, without `NODELETE`).
+
+resources/grub/background/
+==========================
+
+Splash screen images applied duing startup when using the GNU GRUB payload.
+
+resources/grub/config/grub.cfg
+==============================
+
+This is a configuration file. It is used to program GRUB's shell.
+
+This is inserted (as `grub.cfg`) into the root of CBFS, in the ROM image. It
+contains a lot of logic in it, for booting various system configurations, when
+the GRUB payload is in use.
+
+resources/grub/config/grub\_memdisk.cfg
+========================================
+
+This is a configuration file. It is used to program GRUB's shell.
+
+This file is inserted (as `grub.cfg`) into the GRUB *memdisk*, when building
+the GRUB payload (for coreboot), using GRUB's `grub-mkstandalone` utility. It
+simply loads the `grub.cfg` file from CBFS (see above).
+
+resources/grub/keymap/
+======================
+
+This directory contains keymaps for GRUB. They allow for different keyboard
+layouts to be used. The `lbmk` build system uses these to produce ROM images
+with various keyboard layouts used by default, when the GRUB payload is to be
+used.
+
+They are stored here, directly in GRUB's own `.gkb` file format, which is a
+binary format defining which scancodes correspond to which character input.
+
+This binary format is documented by GRUB; the code for it is easy to
+understand. Please read `grub-core/commands/keylayouts.c` in the GRUB source
+code.
-````
-resources/
-resources/coreboot
-resources/coreboot/default
-resources/coreboot/default/board.cfg
-resources/coreboot/default/patches
-resources/coreboot/default/patches/0001-lenovo-x230-change-pci_mmio_size-from-1024-to-2048-f.patch
-resources/coreboot/default/patches/0002-lenovo-x230-set-default-VRAM-allocation-of-224MiB-in.patch
-resources/coreboot/default/patches/0003-lenovo-x220-change-pci_mmio_size-from-1024-to-2048.patch
-resources/coreboot/default/patches/0004-lenovo-x220-increase-default-VRAM-size-to-224MiB-in-.patch
-resources/coreboot/default/patches/0005-lenovo-t420-change-default-VRAM-allocation-to-224MiB.patch
-resources/coreboot/default/patches/0006-lenovo-t420s-change-default-vram-allocation-to-224Mi.patch
-resources/coreboot/default/patches/0007-hardcode-tianocore-revisions-and-don-t-automatically.patch
-resources/coreboot/default/patches/0008-lenovo-x200-set-VRAM-to-256MiB-by-default.patch
-resources/coreboot/default/patches/0009-lenovo-x60-64MiB-Video-RAM-changed-to-default-previo.patch
-resources/coreboot/default/patches/0010-lenovo-t400-set-vram-to-256MiB-by-default-instead-of.patch
-resources/coreboot/default/patches/0011-nb-intel-gm45-Reserve-MMIO-and-firmware-memory-below.patch
-resources/coreboot/default/patches/0012-lenovo-t60-make-64MiB-VRAM-the-default-in-cmos.defau.patch
-resources/coreboot/default/patches/0013-lenovo-x230-introduce-FHD-variant.patch
-resources/coreboot/default/patches/0014-apple-macbook21-Set-default-VRAM-to-64MiB-instead-of.patch
-resources/coreboot/default/patches/0015-lenovo-t430-change-default-vram-on-intel-gpu-to-224M.patch
-resources/coreboot/kcma-d8_2mb
-resources/coreboot/kcma-d8_2mb/board.cfg
-resources/coreboot/kcma-d8_2mb/config
-resources/coreboot/kcma-d8_2mb/config/libgfxinit_txtmode
-resources/coreboot/kcma-d8_2mb/config/vgarom_txtmode
-resources/coreboot/kcma-d8_2mb/patches
-resources/coreboot/kcma-d8_2mb/patches/0001-Revert-Revert-nb-amd-mct_ddr3-Fix-RDIMM-training-fai.patch
-resources/coreboot/kcma-d8_2mb/patches/0002-Allow-loading-Option-ROM.patch
-resources/coreboot/kcma-d8_2mb/patches/0003-Tweak-cmos-defaults-for-KCMA-D8.patch
-resources/coreboot/r500_4mb
-resources/coreboot/r500_4mb/board.cfg
-resources/coreboot/r500_4mb/config
-resources/coreboot/r500_4mb/config/libgfxinit_corebootfb
-resources/coreboot/r500_4mb/config/libgfxinit_txtmode
-resources/coreboot/t400_16mb
-resources/coreboot/t400_16mb/board.cfg
-resources/coreboot/t400_16mb/config
-resources/coreboot/t400_16mb/config/libgfxinit_corebootfb
-resources/coreboot/t400_16mb/config/libgfxinit_txtmode
-resources/coreboot/t400_4mb
-resources/coreboot/t400_4mb/board.cfg
-resources/coreboot/t400_4mb/config
-resources/coreboot/t400_4mb/config/libgfxinit_corebootfb
-resources/coreboot/t400_4mb/config/libgfxinit_txtmode
-resources/coreboot/t400_8mb
-resources/coreboot/t400_8mb/board.cfg
-resources/coreboot/t400_8mb/config
-resources/coreboot/t400_8mb/config/libgfxinit_corebootfb
-resources/coreboot/t400_8mb/config/libgfxinit_txtmode
-resources/coreboot/t420_8mb
-resources/coreboot/t420_8mb/board.cfg
-resources/coreboot/t420_8mb/config
-resources/coreboot/t420_8mb/config/libgfxinit_corebootfb
-resources/coreboot/t420_8mb/config/libgfxinit_txtmode
-resources/coreboot/t420_8mb/flash.layout
-resources/coreboot/t420s_8mb
-resources/coreboot/t420s_8mb/board.cfg
-resources/coreboot/t420s_8mb/config
-resources/coreboot/t420s_8mb/config/libgfxinit_corebootfb
-resources/coreboot/t420s_8mb/config/libgfxinit_txtmode
-resources/coreboot/t420s_8mb/flash.layout
-resources/coreboot/t440p_12mb
-resources/coreboot/t440p_12mb/board.cfg
-resources/coreboot/t440p_12mb/config
-resources/coreboot/t440p_12mb/config/libgfxinit_corebootfb
-resources/coreboot/t440p_12mb/config/libgfxinit_txtmode
-resources/coreboot/t440p_12mb/flash.layout
-resources/coreboot/t60_intelgpu
-resources/coreboot/t60_intelgpu/board.cfg
-resources/coreboot/t60_intelgpu/config
-resources/coreboot/t60_intelgpu/config/libgfxinit_corebootfb
-resources/coreboot/t60_intelgpu/config/libgfxinit_txtmode
-resources/coreboot/w500_16mb
-resources/coreboot/w500_16mb/board.cfg
-resources/coreboot/w500_16mb/config
-resources/coreboot/w500_16mb/config/libgfxinit_corebootfb
-resources/coreboot/w500_16mb/config/libgfxinit_txtmode
-resources/coreboot/w500_4mb
-resources/coreboot/w500_4mb/board.cfg
-resources/coreboot/w500_4mb/config
-resources/coreboot/w500_4mb/config/libgfxinit_corebootfb
-resources/coreboot/w500_4mb/config/libgfxinit_txtmode
-resources/coreboot/w500_8mb
-resources/coreboot/w500_8mb/board.cfg
-resources/coreboot/w500_8mb/config
-resources/coreboot/w500_8mb/config/libgfxinit_corebootfb
-resources/coreboot/w500_8mb/config/libgfxinit_txtmode
-resources/coreboot/x200_16mb
-resources/coreboot/x200_16mb/board.cfg
-resources/coreboot/x200_16mb/config
-resources/coreboot/x200_16mb/config/libgfxinit_corebootfb
-resources/coreboot/x200_16mb/config/libgfxinit_txtmode
-resources/coreboot/x200_4mb
-resources/coreboot/x200_4mb/board.cfg
-resources/coreboot/x200_4mb/config
-resources/coreboot/x200_4mb/config/libgfxinit_corebootfb
-resources/coreboot/x200_4mb/config/libgfxinit_txtmode
-resources/coreboot/x200_8mb
-resources/coreboot/x200_8mb/board.cfg
-resources/coreboot/x200_8mb/config
-resources/coreboot/x200_8mb/config/libgfxinit_corebootfb
-resources/coreboot/x200_8mb/config/libgfxinit_txtmode
-resources/coreboot/x220_8mb
-resources/coreboot/x220_8mb/board.cfg
-resources/coreboot/x220_8mb/config
-resources/coreboot/x220_8mb/config/libgfxinit_corebootfb
-resources/coreboot/x220_8mb/config/libgfxinit_txtmode
-resources/coreboot/x220_8mb/flash.layout
-resources/coreboot/x230_12mb
-resources/coreboot/x230_12mb/board.cfg
-resources/coreboot/x230_12mb/config
-resources/coreboot/x230_12mb/config/libgfxinit_corebootfb
-resources/coreboot/x230_12mb/config/libgfxinit_txtmode
-resources/coreboot/x230_12mb/flash.layout
-resources/coreboot/x230_fhd_12mb
-resources/coreboot/x230_fhd_12mb/board.cfg
-resources/coreboot/x230_fhd_12mb/config
-resources/coreboot/x230_fhd_12mb/config/libgfxinit_corebootfb
-resources/coreboot/x230_fhd_12mb/config/libgfxinit_txtmode
-resources/coreboot/x230_fhd_12mb/flash.layout
-resources/coreboot/x230t_12mb
-resources/coreboot/x230t_12mb/board.cfg
-resources/coreboot/x230t_12mb/config
-resources/coreboot/x230t_12mb/config/libgfxinit_corebootfb
-resources/coreboot/x230t_12mb/config/libgfxinit_txtmode
-resources/coreboot/x230t_12mb/flash.layout
-resources/coreboot/x60
-resources/coreboot/x60/board.cfg
-resources/coreboot/x60/config
-resources/coreboot/x60/config/libgfxinit_corebootfb
-resources/coreboot/x60/config/libgfxinit_txtmode
-resources/coreboot/macbook21
-resources/coreboot/macbook21/config
-resources/coreboot/macbook21/config/libgfxinit_corebootfb
-resources/coreboot/macbook21/config/libgfxinit_txtmode
-resources/coreboot/macbook21/board.cfg
-resources/coreboot/macbook11
-resources/coreboot/macbook11/config
-resources/coreboot/macbook11/config/libgfxinit_corebootfb
-resources/coreboot/macbook11/config/libgfxinit_txtmode
-resources/coreboot/macbook11/board.cfg
-resources/coreboot/t430s_16mb
-resources/coreboot/t430s_16mb/config
-resources/coreboot/t430s_16mb/config/libgfxinit_corebootfb
-resources/coreboot/t430s_16mb/config/libgfxinit_txtmode
-resources/coreboot/t430s_16mb/flash.layout
-resources/coreboot/t430s_16mb/board.cfg
-resources/coreboot/kcma-d8_16mb
-resources/coreboot/kcma-d8_16mb/config
-resources/coreboot/kcma-d8_16mb/config/libgfxinit_txtmode
-resources/coreboot/kcma-d8_16mb/config/vgarom_txtmode
-resources/coreboot/kcma-d8_16mb/board.cfg
-resources/coreboot/t500_8mb
-resources/coreboot/t500_8mb/board.cfg
-resources/coreboot/t500_8mb/config
-resources/coreboot/t500_8mb/config/libgfxinit_corebootfb
-resources/coreboot/t500_8mb/config/libgfxinit_txtmode
-resources/coreboot/t500_4mb
-resources/coreboot/t500_4mb/board.cfg
-resources/coreboot/t500_4mb/config
-resources/coreboot/t500_4mb/config/libgfxinit_corebootfb
-resources/coreboot/t500_4mb/config/libgfxinit_txtmode
-resources/coreboot/t500_16mb
-resources/coreboot/t500_16mb/board.cfg
-resources/coreboot/t500_16mb/config
-resources/coreboot/t500_16mb/config/libgfxinit_corebootfb
-resources/coreboot/t500_16mb/config/libgfxinit_txtmode
-resources/grub
-resources/grub/config
-resources/grub/config/AUTHORS
-resources/grub/config/COPYING
-resources/grub/config/extra
-resources/grub/config/extra/common.cfg
-resources/grub/config/extra/corebootfb.cfg
-resources/grub/config/extra/txtmode.cfg
-resources/grub/config/grub_memdisk.cfg
-resources/grub/config/menuentries
-resources/grub/config/menuentries/common.cfg
-resources/grub/config/menuentries/corebootfb.cfg
-resources/grub/config/menuentries/txtmode.cfg
-resources/grub/keymap
-resources/grub/keymap/deqwertz.gkb
-resources/grub/keymap/esqwerty.gkb
-resources/grub/keymap/frazerty.gkb
-resources/grub/keymap/frdvbepo.gkb
-resources/grub/keymap/itqwerty.gkb
-resources/grub/keymap/svenska.gkb
-resources/grub/keymap/ukdvorak.gkb
-resources/grub/keymap/ukqwerty.gkb
-resources/grub/keymap/usdvorak.gkb
-resources/grub/keymap/usqwerty.gkb
-resources/grub/keymap/colemak.gkb
resources/grub/modules.list
-resources/memtest86plus
-resources/memtest86plus/patch
-resources/memtest86plus/patch/0001-config.h-beep_mode-and-baud_rate.patch
-resources/scripts
-resources/scripts/build
-resources/scripts/build/clean
+===========================
+
+This file defines all modules that are to be included in builds of GNU GRUB.
+They are standalone builds, created using the `grub-mkstandalone` utility.
+
+resources/grub/patches/
+=======================
+
+This directory contains custom patches for GNU GRUB.
+
+resources/memtest86plus/patch/
+==============================
+
+This directory contains custom patches for Memtest86+.
+
+resources/scripts/build/boot/roms
+=================================
+
+This script builds coreboot ROM images. It is largely a shim, which calls
+the `roms_helper` script, which does most of the legwork.
+
+Command: `./build boot roms`
+
+Additional parameters can be provided. This lists all boards available:
+
+ ./build boot roms list
+
+Pass several board names if you wish to build only for specific targets. For
+example:
+
+ ./build boot roms x60 x200_8mb
+
+resources/scripts/build/boot/roms\_helper
+=========================================
+
+This script builds coreboot ROM images. It is not to be executed directory;
+user interaction must be done via the main `roms` script.
+
+It heavily makes use of the `board.cfg` file, for a given board. This script
+will *only* operate on a single target, from a directory
+in `resources/coreboot/`.
+
+If `grub_scan_disk` is set, it sets that in the `grub.cfg` file that is to be
+inserted into a ROM image, when `payload_grub` is turned on.
+
+It automatically detects if `crossgcc` is to be compiled, on a given coreboot
+tree (in cases where it has not yet been compiled), and compiles it for a
+target based on the `arch` entry in `board.cfg`.
+
+It creates ROM images with GRUB and/or SeaBIOS, optionally with Memtest86+
+also included, in various separate configurations in many different ROM images
+for user installation.
+
+The `romtype` entry in `board.cfg` tells this script what to do with the ROM,
+after it has been built. Currently, it operates based on these possible values
+for `romtype`:
+
+* `4MiB IFD BIOS region` will cause only the upper 4MB section of the ROM
+ to be included in a release. This option is largely deprecated, a hangover
+ from osboot, which also no longer uses this option on any boards, and it is
+ thus subject for removal.
+* `d8d16sas` will cause *fake* (empty) files named `pci1000,0072.rom`
+ and `pci1000,3050.rom` to be inserted in CBFS. This prevents SeaBIOS from
+ loading or executing the option ROM stored on PIKE2008 modules, present on
+ certain configurations with the ASUS KCMA-D8 or KGPE-D16 mainboards. Those
+ option ROMs cause the system to hang, so they should never be executed (this
+ means however that booting Linux kernels from SAS devices is impossible on
+ those boards, unless a Linux payload is used; Linux can use those SAS drives,
+ without relying on the PIKE2008 option ROMs). When SeaBIOS runs, it will
+ default to loading the corresponding option ROM from CBFS, if it exists, for
+ a given PCI device, overriding whatever option ROM is present on the device
+ itself, but if the option ROM is invalid/empty, SeaBIOS will not attempt to
+ load another one, until the empty/invalid one (in CBFS) is deleted.
+* `4MiB ICH9 IFD NOR flash`: the `ich9gen` program will be used to insert an
+ Intel Flash Descriptor and Gigabit Ethernet Non-volatile memory file into
+ the ROM image. This is used on GM45/ICH9M based laptops, such as: ThinkPad
+ X200, T400, T500, W500, X200 Tablet, X200S, T400S, X301
+* `8MiB ICH9 IFD NOR flash`: Same as the 4MB one as described above, but for
+ ROM images with 8MB (64Mbit) of boot flash. The one above is for systems
+ with 4MB (32Mbit) of flash.
+* `16MiB ICH9 IFD NOR flash`: ditto, but for 16MB (128Mbit) flash. In this and
+ the other two cases as described above, the first 4KB is the Intel Flash
+ Descriptor, the next 8KB is GbE NVM and the rest is BIOS (for the coreboot
+ part). In all cases, the default *ME* (Intel Management Engine) region is
+ disabled, as is the ME itself, based on bits set to disable it in the Intel
+ Flash Descriptor. The descriptor is used in such a setup, because on all
+ such boards in Libreboot, GbE NVM is needed to get gigabit ethernet working
+ correctly; it is the sole reason `ich9gen` was written, because it is
+ otherwise possible to boot these machines in a *descriptorless* setup, where
+ ICH9M behaves similarly to ICH7: all one region of flash, for the boot
+ firmware (coreboot), but it results in a non-functional gigabit enternet
+ device.
+* `4MiB ICH9 IFD NOGBE NOR flash`: Intel Flash Descriptor *on its own*, without
+ ME or GbE NVM. Just IFD and BIOS. This is used on the ThinkPad R500.
+* `8MiB ICH9 IFD NOGBE NOR flash`: Same as above, but for 8MB (64Mbit) ROMs
+* `16MiB ICH9 IFD NOGBE NOR flash`: Same as above, but for 16MB (128Mbit) ROMs
+* `i945 laptop`: in this configuration, the upper 64KB section of the ROM is
+ copied into the 64KB section below that. This results in there being two
+ bootblocks in the ROM, and you can decide which one is used by setting `bucts`
+
+If no payload is defined in `board.cfg`, the `roms_helper` script will exit
+with error status.
+
+If SeaBIOS is to be used, on `libgfxinit` setups, SeaVGABIOS will also be
+inserted. This provides a minimal VGA compatibility layer on top of the
+coreboot framebuffer, but does not allow for *switching* the VGA mode. It is
+currently most useful for directly executing ISOLINUX/SYSLINUX bootloaders,
+and certain OS software (some Windows setups might work, poorly, depending on
+the board configuration, but don't hold your breath; it is far from complete).
+
+If SeaBIOS is to be used, in `vgarom` setups or `normal` setups, SeaVGABIOS
+is not inserted and you rely on either coreboot and/or SeaBIOS to execute VGA
+option ROMs.
+
+In all cases, this script automatically inserts several SeaBIOS runtime
+configurations, such as: `etc/ps2-keyboard-spinup` set to 3000 (PS/2 spinup
+wait time), `etc/pci-optionrom-exec` set to 2 (despite that already being
+the default anyway) to enable *all* option ROMs, unless `vgarom` setups are
+used, in which case the option is set to *0* (disabled) because coreboot is
+then expected to handle option ROMs, and SeaBIOS should not do it.
+
+Essentially, the `roms_helper` script makes use of each and every part of lbmk.
+It is the heart of Libreboot.
+
+When the ROM is finished compiling, it will appear under a directory in `bin/`
+
resources/scripts/build/clean/cbutils
+=====================================
+
+This simply runs `make clean` on various utilities from coreboot, which lbmk
+makes use of.
+
+Command: `./build clean cbutils`
+
resources/scripts/build/clean/crossgcc
+======================================
+
+This runs `make crossgcc-clean` on all of the coreboot revisions present in
+lbmk.
+
+Command: `./build clean crossgcc`
+
resources/scripts/build/clean/flashrom
+======================================
+
+This runs `make clean` in the `flashrom/` directory.
+
+Command: `./build clean flashrom`
+
resources/scripts/build/clean/grub
-resources/scripts/build/clean/memtest86plus
-resources/scripts/build/clean/payloads
-resources/scripts/build/clean/rom_images
-resources/scripts/build/clean/seabios
-resources/scripts/build/clean/tianocore
+==================================
+
+This runs `make clean` in the `grub/` directory.
+
+It does not delete anything in `payload/grub/`.
+
+Command: `./build clean grub`
+
resources/scripts/build/clean/ich9utils
-resources/scripts/build/dependencies
+=======================================
+
+This runs `make clean` in the `ich9utils/` directory.
+
+Command: `./build clean ich9utils`
+
+resources/scripts/build/clean/memtest86plus
+===========================================
+
+This runs `make clean` in the `memtest86plus/` directory.
+
+Command: `./build clean memtest86plus`
+
+resources/scripts/build/clean/payloads
+======================================
+
+This deletes the `payload/` directory.
+
+Command: `./build clean payloads`
+
+resources/scripts/build/clean/rom\_images
+=========================================
+
+This deletes the `bin/` directory.
+
+Command: `./build clean rom_images`
+
+resources/scripts/build/clean/seabios
+=====================================
+
+This runs `make clean` in the `seabios/` directory.
+
+Command: `./build clean seabios`
+
resources/scripts/build/dependencies/arch
+=========================================
+
+Using `pacman`, this installs build dependencies in Arch. It may also work on
+similar distros like Manjaro or Artix.
+
+Command: `./build dependencies arch`
+
+resources/scripts/build/dependencies/debian
+===========================================
+
+Using `apt-get`, this installs build dependencies in Debian. It may work on
+other `apt-get` distros.
+
+Command: `./build dependencies debian`
+
+resources/scripts/build/dependencies/fedora35
+=============================================
+
+Using `dnf`, this installs build dependencies in Fedora 35.
+
+Command: `./build dependencies fedora35`
+
resources/scripts/build/dependencies/ubuntu2004
-resources/scripts/build/descriptors
+===============================================
+
+Using `apt-get`, this installs build dependencies for Ubuntu 20.04 (for later
+versions, you might use the Debian script).
+
+This script should also work with Trisquel 9 and 10.
+
+Command: `./build dependencies ubuntu2004`
+
+resources/scripts/build/dependencies/void
+=========================================
+
+Using `xbps`, this installs build dependencies for Void.
+
+Command: `./build dependencies void`
+
resources/scripts/build/descriptors/ich9m
-resources/scripts/build/module
+=========================================
+
+This runs `ich9gen` to generate descriptors for ICH9M platforms. These are
+then stored in `descriptors/ich9m/`
+
+Command: `./build descriptors ich9m`
+
resources/scripts/build/module/cbutils
+======================================
+
+This compiles various coreboot utilities (such as cbfstool).
+
+Command: `./build module cbutils`
+
resources/scripts/build/module/flashrom
+=======================================
+
+This compiles flashrom.
+
+Command `./build module flashrom`
+
resources/scripts/build/module/grub
-resources/scripts/build/module/memtest86plus
+===================================
+
+This compiles GRUB utilities. It does not build the actual payloads.
+
+Command: `./build module grub`
+
resources/scripts/build/module/ich9utils
-resources/scripts/build/osboot
-resources/scripts/build/osboot/roms
-resources/scripts/build/osboot/roms_helper
-resources/scripts/build/payload
-resources/scripts/build/payload/seabios
-resources/scripts/build/payload/tianocore
+========================================
+
+This compiles `ich9utils`, which includes the `ich9gen` utility.
+
+Command: `./build module ich9utils`
+
+resources/scripts/build/module/memtest86plus
+============================================
+
+This compiles Memtest86+.
+
+Command: `./build module memtest86plus`
+
resources/scripts/build/payload/grub
-resources/scripts/build/release
+====================================
+
+This builds the GRUB payloads.
+
+Command: `./build payload grub`
+
+resources/scripts/build/payload/seabios
+=======================================
+
+This builds the SeaBIOS payloads.
+
+Command: `./build payload seabios`
+
resources/scripts/build/release/roms
+====================================
+
+This builds release archives, containing ROM images. You must only run this
+after you've built all of the ROM images that you wish to release.
+
+Command: `./build release roms`
+
resources/scripts/build/release/src
-resources/scripts/download
+===================================
+
+This builds source archives. You must only run this after compiling crossgcc
+on all coreboot source trees.
+
+Command: `./build release src`
+
resources/scripts/download/coreboot
+===================================
+
+This downloads, patches and deblobs coreboot, as per `board.cfg` files
+in `resources/coreboot/`.
+
+Command: `./download coreboot`
+
resources/scripts/download/flashrom
+===================================
+
+This downloads and patches flashrom.
+
+Command: `./download flashrom`
+
resources/scripts/download/grub
-resources/scripts/download/memtest86plus
-resources/scripts/download/seabios
-resources/scripts/download/tianocore
-resources/scripts/download/dejavusansmono
+===============================
+
+This downloads and patches GNU GRUB.
+
+Command: `./download grub`
+
resources/scripts/download/ich9utils
-resources/scripts/download/www
-resources/scripts/update
-resources/scripts/update/coreboot
+====================================
+
+This downloads `ich9utils`, which includes `ich9gen`.
+
+Command: `./download ich9utils`
+
+resources/scripts/download/memtest86plus
+========================================
+
+This downloads and patches Memtest86+.
+
+Command: `./download memtest86plus`
+
+resources/scripts/download/seabios
+==================================
+
+This downloads and patches SeaBIOS.
+
+Command: `./download seabios`
+
+resources/scripts/misc/versioncheck
+===================================
+
+This updates the text file containing version information. It is used by many
+other build scripts. It also updates the files containing the version date.
+
+You need not run this yourself, directly.
+
+resources/scripts/modify/coreboot/configs
+=========================================
+
+Loads coreboot configs into coreboot trees, and runs `make menuconfig`, so
+that you can easily modify them in an ncurses interface. Additional parameters
+are accepted, for example:
+
+ ./modify coreboot configs x60 x200_8mb
+
+With no additional parameters given, it simply cycles through all configs
+under `resources/coreboot/`.
+
+Command: `./modify coreboot configs`
+
+resources/scripts/modify/seabios/configs
+========================================
+
+This lets you modify SeaBIOS configs.
+
+Command: `./modify seabios configs`
+
resources/scripts/update/coreboot/configs
-resources/scripts/update/tianocore
-resources/scripts/update/tianocore/configs
-resources/seabios
-resources/seabios/config
+=========================================
+
+This runs `make oldconfig` on coreboot configs under `resources/coreboot/`.
+It is most useful when updating a coreboot revision, per `board.cfg`. It allows
+additional parameters, for example:
+
+ ./update coreboot configs x60 x200_8mb
+
+With no additional parameters given, it simply cycles through all configs
+under `resources/coreboot/`.
+
+Command: `./update coreboot configs`
+
+resources/scripts/update/seabios/configs
+========================================
+
+This runs `make oldconfig` on SeaBIOS configs. It is most useful when updating
+the version of SeaBIOS used by lbmk.
+
+Command: `./update seabios configs`
+
resources/seabios/config/libgfxinit
+===================================
+
+SeaBIOS configuration file, when `libgfxinit` is to be used. It enables
+the `coreboot linear framebuffer` option in the SeaBIOS `make menuconfig`
+configuration interface.
+
resources/seabios/config/vgarom
-resources/tianocore
-resources/tianocore/dummy.coreboot.config
-````
+===============================
+
+This version is for normal SeaBIOS configurations, where `libgfxinit` is not
+to be used.
+
+update
+======
+
+This can be used to update SeaBIOS and coreboot configs. It calls scripts
+in `resources/scripts/update/`, for example:
+
+ ./update coreboot configs
+
+This runs:
+
+ ./resources/scripts/update/coreboot/configs
+
+Additional parameters can be given, for example:
+
+ ./update coreboot configs x200_8mb x60
+
+This would run:
+
+ ./resources/scripts/update/coreboot/configs x200_8mb x60
+