2022-11-13 21:12:15 +00:00
|
|
|
---
|
2023-10-10 16:58:18 +00:00
|
|
|
title: Insert vendor files on Sandybridge/Ivybridge/Haswell
|
2022-11-13 21:12:15 +00:00
|
|
|
x-toc-enable: true
|
|
|
|
...
|
|
|
|
|
2023-09-11 23:17:52 +00:00
|
|
|
**NOTE: This page also applies to PM45 machine Dell Latitude E6400 if it
|
2023-10-10 16:58:18 +00:00
|
|
|
contains an Nvidia GPU (Libreboot vendor scripts can insert the VGA ROM)**
|
2023-09-11 23:17:52 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
This is not a general purpose installation guide, but you *should read it*
|
|
|
|
before installing Libreboot! *This* guide *must* be followed, no matter what
|
|
|
|
method you use to install Libreboot; even if you compile from source, you should
|
|
|
|
still read this page for later reference.
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
For how to use an external programmer see the [25xx NOR flashing guide](/docs/install/spi.html)
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
Introduction
|
|
|
|
============
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
**PLEASE MAKE SURE you have build dependencies installed first. Although you
|
|
|
|
do not need to re-compile release ROMs, you should follow these instructions
|
|
|
|
before reading the instructions below:
|
|
|
|
<https://libreboot.org/docs/build/#first-install-build-dependencies>**
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:46:44 +00:00
|
|
|
Coreboot is nominally free software, but requires certain vendor code on some
|
2023-10-10 20:37:16 +00:00
|
|
|
boards, for certain functionalities; we cover this more thoroughly in
|
2023-08-16 22:44:57 +00:00
|
|
|
the [Freedom Status](../../freedom-status.md) page and in the [Binary Blob
|
|
|
|
Reduction Policy](../../news/policy.md).
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
Well, not all of these files are freely redistributable. Coreboot does provide
|
|
|
|
vendor files in some cases, if the vendor has allowed it. In other cases,
|
2023-08-16 22:44:57 +00:00
|
|
|
extraction from factory firmware is required, or you can extract them from
|
|
|
|
vendor-supplied updates - Libreboot's build system does the latter.
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
When you [compile Libreboot ROM images from source](../build/), Libreboot will
|
2023-10-10 20:37:16 +00:00
|
|
|
automatically download any given files that are required, for any given board
|
2023-08-16 22:44:57 +00:00
|
|
|
target. This is done without user intervention, and only when absolutely needed
|
|
|
|
to make the machine boot properly.
|
2022-11-25 23:02:20 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
The problem?
|
|
|
|
------------
|
2022-11-25 23:02:20 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
Well, if the files cannot be freely redistributed, then we can't provide them.
|
2023-08-16 22:44:57 +00:00
|
|
|
So how do we handle *that*, in the context of Libreboot releases?
|
2022-11-25 23:02:20 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
The solution
|
|
|
|
------------
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
The answer is very simple: these files are **NOT** provided, at all! However,
|
2023-08-16 22:44:57 +00:00
|
|
|
the very same logic used by the build system can be run standalone, to re-insert
|
2023-10-10 20:37:16 +00:00
|
|
|
these vendor files on release ROMs. The `inject` script detects what files are
|
2023-08-16 22:44:57 +00:00
|
|
|
needed for your ROM image.
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
The script will detect what board you're inserting on, or you can manually tell
|
|
|
|
it what board, and it will fetch them for you, inserting them, so that your
|
2023-10-10 20:37:16 +00:00
|
|
|
board is ready to flash - flashing it without these required files may result in
|
2023-08-16 22:44:57 +00:00
|
|
|
a brick.
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
Vendor file locations
|
2023-08-16 22:44:57 +00:00
|
|
|
--------------
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
During auto-download of files, they are saved to these locations within the
|
2023-08-16 22:44:57 +00:00
|
|
|
Libreboot build system:
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
* ME firmware: `vendor/*/me.bin` - the `*` can be any given directory. Different ones will
|
2023-08-16 22:44:57 +00:00
|
|
|
be used by given boards, but the directory name may not match the board
|
|
|
|
target name.
|
2024-07-12 16:02:52 +00:00
|
|
|
* SMSC SCH5545 fan control firmware (for Dell T1650): `vendor/t1650/sch5545ec.bin` -
|
|
|
|
ditto 9010/7010 MT/SFF optiplex machines.
|
2023-08-16 22:44:57 +00:00
|
|
|
* SMSC KBC1126 embedded controller firmware, on HP EliteBooks: `ec/`
|
2024-05-28 18:04:32 +00:00
|
|
|
* Intel MRC firmware, provides raminit on HP EliteBook 820 G2
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
The above list refers to the *non-redistributable files*, and these are not
|
|
|
|
directly included in releases. These are auto-downloaded during the build.
|
2023-08-16 22:44:57 +00:00
|
|
|
The `me.bin` files are produced by extracting them from vendor updates and
|
2023-08-17 00:02:22 +00:00
|
|
|
neutering them with `me_cleaner` so that Intel ME is disabled during early boot.
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
Injecting vendor files into ROM
|
2022-11-13 21:12:15 +00:00
|
|
|
------------------------------------
|
|
|
|
|
2023-07-06 22:57:57 +00:00
|
|
|
You must determine the correct board name, for your board, based on the list
|
|
|
|
generated when running this command:
|
|
|
|
|
2023-10-20 05:07:57 +00:00
|
|
|
./build roms list
|
2023-07-06 22:57:57 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
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.
|
2023-04-03 02:30:13 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
If you only wish to flash a release rom then the process of injecting the necessary files is quite simple.
|
2023-04-03 02:30:13 +00:00
|
|
|
Run the injection script pointing to the release archive you downloaded:
|
|
|
|
|
2024-06-19 00:21:40 +00:00
|
|
|
./vendor inject libreboot-RELEASE_targetname.tar.xz
|
2023-04-03 02:30:13 +00:00
|
|
|
|
|
|
|
The script can automatically detect the board as long as you do not change the file name.
|
|
|
|
You can then find flash-ready ROMs in `/bin/release/`
|
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
Alternatively, you may patch only a single rom file, but you must supply the
|
|
|
|
correct board target name as alluded to above.
|
2022-11-13 21:12:15 +00:00
|
|
|
For example:
|
|
|
|
|
2023-10-20 05:07:57 +00:00
|
|
|
./vendor inject -r x230_libreboot.rom -b x230_12mb
|
2022-11-13 21:12:15 +00:00
|
|
|
|
|
|
|
Optionally, you can use this script to modify the mac address of the rom with the `-m` flag.
|
|
|
|
For example:
|
|
|
|
|
2023-10-20 05:07:57 +00:00
|
|
|
./vendor inject -r x230_libreboot.rom -b x230_12mb -m 00:f6:f0:40:71:fd
|
2022-11-13 21:12:15 +00:00
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
Check that the files were inserted
|
2023-08-16 22:44:57 +00:00
|
|
|
==================================
|
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
You *must* ensure that the files were inserted.
|
2023-08-16 22:44:57 +00:00
|
|
|
|
|
|
|
Some examples of how to do that in lbmk:
|
|
|
|
|
2023-10-20 05:07:57 +00:00
|
|
|
./update trees -b coreboot utils
|
2023-08-16 22:44:57 +00:00
|
|
|
|
|
|
|
Now you find `cbutitls/default`, which is a directory containing `cbfstool`
|
|
|
|
and `ifdtool`. Do this on your ROM image (`libreboot.rom` in the example
|
|
|
|
below):
|
|
|
|
|
|
|
|
./cbutils/default/cbfstool libreboot.rom print
|
|
|
|
|
2023-10-10 20:37:16 +00:00
|
|
|
You should check that the files were inserted in cbfs, if needed; for example,
|
2023-08-16 22:44:57 +00:00
|
|
|
EC firmware or MRC firmware.
|
|
|
|
|
|
|
|
Next:
|
|
|
|
|
|
|
|
./cbutils/default/ifdtool -x libreboot.rom
|
|
|
|
|
|
|
|
This creates several `.bin` files, one of which says `me` in it (Intel ME).
|
|
|
|
Run hexdump on it:
|
|
|
|
|
|
|
|
hexdump flashregion_2_intel_me.bin
|
|
|
|
|
|
|
|
Check the output. If it's all `0xFF` (all ones) or otherwise isn't a bunch
|
|
|
|
of code, then the Intel ME firmware wasn't inserted.
|
|
|
|
|
|
|
|
You'll note the small size of the Intel ME, e.g. 84KB on sandybridge platforms.
|
2023-10-10 20:37:16 +00:00
|
|
|
This is because lbmk *automatically* neuters it, disabling it during
|
2023-08-16 22:44:57 +00:00
|
|
|
early boot. This is done using `me_cleaner`, which lbmk imports.
|
|
|
|
|
2024-06-19 00:21:40 +00:00
|
|
|
NOTE: the MAC changer makes use of `nvmutil`, which you can read more about in
|
|
|
|
the [nvmutil documentation](nvmutil.md).
|
|
|
|
|
2023-08-16 22:44:57 +00:00
|
|
|
Errata
|
|
|
|
======
|
|
|
|
|
2024-06-19 00:21:40 +00:00
|
|
|
NOTE: As of Libreboot releases from May 2024 onward, the Intel MRC is no longer
|
|
|
|
included for Haswell; MRC is a blob for raminit, but we now provide libre
|
|
|
|
raminit. The following targets no longer exist in the build system:
|
|
|
|
|
|
|
|
* `t440pmrc_12mb` (use `t440plibremrc_12mb` instead)
|
|
|
|
* `t440pbmrc_12mb` (use `t440plibremrc_12mb` instead)
|
|
|
|
* `w541mrc_12mb` (use `w541_12mb` instead)
|
|
|
|
* `w541bmrc_12mb` (use `w541_12mb` instead)
|
|
|
|
* `dell9020sff_12mb` (use `dell9020sff_nri_12mb` instead)
|
|
|
|
* `dell9020sffbmrc` (use `dell9020sff_nri_12mb` instead)
|
|
|
|
* `dell9020mt_12mb` (use `dell9020mt_nri_12mb` instead)
|
|
|
|
* `dell9020mtbmrc` (use `dell9020mt_nri_12mb` instead)
|
|
|
|
|
|
|
|
This is written as errata because some users may still be using older release
|
|
|
|
images but on the newer build system from May 2024 onward; you must use the
|
|
|
|
Libreboot 20240225 release if you want to inject MRC and so on, for these older
|
|
|
|
targets.
|
|
|
|
|
|
|
|
Libreboot's [binary blob reduction policy](../../news/policy.md) is very strict,
|
|
|
|
and states: if a blob can be avoided, it must be avoided. Therefore, the MRC
|
|
|
|
is removed on Haswell and Libreboot will only use the libre raminit (called
|
|
|
|
NRI, short for Native Ram Initialisation).
|