Signed-off-by: Leah Rowe <info@minifree.org>
master
Leah Rowe 2024-08-23 01:28:08 +01:00
parent b5ca9e1686
commit a2164297b9
22 changed files with 218 additions and 184 deletions

View File

@ -108,6 +108,9 @@ On Fedora, you can use the following
sudo dnf install python-unversioned-command sudo dnf install python-unversioned-command
On most modern distros, Python 2 is no longer included and Python 3 will be
the only one available on the `python`.
How to compile Libreboot How to compile Libreboot
======================== ========================
@ -132,24 +135,24 @@ Fedora, Arch Linux/Parabola or Void Linux.
Some examples (run them as root, use use e.g. `sudo`, `doas`): Some examples (run them as root, use use e.g. `sudo`, `doas`):
./build dependencies ubuntu ./mk dependencies ubuntu
or or
./build dependencies debian ./mk dependencies debian
or or
./build dependencies fedora38 ./mk dependencies fedora38
or or
./build dependencies arch ./mk dependencies arch
NOTE: In case of Ubuntu 20.04 LTS or derived distros for that specific release, NOTE: In case of Ubuntu 20.04 LTS or derived distros for that specific release,
use the dedicated configuration file: use the dedicated configuration file:
./build dependencies ubuntu2004 ./mk dependencies ubuntu2004
Check: `config/dependencies/` for list of supported distros. Check: `config/dependencies/` for list of supported distros.
@ -161,32 +164,32 @@ Next, build ROM images
---------------------- ----------------------
Libreboot MaKe (lbmk) automatically runs all necessary commands; for Libreboot MaKe (lbmk) automatically runs all necessary commands; for
example, `./build roms` will automatically run `./build grub` example, `./mk -b coreboot` will automatically build the required payloads
if the required GRUB payload (under `elf/grub/`) does not exist. if not already compiled.
As a result, you can now (after installing the correct build dependencies) run As a result, you can now (after installing the correct build dependencies) run
just a single command, from a fresh Git clone, to build all ROM images: just a single command, from a fresh Git clone, to build all ROM images:
./build roms all ./mk -b coreboot
or even just build specific ROM images, e.g.: or even just build specific ROM images, e.g.:
./build roms x60 ./mk -b coreboot x60
or get a list of supported build targets: or get a list of supported build targets:
./build roms list ./mk -b coreboot list
Or maybe just build payloads? Or maybe just build payloads?
----------------------------- -----------------------------
If you wish to build payloads, you can also do that. For example: If you wish to build payloads, you can also do that. For example:
./build grub ./mk -b grub
./update trees -b seabios ./mk -b seabios
./update trees -b u-boot ./mk -b u-boot
Previous steps will be performed automatically. However, you can *still* run Previous steps will be performed automatically. However, you can *still* run
individual parts of the build system manually, if you choose. This may be individual parts of the build system manually, if you choose. This may be
@ -199,7 +202,7 @@ Want to modify Libreboot?
Check the [lbmk maintenance manual](../maintain/) for guidance. You may for Check the [lbmk maintenance manual](../maintain/) for guidance. You may for
example want to modify a config, e.g.: example want to modify a config, e.g.:
./update trees -m coreboot x200_8mb ./mk -m coreboot x200_8mb
Or perhaps add a new board! The maintenance manual will teach you how the Or perhaps add a new board! The maintenance manual will teach you how the
Libreboot build system (lbmk) works! Libreboot build system (lbmk) works!

View File

@ -43,7 +43,7 @@ marked as stable, the build proceeds without further input. If the board is
marked anything other, a warning appears asking if you wish to proceed; to marked anything other, a warning appears asking if you wish to proceed; to
disable these warnings, do this before building (not recommended): disable these warnings, do this before building (not recommended):
export LBMK_STATUS=n export XBMK_STATUS=n
In Libreboot, we specify: `stable`, `unstable`, `broken` or `untested`. In Libreboot, we specify: `stable`, `unstable`, `broken` or `untested`.
The "unstable" marking means that the board boots mostly/entirely reliably The "unstable" marking means that the board boots mostly/entirely reliably
@ -64,7 +64,7 @@ Multi-threaded builds
Libreboot's build system defaults to a single build thread, but you can change Libreboot's build system defaults to a single build thread, but you can change
it by doing e.g. it by doing e.g.
export LBMK_THREADS=4 export XBMK_THREADS=4
This would make lbmk run on 4 threads. This would make lbmk run on 4 threads.
@ -74,7 +74,7 @@ Environmental variables
Please read about environmental variables in [the build Please read about environmental variables in [the build
instructions](../maintain/), before running lbmk. You should set instructions](../maintain/), before running lbmk. You should set
your variables accordingly, though you do not technically need to; some your variables accordingly, though you do not technically need to; some
of them may be useful, e.g. `LBMK_THREADS` (sets the number of build threads). of them may be useful, e.g. `XBMK_THREADS` (sets the number of build threads).
Environmental variables Environmental variables
======================= =======================
@ -82,7 +82,7 @@ Environmental variables
Please read about environmental variables in [the build Please read about environmental variables in [the build
instructions](../maintain/), before running lbmk. You should set instructions](../maintain/), before running lbmk. You should set
your variables accordingly, though you do not technically need to; some your variables accordingly, though you do not technically need to; some
of them may be useful, e.g. `LBMK_THREADS` (sets the number of build threads). of them may be useful, e.g. `XBMK_THREADS` (sets the number of build threads).
Git Git
=== ===
@ -127,15 +127,15 @@ time or date can cause connections to be dropped during negotiation.
libreboot включає сценарій, який автоматично встановлює apt-get залежності libreboot включає сценарій, який автоматично встановлює apt-get залежності
в Ubuntu 20.04: в Ubuntu 20.04:
sudo ./build dependencies ubuntu2004 sudo ./mk dependencies ubuntu2004
Окремі сценарії також існують: Окремі сценарії також існують:
sudo ./build dependencies debian sudo ./mk dependencies debian
sudo ./build dependencies arch sudo ./mk dependencies arch
sudo ./build dependencies void sudo ./mk dependencies void
Check: `config/dependencies/` for list of supported distros. Check: `config/dependencies/` for list of supported distros.
@ -150,23 +150,23 @@ libreboot Make (lbmk) автоматично виконує всі необхі
В якості результату, ви тепер можете (після встановлення правильних залежностей побудови) виконати В якості результату, ви тепер можете (після встановлення правильних залежностей побудови) виконати
лише одну команду, з свіжого Git clone, для побудови образів ROM: лише одну команду, з свіжого Git clone, для побудови образів ROM:
./build roms all ./mk -b coreboot
або навіть побудувати конкретні образи ROM, такі як: або навіть побудувати конкретні образи ROM, такі як:
./build roms x60 ./mk -b coreboot x60
or get a list of supported build targets: or get a list of supported build targets:
./build roms list ./mk -b coreboot list
Якщо ви бажаєте побудувати корисні навантаження, можете зробити це. Наприклад: Якщо ви бажаєте побудувати корисні навантаження, можете зробити це. Наприклад:
./build grub ./mk -b grub
./update trees -b seabios ./mk -b seabios
./update trees -b u-boot ./mk -b u-boot
Попередні кроки буде виконано автоматично. Однак, ви можете *досі* виконати Попередні кроки буде виконано автоматично. Однак, ви можете *досі* виконати
окремі частини системи побудови власноруч, якщо виберете. Це може бути окремі частини системи побудови власноруч, якщо виберете. Це може бути

View File

@ -3,9 +3,6 @@ title: GRUB payload
x-toc-enable: true x-toc-enable: true
... ...
TODO: this guide should be reviewed and updated. Some info might be out of
date.
GRUB already has excellent GRUB already has excellent
documentation, but there are aspects of libreboot that deserve special documentation, but there are aspects of libreboot that deserve special
treatment. libreboot provides the option to boot GRUB directly, running on treatment. libreboot provides the option to boot GRUB directly, running on
@ -33,10 +30,16 @@ files:
When you build GRUB from source, you can use the `grub-mklayout` program to When you build GRUB from source, you can use the `grub-mklayout` program to
create a special keymap file for GRUB. [Learn how to build GRUB](../build/) create a special keymap file for GRUB. [Learn how to build GRUB](../build/)
Te compile GRUB, in lbmk, do this:
./mk -b grub default
Other GRUB trees are available, but the `default` one will do for now.
When you've built GRUB, using `lbmk` (libreboot build system), take your kepmap When you've built GRUB, using `lbmk` (libreboot build system), take your kepmap
file (generated by ckbcomp) and run it through `grub-mklayout` like so: file (generated by ckbcomp) and run it through `grub-mklayout` like so:
cat frazerty | ./src/grub/grub-mklayout -o frazerty.gkb cat frazerty | ./src/grub/default/grub-mklayout -o frazerty.gkb
Place the newly created `.gkb` file under `config/grub/keymap` in lbmk. When Place the newly created `.gkb` file under `config/grub/keymap` in lbmk. When
you build libreboot, a ROM image with GRUB payload and your newly created you build libreboot, a ROM image with GRUB payload and your newly created

View File

@ -164,11 +164,11 @@ Build ROM image from source
For the MT variant (7020 MT and 9020 MT): For the MT variant (7020 MT and 9020 MT):
./build roms dell9020mt_12mb ./mk -b coreboot dell9020mt_nri_12mb
For the SFF variant (7020 SFF and 9020 SFF): For the SFF variant (7020 SFF and 9020 SFF):
./build roms dell9020sff_12mb ./mk -b coreboot dell9020sff_nri_12mb
It is important that you choose the right one. The MT variant is the full It is important that you choose the right one. The MT variant is the full
MTX tower. MTX tower.

View File

@ -72,7 +72,7 @@ Build ROM image from source
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms hp2170p_16mb ./mk -b coreboot hp2170p_16mb
Installation Installation
============ ============

View File

@ -68,7 +68,7 @@ about this:
Refer to the coreboot guide for flashing instructions, and you can build the Refer to the coreboot guide for flashing instructions, and you can build the
images for it in Libreboot like so: images for it in Libreboot like so:
./build roms hp2560p_8mb ./mk -b coreboot hp2560p_8mb
More information about building ROM images can be found in More information about building ROM images can be found in
the [build guide](../build/). the [build guide](../build/).

View File

@ -103,7 +103,7 @@ a SOIC-16 chip instead of SOIC-8. Follow these instructions:
Refer to that coreboot guide for flashing instructions, and you can Refer to that coreboot guide for flashing instructions, and you can
build the images for it in Libreboot like so: build the images for it in Libreboot like so:
./build roms hp2570p_16mb ./mk -b coreboot hp2570p_16mb
More information about building ROM images can be found in More information about building ROM images can be found in
the [build guide](../build/). the [build guide](../build/).

View File

@ -88,7 +88,7 @@ to recover from an unbootable BIOS:
You can build the images for it in Libreboot like so: You can build the images for it in Libreboot like so:
./build roms hp8200sff_8mb ./mk -b coreboot hp8200sff_8mb
More information about building ROM images can be found in More information about building ROM images can be found in
the [build guide](../build/). the [build guide](../build/).
@ -154,7 +154,7 @@ Pin-Strap is set". If it doesn't, start again from the beginning.
Now build the **4** MiB Libreboot image. Now build the **4** MiB Libreboot image.
./build roms hp8200sff_4mb ./mk -b coreboot hp8200sff_4mb
More information about building ROM images can be found in More information about building ROM images can be found in
the [build guide](../build/). the [build guide](../build/).

View File

@ -95,7 +95,7 @@ release after Libreboot 20231106, you *must* use the latest `lbmk.git`.
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms hp820g2_12mb ./mk -b coreboot hp820g2_12mb
NOTE: The actual flash is 16MB, but you must flash only the first 12MB of it. NOTE: The actual flash is 16MB, but you must flash only the first 12MB of it.
The ROM images provided by Libreboot are 12MB. The ROM images provided by Libreboot are 12MB.

View File

@ -69,7 +69,7 @@ Build ROM image from source
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms hp8460pintel_8mb ./mk -b coreboot hp8460pintel_8mb
Installation Installation
============ ============

View File

@ -72,7 +72,7 @@ Build ROM image from source
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms hp8470pintel_16mb ./mk -b coreboot hp8470pintel_16mb
Installation Installation
============ ============

View File

@ -94,7 +94,7 @@ Build ROM image from source
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms hp8560w_8mb ./mk -b coreboot hp8560w_8mb
Installation Installation
============ ============

View File

@ -47,7 +47,7 @@ Installation of Libreboot
You must first compile the Libreboot ROM You must first compile the Libreboot ROM
./build roms hp9470m_16mb ./mk -b coreboot hp9470m_16mb
More information about building ROM images can be found in More information about building ROM images can be found in
the [build guide](../build). the [build guide](../build).

View File

@ -70,7 +70,7 @@ Build ROM image from source
The build target, when building from source, is thus: The build target, when building from source, is thus:
./build roms t1650_12mb ./mk -b coreboot t1650_12mb
Installation Installation
============ ============

View File

@ -80,7 +80,7 @@ Injecting vendor files into ROM
You must determine the correct board name, for your board, based on the list You must determine the correct board name, for your board, based on the list
generated when running this command: generated when running this command:
./build roms list ./mk -b coreboot list
In order to inject the necessary files into a rom image, run the script from the root of lbmk and point to the rom image. In order to inject the necessary files into a rom image, run the script from the root of lbmk and point to the rom image.
@ -110,20 +110,20 @@ You *must* ensure that the files were inserted.
Some examples of how to do that in lbmk: Some examples of how to do that in lbmk:
./update trees -d coreboot TREENAME ./mk -d coreboot TREENAME
Now you find `cbutitls/default`, which is a directory containing `cbfstool` Now you find `elf/cbfstool`, which is a directory containing `cbfstool`
and `ifdtool`. Do this on your ROM image (`libreboot.rom` in the example and `ifdtool`. Do this on your ROM image (`libreboot.rom` in the example
below): below):
./cbutils/default/cbfstool libreboot.rom print ./elf/cbfstool/TREENAME/cbfstool libreboot.rom print
You should check that the files were inserted in cbfs, if needed; for example, You should check that the files were inserted in cbfs, if needed; for example,
EC firmware or MRC firmware. EC firmware or MRC firmware.
Next: Next:
./cbutils/default/ifdtool -x libreboot.rom ./elf/ifdtool/TREENAME/ifdtool -x libreboot.rom
This creates several `.bin` files, one of which says `me` in it (Intel ME). This creates several `.bin` files, one of which says `me` in it (Intel ME).
Run hexdump on it: Run hexdump on it:

View File

@ -87,7 +87,7 @@ Inject vendor files into ROM
You must determine the correct board name, for your board, based on the list You must determine the correct board name, for your board, based on the list
generated when running this command: generated when running this command:
./build roms list ./mk -b coreboot list
In order to inject the necessary files into a rom image, run the script from the root of lbmk and point to the rom image. In order to inject the necessary files into a rom image, run the script from the root of lbmk and point to the rom image.

View File

@ -95,15 +95,11 @@ could build it yourself or you could also clone `lbmk.git` and [install build
dependencies](../build/#first-install-build-dependencies), then inside lbmk, dependencies](../build/#first-install-build-dependencies), then inside lbmk,
do: do:
./build serprog rp2040 pico ./mk -b pico-serprog
or for the W version:
./build serprog rp2040 pico_w
This will automatically build the rpi-pico firmware, and the file will be This will automatically build the rpi-pico firmware, and the file will be
at `bin/serprog_rp2040/serprog_pico.uf2`. This binary will be provided at `bin/serprog_rp2040/serprog_pico.uf2`
pre-compiled in the next Libreboot release, after the 20230625 release. and `bin/serprog_rp2040/serprog_pico_w.uf2`.
Disconnect the Pico and proceed to wire it to your Disconnect the Pico and proceed to wire it to your
[flash chip](/docs/install/spi.html#identify-which-flash-type-you-have). [flash chip](/docs/install/spi.html#identify-which-flash-type-you-have).
@ -482,12 +478,12 @@ install flashprog. Do this after downloading the
[lbmk Git repository](https://codeberg.org/libreboot/lbmk): [lbmk Git repository](https://codeberg.org/libreboot/lbmk):
cd lbmk cd lbmk
sudo ./build dependencies ubuntu2004 sudo ./mk dependencies ubuntu2004
NOTE: debian, arch or void can be written instead of ubuntu2004. the debian NOTE: debian, arch or void can be written instead of ubuntu2004. the debian
script is also applicable to newer ubuntu versions script is also applicable to newer ubuntu versions
./update trees -b flashprog ./mk -b flashprog
If the `ubuntu2004` script complains about missing dependencies, just modify If the `ubuntu2004` script complains about missing dependencies, just modify
the dependencies config to remove those dependencies. The script is located the dependencies config to remove those dependencies. The script is located

View File

@ -71,15 +71,11 @@ could build it yourself or you could also clone `lbmk.git` and [install build
dependencies](../build/#first-install-build-dependencies), then inside lbmk, dependencies](../build/#first-install-build-dependencies), then inside lbmk,
do: do:
./build serprog rp2040 pico ./mk -b pico-serprog
or for the W version:
./build serprog rp2040 pico_w
This will automatically build the rpi-pico firmware, and the file will be This will automatically build the rpi-pico firmware, and the file will be
at `bin/serprog_rp2040/serprog_pico.uf2`. This binary will be provided at `bin/serprog_rp2040/serprog_pico.uf2`
pre-compiled in the next Libreboot release, after the 20230625 release. and `bin/serprog_rp2040/serprog_pico_w.uf2`.
Disconnect the Pico and proceed to wire it to your Disconnect the Pico and proceed to wire it to your
[flash chip](/docs/install/spi.html#identify-which-flash-type-you-have). [flash chip](/docs/install/spi.html#identify-which-flash-type-you-have).
@ -335,11 +331,11 @@ Flashrom 是用来读出、擦除、重写 NOR flash 内容的软件。
使用 Git 仓库中的 libreboot 构建系统,你可以下载并安装 flashprog。首先下载 [lbmk Git 仓库](https://codeberg.org/libreboot/lbmk),然后执行: 使用 Git 仓库中的 libreboot 构建系统,你可以下载并安装 flashprog。首先下载 [lbmk Git 仓库](https://codeberg.org/libreboot/lbmk),然后执行:
cd lbmk cd lbmk
sudo ./build dependencies ubuntu2004 sudo ./mk dependencies ubuntu2004
注意:你可以输入 debian、arch 或 void 来替换 ubuntu。debian 脚本也可以用于新版 ubuntu。 注意:你可以输入 debian、arch 或 void 来替换 ubuntu。debian 脚本也可以用于新版 ubuntu。
./update trees -b flashprog ./mk -b flashprog
如果 `ubuntu2004` 报告了依赖缺失,编辑一下这个脚本,把缺失的依赖移除就行了。脚本位于 `config/dependencies/ubuntu2004`,它是写给 Ubuntu 20.04 的,但在其他使用 `apt-get` 包管理器的 Linux 发行版应该也能用。 如果 `ubuntu2004` 报告了依赖缺失,编辑一下这个脚本,把缺失的依赖移除就行了。脚本位于 `config/dependencies/ubuntu2004`,它是写给 Ubuntu 20.04 的,但在其他使用 `apt-get` 包管理器的 Linux 发行版应该也能用。

View File

@ -59,15 +59,15 @@ Install the build dependencies. For Ubuntu 20.04 and similar, you can run
the following command in the libreboot build system, from the root directory the following command in the libreboot build system, from the root directory
of the libreboot Git repository. of the libreboot Git repository.
./build dependencies ubuntu2004 ./mk dependencies ubuntu2004
Then, download coreboot: Then, download coreboot:
./update trees -f coreboot ./mk -f coreboot
Finally, compile the `cbutils` payload (and you will then have the utils): Finally, compile the `cbutils` payload (and you will then have the utils):
./build grub ./mk -b grub
Among other things, this will produce a `cbfstool` executable under any of the Among other things, this will produce a `cbfstool` executable under any of the
subdirectories in `src/coreboot/` under `util/cbfstool/cbfstool`. subdirectories in `src/coreboot/` under `util/cbfstool/cbfstool`.
@ -82,9 +82,9 @@ You will also want to build `flashprog` which libreboot recommends for reading
from and/or writing to the boot flash. In the libreboot build system, you can from and/or writing to the boot flash. In the libreboot build system, you can
build it by running this command: build it by running this command:
./update trees -b flashprog ./mk -b flashprog
An executable will be available at `src/flashprog/flashprog` after you have done An executable will be available at `elf/flashprog/flashprog` after you have done
this. this.
Dump the boot flash Dump the boot flash
@ -96,7 +96,7 @@ your computer, you can use `flashprog` to acquire it.
Simply run the following, after using libreboot's build system to compile Simply run the following, after using libreboot's build system to compile
flashprog: flashprog:
sudo ./src/flashprog/flashprog -p internal -r dump.bin sudo ./elf/flashprog/flashprog -p internal -r dump.bin
If flashprog complains about multiple flash chip definitions, do what it says to If flashprog complains about multiple flash chip definitions, do what it says to
rectify your command and run it again. rectify your command and run it again.

View File

@ -83,16 +83,12 @@ image:
You can build `cbfstool` in the libreboot build system. Run this command: You can build `cbfstool` in the libreboot build system. Run this command:
./update trees -d coreboot TREENAME ./mk -d coreboot TREENAME
This assumes that you already downloaded coreboot:
./update trees -f coreboot
This, in turn, assumes that you have installed the build dependencies for This, in turn, assumes that you have installed the build dependencies for
libreboot. On Ubuntu 20.04 and other apt-get distros, you can do this: libreboot. On Ubuntu 20.04 and other apt-get distros, you can do this:
./build dependencies ubuntu2004 ./mk dependencies ubuntu2004
The `cbfstool` executables will be under each coreboot directory, under The `cbfstool` executables will be under each coreboot directory, under
each `coreboot/boardname/` directory for each board. Just pick one, presumably each `coreboot/boardname/` directory for each board. Just pick one, presumably
@ -159,11 +155,9 @@ GRUB using the libreboot build system. Run the following commands (assuming
you have the correct build dependencies installed) to build GRUB, from the you have the correct build dependencies installed) to build GRUB, from the
libreboot Git repository: libreboot Git repository:
./update trees -f grub ./mk -b grub default
./build grub The following executable will then be available under `src/grub/default/`:
The following executable will then be available under the `src/grub/` directory:
grub-mkpasswd-pbkdf2 grub-mkpasswd-pbkdf2
@ -249,24 +243,6 @@ NOTE: Before disabling the boot menu, make sure GRUB works. Access it using
the `bootorder` file and/or press ESC in the SeaBIOS menu. Then disable the the `bootorder` file and/or press ESC in the SeaBIOS menu. Then disable the
SeaBIOS menu. SeaBIOS menu.
Alternative: GRUB as primary
----------------------------
The *SeaBIOS first* policy is now law, in Libreboot releases. The only
exception is the x86 QEMU target. You can do this if building from source:
./build roms -p grub targetname
Where `targetname` is e.g. `x200_8mb` (use the correct one for your board).
Again: make sure GRUB works. Also: don't do this if you're using a non-Intel
graphics card because only the Intel graphics have native video initialisation
in Libreboot, and we rely on SeaBIOS to execute the VGA ROM for others.
(it is assumed that you know to add the VGA ROM in CBFS if needed, if using
a dGPU, or that you're using a graphics card on a desktop so SeaBIOS will use
that automatically)
GPG keys GPG keys
======== ========

View File

@ -126,17 +126,74 @@ bin/
This directory is created when running any of the following commands, with the This directory is created when running any of the following commands, with the
right arguments: right arguments:
./build roms ARGUMENTS_HERE ./mk -b coreboot ARGUMENTS_HERE
./build roms serprog stm32 ./mk -b stm32-vserprog
./build roms serprog rp2040 ./mk -b pico-serprog
Simply speaking, `bin/` shall contain finished ROM images or firmware, that Simply speaking, `bin/` shall contain finished ROM images or firmware, that
can then be installed (flashed) to the target device. can then be installed (flashed) to the target device.
The files under `bin/` are provided in regular Libreboot releases. The files under `bin/` are provided in regular Libreboot releases.
**These** are the ROM images that you should flash. Do *not* flash the ROM **These** are the ROM images that you should flash.
images contained under `elf/`!
Older versions of lbmk build coreboot images separately under `elf/`, but
without payloads, using `elf/` as a build cache, then inserting payloads
into copies of these images in files under `bin/`. However, modern lbmk
now only puts coreboot images in `bin/`, with payloads included.
If you still have `elf/` coreboot images in your lbmk tree, please do not
use them (and you may aswell delete them).
cache/
---------------
Certain files are cached here automatically, by lbmk. The user need not touch
these files.
cache/app
--------------
When vendor updates are extracted, they go here, which is then processed to
find individual files for use in coreboot images (e.g. KBC1126 EC firmware).
This directory is constantly over-written, so it's essentially another temporary
directory used by the build system.
cache/file/
--------------
Files that are downloaded are hashed, and the cached version of the file
is stored there, named as the SHA512 checksum. This is used for vendor file
downloads, and subfile downloads.
A *subfile* is like a Git submodule, but it's a *file* (just a humble file),
downloaded via curl/wget. The build system does not
run `git submodule update` commands when handling Git repositories anymore,
instead processing submodules manually; it supports both repositories *and*
files relative to the directory locations for those repositories, but subfiles
are not downloaded to the *cached git repository*, only the work directory used
for building in lbmk.
cache/hash
---------------
When lbmk is handling any project, it sorts a list of files under `config/`
including `config/project` (or `config/project/TREE`) and `config/data/project`.
SHA512 checksums are calculated from these files, in the sorted order, and
written in that order, to a file. *That* file is then checksummed, and this
hash is stored in `cache/hash` for that project.
If the currently stored hash differs from what's calculated, it means that
the project has changed, and the source directories plus builds are deleted.
The project source is then re-prepared and re-build.
cache/repo
--------------
Git repositories are cached here. This avoids wasting bandwidth, when downloading
multiple repositories. **Git submodules are also cached here!**
ec/ ec/
--------------- ---------------
@ -148,21 +205,30 @@ elf/
--------------- ---------------
**DO NOT flash coreboot ROM images contained under `elf/`. Please use ROM images **DO NOT flash coreboot ROM images contained under `elf/`. Please use ROM images
under `bin/` instead!** under `bin/` instead! - In modern lbmk, only the ones under `bin/` are ever
created anyway.**
Compiled binaries (compiled by lbmk) go here, but they are not the final Compiled binaries (compiled by lbmk) go here, but they are not the final
binaries; coreboot ROM images are compiled without payloads, then cached here binaries; coreboot ROM images are compiled without payloads, then cached here
under `elf/coreboot` as one example; ditto GRUB and SeaBIOS which go under `elf/coreboot` as one example
under `elf/grub` and `elf/seabios` respectively - `elf/u-boot` is another
example.
Binaries under `elf/` are compiled first, which lbmk then uses to generate GRUB and SeaBIOS which go
the files under `bin/`; the latter files under `bin/` are intended for under `elf/grub` and `elf/seabios` respectively - `elf/u-boot` is another
installation by the user. example. A given project can include a `build.list` file
at `config/data/PROJECT/build.list`, which would contain a list of file paths
relative to the *source directory*; these files would be copied, after a build
operation, to `elf/PROJECT` for single-tree projects,
or `elf/PROJECT/TREE` for multi-tree projects.
It is technically possible to re-use these files elsewhere. For example, you It is technically possible to re-use these files elsewhere. For example, you
may wish to only compile GRUB with lbmk, and then use the `grub.elf` file from may wish to only compile GRUB with lbmk, and then use the `grub.elf` file from
lbmk in your own custom coreboot ROM (that you didn't build with lbmk). lbmk in your own custom coreboot ROM (that you didn't build with lbmk). However,
this use is not officially supported by the Libreboot project; these files are
simply used by the Libreboot build system.
Some utilities are also provided compiled here, when building. For
example: `elf/flashprog/flashprog`. This is because lbmk tries to provide
out-of-source builds whenever feasible.
This is only used by the build system, but these images are *not* provided in This is only used by the build system, but these images are *not* provided in
releases (only the images under `bin/` are provided). releases (only the images under `bin/` are provided).
@ -176,6 +242,9 @@ mrc/
Intel System Agent downloaded at build time for HP EliteBook 820 G2. Intel System Agent downloaded at build time for HP EliteBook 820 G2.
The *Haswell* MRC file is no longer downloaded here, because Haswell machines
now use native raminit *exclusively*; only Broadwell uses MRC, at present.
pciroms/ pciroms/
--------------- ---------------
@ -198,20 +267,20 @@ the user.
You can create release archives by doing: You can create release archives by doing:
./update release ./mk release
By default, this creates a release under `release/`, but you can change the By default, this creates a release under `release/`, but you can change the
directory, for example: directory, for example:
./update release -d path ./mk release -d path
You can also specify that only a *source archive* be created, like so: You can also specify that only a *source archive* be created, like so:
./update release -m src ./mk release -m src
Or with a custom directory: Or with a custom directory:
./update release -d path -m src ./mk release -d path -m src
The build system expects there to be a *git tag*, so make sure there is one. The build system expects there to be a *git tag*, so make sure there is one.
This is used to create the version number for a given release. This is used to create the version number for a given release.
@ -270,7 +339,7 @@ convenience of users, and this is copied to release archives. Flashrom is the
program that you will use to read, erase and write the flash, containing program that you will use to read, erase and write the flash, containing
coreboot firmware. coreboot firmware.
src/grub/ src/grub/TREE
--------------- ---------------
Please also visit: <https://www.gnu.org/software/grub/> Please also visit: <https://www.gnu.org/software/grub/>
@ -286,7 +355,23 @@ the `grub-mkstandalone` utility is executed from here to create the final
GRUB image under `elf/grub/`. GRUB image under `elf/grub/`.
NOTE: This is *only* provided for x86 machines, in Libreboot. For ARM, we ship NOTE: This is *only* provided for x86 machines, in Libreboot. For ARM, we ship
U-Boot instead. U-Boot instead. Since Libreboot 20240612, the GRUB builds are *multi-tree*,
much like, say, coreboot or SeaBIOS.
As of August 2024, the following GRUB source trees can be downloaded:
* `src/grub/default`
* `src/grub/xhci`
* `src/grub/nvme`
Simplify specify the tree. For example:
./mk -b grub xhci
The `xhci` tree contains patches for both NVMe SSD support, and xHCI. The `nvme`
tree contains NVMe SSD support but not xHCI support. The `default` tree contains
no NVMe or xHCI support. All trees otherwise have the same fixes on top of
upstream GRUB, e.g. fix for Dell Latitude keyboard controllers.
src/memtest86plus/ src/memtest86plus/
--------------- ---------------
@ -498,8 +583,6 @@ other example. Deletions occur when the source tree is created.
config/vendor/ config/vendor/
--------------- ---------------
### config/vendor/sources
URLs and hashes for vendor files containing Intel ME images within them. Where URLs and hashes for vendor files containing Intel ME images within them. Where
feasible, backup URLs are also provided. SHA512 checksums are defined, so that feasible, backup URLs are also provided. SHA512 checksums are defined, so that
lbmk can verify the integrity of downloaded files. lbmk can verify the integrity of downloaded files.
@ -517,25 +600,6 @@ E6400.
config/coreboot config/coreboot
--------------- ---------------
### config/coreboot/build.list
When a given coreboot tree is compiled, for a given target, this file defines
which files to copy from the coreboot directory, which are then copied to
a location under `elf/coreboot`.
The presence of this file affects behaviour in `./update release` commands;
specifically, PROJECT is then downloaded to `src/PROJECT/PROJECT`, and files
under `config/PROJECT/TARGET/target.cfg` define which tree to use, which then
looks under `config/PROJECT/TREE/target.cfg` to get the git revision; then
the src directory `src/PROJECT/TREE` is created, copied
from `src/PROJECT/PROJECT`.
For example, coreboot target `x200_8mb` refers to tree name `default` which
would create `src/coreboot/default`.
If the `build.list` file is *not* included, then the git revision
under `config/git` is used, and only `src/PROJECT` is created.
### config/coreboot/BOARDNAME/ ### config/coreboot/BOARDNAME/
Each target name (e.g. `x200_8mb`) has its own directory under here. Targets Each target name (e.g. `x200_8mb`) has its own directory under here. Targets
@ -567,12 +631,9 @@ as:
* `rev="ad983eeec76ecdb2aff4fb47baeee95ade012225"` (example entry) * `rev="ad983eeec76ecdb2aff4fb47baeee95ade012225"` (example entry)
* `xarch="i386-elf"` (example entry) * `xarch="i386-elf"` (example entry)
* `payload_grub="y"` (example entry) * `payload_grub="y"` (example entry)
* `payload_grub_withseabios="y"` (example entry)
* `payload_seabios="y"` (example entry) * `payload_seabios="y"` (example entry)
* `payload_memtest="y"` (example entry) * `payload_memtest="y"` (example entry)
* `payload_uboot="y"` (example entry) * `payload_uboot="y"` (example entry)
* `payload_seabios_withgrub="y"` (example entry)
* `payload_seabios_grubonly="y"` (example entry)
* `grub_scan_disk="ata"` * `grub_scan_disk="ata"`
* `uboot_config=default` (specify which U-Boot tree to use) * `uboot_config=default` (specify which U-Boot tree to use)
* `release="n"` (example entry) * `release="n"` (example entry)
@ -630,7 +691,7 @@ 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 machine it is advisable to set this option to `ahci` (becuse the default HDD
slot is AHCI). slot is AHCI).
The `release` variable can be set to n, which makes the `./update release` The `release` variable can be set to n, which makes the `./mk release`
call skip that target, when creating release images. For example, a given call skip that target, when creating release images. For example, a given
board may not be stable and you don't want images for it to be included in the board may not be stable and you don't want images for it to be included in the
release. release.
@ -708,7 +769,7 @@ 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, 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. GRUB (including coreboot GRUB, but also PC GRUB) can use VGA modes.
The name `libgfxinit` is simply what `./build roms` uses, but it may be The name `libgfxinit` is simply what `./mk -b coreboot` uses, but it may be
that a board uses the old-school native video init code written in C. On some 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 platforms, coreboot implemented a 3rd party library called `libgfxinit`, which
is written in Ada and handles video initialization. In this setup, coreboot is written in Ada and handles video initialization. In this setup, coreboot
@ -729,7 +790,7 @@ config/dependencies/
Files here are so named, and called like so: e.g. the `debian` file would be Files here are so named, and called like so: e.g. the `debian` file would be
referenced when running: referenced when running:
./build dependencies debian ./mk dependencies debian
These files define a list of packages, and the correct package manager command These files define a list of packages, and the correct package manager command
to use on a given distro. This can be used to install build dependencies, which to use on a given distro. This can be used to install build dependencies, which
@ -940,7 +1001,7 @@ These are similar in meaning to their coreboot counterparts.
The tree` entry is actually a link, where its value is a directory name The tree` entry is actually a link, where its value is a directory name
under `config/u-boot`. For example, `tree="default"` would refer to under `config/u-boot`. For example, `tree="default"` would refer to
`config/u-boot/default` and the corresponding U-Boot source tree created `config/u-boot/default` and the corresponding U-Boot source tree created
(when running `./update trees u-boot`, which makes use of `target.cfg`) (when running `./mk u-boot`, which makes use of `target.cfg`)
would be `u-boot/default/`. In other words: a `target.cfg` file would be `u-boot/default/`. In other words: a `target.cfg` file
in `config/u-boot/foo` might refer to `config/u-boot/bar` by in `config/u-boot/foo` might refer to `config/u-boot/bar` by
specifying `tree="bar"`, and the created u-boot source tree would specifying `tree="bar"`, and the created u-boot source tree would
@ -1054,7 +1115,7 @@ You create a config, for `config/u-boot/TREENAME/configs`, by finding the
corresponding board name in the upstream U-Boot `configs` directory, and corresponding board name in the upstream U-Boot `configs` directory, and
running `make BOARDNAME_defconfig` and `make menuconfig` commands in the running `make BOARDNAME_defconfig` and `make menuconfig` commands in the
*U-Boot* build system. You should do this after *U-Boot* build system. You should do this after
running `./update trees u-boot` in lbmk. running `./mk u-boot` in lbmk.
You might want to consider basing your config on the upstream `coreboot` boards You might want to consider basing your config on the upstream `coreboot` boards
when possible, but such a board is not available upstream for ARM yet. when possible, but such a board is not available upstream for ARM yet.
@ -1114,27 +1175,27 @@ Take any given file under `script/` and you can do:
For example: For example:
./build roms ./mk -b coreboot
./update trees ./mk
Special commands available (not provided by files under `script/`): Special commands available (not provided by files under `script/`):
./update release ./mk release
./vendor download ./mk download
./vendor inject ./mk inject
The `vendor` commands are handled by the `build` script, calling functions The `vendor` commands are handled by the `build` script, calling functions
inside `include/vendor.sh`, and the `./update release` logic is handled inside `include/vendor.sh`, and the `./mk release` logic is handled
directly by the `build` script. directly by the `build` script.
More information about `./vendor` commands can be found More information about `./vendor` commands can be found
here: [inserting vendor files](../install/ivy_has_internal.md) here: [inserting vendor files](../install/ivy_has_internal.md)
Information about `./update release` is written elsewhere on this page. Information about `./mk release` is written elsewhere on this page.
You can also know what build system revision you have by running: You can also know what build system revision you have by running:
./build version ./mk version
This script is the beating heart of Libreboot. Break it and you break Libreboot. This script is the beating heart of Libreboot. Break it and you break Libreboot.
@ -1150,7 +1211,7 @@ include/git.sh
These functions in here previously existed as independent scripts, but they These functions in here previously existed as independent scripts, but they
were unified here, and they are used when you pass the `-f` argument were unified here, and they are used when you pass the `-f` argument
to `script/update/trees` (e.g. `./update trees -f coreboot`). to `script/update/trees` (e.g. `./mk -f coreboot`).
These functions deal with git cloning, submodule updates, revision resets and These functions deal with git cloning, submodule updates, revision resets and
the application of patch files via `git am`. *Every* git repository downloaded the application of patch files via `git am`. *Every* git repository downloaded
@ -1199,20 +1260,20 @@ script/roms
This builds coreboot ROM images. This builds coreboot ROM images.
Command: `./build roms targetname` Command: `./mk -b coreboot targetname`
The `targetname` argument must be specified, chosen from this output: The `targetname` argument must be specified, chosen from this output:
./build roms list ./mk -b coreboot list
Pass several board names if you wish to build only for specific targets. For Pass several board names if you wish to build only for specific targets. For
example: example:
./build roms x60 x200_8mb ./mk -b coreboot x60 x200_8mb
To build *all* targets, specify: To build *all* targets, specify:
./build roms all ./mk -b coreboot
Since November 2022, this script can build images for x86 *and* ARM targets. Since November 2022, this script can build images for x86 *and* ARM targets.
The *ARM* targets are ChromeOS devices (chromebooks and such); Libreboot uses The *ARM* targets are ChromeOS devices (chromebooks and such); Libreboot uses
@ -1321,17 +1382,17 @@ the directory `src/PROJECT/TREE` will be created, reset to the specific
revision - for multi-tree projects, all defined targets are scanned for their revision - for multi-tree projects, all defined targets are scanned for their
corresponding tree, and the trees are prepared as defined above. corresponding tree, and the trees are prepared as defined above.
Basic command: `./update trees FLAG projectname` Basic command: `./mk FLAG projectname`
Special operation: for building coreboot utilities `cbfstool` and `ifdtool` to Special operation: for building coreboot utilities `cbfstool` and `ifdtool` to
go under `cbutils/`, do this: go under `cbutils/`, do this:
./update trees -d coreboot TREENAME ./mk -d coreboot TREENAME
Or define specific coreboot tree such as: Or define specific coreboot tree such as:
./update trees -d coreboot default ./mk -d coreboot default
./update trees -d coreboot cros ./mk -d coreboot cros
FLAG values are (only *one* to be used at a time): FLAG values are (only *one* to be used at a time):
@ -1358,15 +1419,15 @@ As for *projectname", this can either be `coreboot`, `u-boot` or `seabios`.
Example commands: Example commands:
./update trees -b coreboot ./mk -b coreboot
./update trees -b coreboot x200_8mb ./mk -b coreboot x200_8mb
./update trees -b coreboot x230_12mb x220_8mb t1650_12mb ./mk -b coreboot x230_12mb x220_8mb t1650_12mb
./update trees -x coreboot default ./mk -x coreboot default
./update trees -u seabios ./mk -u seabios
./update trees -m u-boot gru_bob ./mk -m u-boot gru_bob
./update trees -f coreboot ./mk -f coreboot
./update trees -d coreboot default ./mk -d coreboot default
./update trees -d coreboot ./mk -d coreboot
NOTE: the `-x` and `-c` options will cause an exit with zero status, when NOTE: the `-x` and `-c` options will cause an exit with zero status, when
the target's corresponding source tree is unavailable; a non-zero status is the target's corresponding source tree is unavailable; a non-zero status is
@ -1376,11 +1437,11 @@ if unavailable and *that* too will return with non-zero status under fault
conditions. conditions.
NOTE: "target" can indeed be the tree name, under some circumstances. For NOTE: "target" can indeed be the tree name, under some circumstances. For
example, `./update trees -m seabios default` example, `./mk -m seabios default`
After `projectname`, a target can be specified, but if no target is specified, After `projectname`, a target can be specified, but if no target is specified,
then *all* targets will be operated on. For then *all* targets will be operated on. For
example, `./update trees -b coreboot` will attempt to build *all* example, `./mk -b coreboot` will attempt to build *all*
coreboot ROM images. coreboot ROM images.
NOTE: the `coreboot` projectname here shall cause the ROM images to go NOTE: the `coreboot` projectname here shall cause the ROM images to go

View File

@ -10,7 +10,7 @@ historically been at odds with the FSF both socially, technically and
politically. The restored version is essentially identical, but has been politically. The restored version is essentially identical, but has been
edited without altering any of the substance, and further information going edited without altering any of the substance, and further information going
up to the month of August 2024 has been added at the end, which was not up to the month of August 2024 has been added at the end, which was not
available earlier on because... Libreboot not not yet invented time travel.** available earlier on because... Libreboot has not yet invented time travel.**
Anyway, article time: Anyway, article time:
@ -1349,12 +1349,11 @@ They did rename, to GNU Boot, but only after I forced them to do so. I forced
them to do so, by exposing the moral bankrupcy on their part, in their initial them to do so, by exposing the moral bankrupcy on their part, in their initial
effort to steal the Libreboot name. effort to steal the Libreboot name.
The points raised in the GNU Boot article are *still valid* on today, 12 On this day, GNU Boot 0.1 RC3 was imminent for release, on this day, and it
December 2023. GNU Boot 0.1 RC3 is imminent for release, on this day, and it was still based largely on Libreboot 20220710, with only superficial changes on
is still based largely on Libreboot 20220710, with only superficial changes on
top of it. it still has all the old, obsolete revisions for all projects, top of it. it still has all the old, obsolete revisions for all projects,
including coreboot. It still has all of the same bugs, that Libreboot has since including coreboot. It still has all of the same bugs, that Libreboot has since
fixed, especially during 2023. fixed, especially during 2023. Libreboot is *vastly* superior, in every way.
Unlike with their first attempt, GNU Boot is fully hosted on the GNU Savannah Unlike with their first attempt, GNU Boot is fully hosted on the GNU Savannah
infrastructure, as any proper GNU project should be. I *respect* the GNU Boot infrastructure, as any proper GNU project should be. I *respect* the GNU Boot