Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
e177de6
Enable verbose bootup debugging and ensure that the serial IO base po…
osresearch Sep 28, 2018
25113cb
Fix coreboot build for kgpe-d16
flammit Nov 10, 2018
7bc90cd
initrd: remove unused keylime-init
merge May 23, 2019
5fa0631
blobs/librem_skl: update get_blobs script
MrChromebox Sep 30, 2019
71a2ddf
blobs/librem_kbl: update get_blobs script
MrChromebox Sep 30, 2019
5d91d6a
Merge pull request #612 from MrChromebox/patch-1
kylerankin Sep 30, 2019
4f0e778
musl-cross: update patch for recent git commits (#617)
osresearch Oct 29, 2019
56aa508
musl-cross: pin to a specific checkout (#617)
osresearch Oct 29, 2019
e5038e6
musl-cross: crossgcc binary changed names (#617)
osresearch Oct 29, 2019
2980eb0
pin msrtools and tpmtotp to current git heads
osresearch Oct 29, 2019
5a4cb4a
blobs/librem_*: update CPU microcode
MrChromebox Nov 13, 2019
0599ce9
config-gui: fix Save Config option
MrChromebox Nov 18, 2019
5dc9b0b
config-gui: mount new /boot after selection
MrChromebox Aug 29, 2019
c14c09b
flash-gui: clear boot signatures after flashing a cleaned ROM
MrChromebox Aug 28, 2019
018279b
Add ability to enter custom password for OEM reset
kylerankin Nov 7, 2019
4d32b4a
functions: fix handling of checksum update fail
MrChromebox Nov 13, 2019
7998e96
functions: check both grub/grub2 dirs for boot files
MrChromebox Nov 13, 2019
858f027
config/coreboot-librem*: drop secondary payloads
MrChromebox Nov 19, 2019
5d28532
board/librem*.config: set default boot device to NVMe
MrChromebox Aug 28, 2019
b9fd6e2
gui-init: update TOTP error prompt
MrChromebox Aug 21, 2019
0dbc748
unseal-hotp: ensure /boot mounted before checking HOTP secret
MrChromebox May 19, 2019
e8fb231
config/coreboot-librem*: disable iGPU IOMMU for Linux payload
MrChromebox Nov 21, 2019
c55c36b
Merge pull request #624 from MrChromebox/purism_resync
kylerankin Nov 25, 2019
ac987a2
Merge pull request #626 from MrChromebox/librem_cfgs
kylerankin Nov 25, 2019
9576a42
Merge pull request #627 from MrChromebox/totp_error_prompt
kylerankin Nov 25, 2019
8110b61
Merge pull request #628 from MrChromebox/hotp_check_boot
kylerankin Nov 25, 2019
4db6fbd
oem-factory-reset: enforce 8-char min on custom password
MrChromebox Nov 20, 2019
bd8d1c3
Merge pull request #632 from MrChromebox/password_min
kylerankin Nov 25, 2019
81df949
oem-factory-reset: Fix description for rebooting when finished
merge Nov 26, 2019
61dd9ce
Merge pull request #633 from merge/anykey_text
tlaurion Nov 28, 2019
81e7c1b
Merge pull request #575 from merge/remove_keylime
tlaurion Nov 28, 2019
b4a647c
Merge pull request #461 from osresearch/debug-linux
tlaurion Nov 28, 2019
7370b75
update musl-cross to 1952975
rofl0r Dec 2, 2019
2874001
Merge pull request #635 from rofl0r/musl-cross-pin
tlaurion Dec 3, 2019
027ae39
modules: add module_tar_opt to allow different strip options
osresearch Dec 3, 2019
8af849c
Merge pull request #618 from osresearch/musl-cross-pin
tlaurion Dec 6, 2019
69f3cc4
libksba: fix qsort handler to sort the string table in a reproducible…
osresearch Jan 7, 2020
6c93a5e
libksba: fix name of patch file
osresearch Jan 8, 2020
791d064
musl-cross-make: replace all cross compilers with musl-cross-make
osresearch Jan 8, 2020
fed0858
circleci: try using the osresearch/musl-cross docker image
osresearch Jan 8, 2020
35ddd3e
circleci: pre-build edk2 for linuxboot
osresearch Jan 8, 2020
c069901
circleci: no tabs!
osresearch Jan 8, 2020
97402ed
circleci: replace -j4 with --load 2
osresearch Jan 8, 2020
31f021e
circleci: enable V=1 to produce more output and avoid timing out
osresearch Jan 8, 2020
1e77a72
circleci: skip linuxboot steps for now
osresearch Jan 8, 2020
6962bfd
lvm2: turn off buffering, which prevents segfault with new musl (#651)
osresearch Jan 9, 2020
a78034d
Merge pull request #649 from osresearch/libksba-reproducibile
tlaurion Jan 15, 2020
a5f4d7d
Merge pull request #652 from osresearch/lvm-segfault
tlaurion Jan 15, 2020
8e4b109
Merge pull request #653 from osresearch/musl-cross-make
tlaurion Jan 15, 2020
23d0126
kexec: update to 2.0.20
flammit Jan 16, 2020
d63d5b4
modules: update to use full commit id
flammit Jan 16, 2020
c3213e1
initrd: update distro keys
flammit Jan 16, 2020
ed3602f
modules: maintain reproducibility by removing rpath
flammit Jan 16, 2020
6b485ed
Merge pull request #655 from flammit/fix-kexec-and-repro
tlaurion Jan 17, 2020
ad2395d
libremkey-hotp-verification: toolchain adjustments
MrChromebox Jan 22, 2020
a3bbdba
blobs/librem*: update hashes for FSP and VBT
MrChromebox Nov 26, 2019
ac71f29
Merge pull request #660 from MrChromebox/update-librem-blobs
kylerankin Jan 22, 2020
92e706b
init: fix invalid GPG_TTY variable
flammit Jan 26, 2020
ceda2d3
Merge pull request #663 from flammit/fix-gpg-tty
tlaurion Jan 28, 2020
4977650
Merge pull request #657 from MrChromebox/fix-librem-hotp
tlaurion Jan 28, 2020
132dcb2
flash-gui: set unset variable USB_FAILED
MrChromebox Jan 29, 2020
bcf522c
Merge pull request #666 from MrChromebox/flash_gui-fixup
kylerankin Jan 29, 2020
f0d85ba
Flash.sh cleanup : flashrom specifics now in board configs (#592)
snmcmillan Feb 19, 2020
6b5adcc
init: load usb modules for devices using USB keyboard
MrChromebox Feb 19, 2020
21faf52
T420 initial support + X220 FBWhiptail Support (#578)
snmcmillan Feb 19, 2020
8e23a54
Merge pull request #677 from MrChromebox/usb_keyboard
tlaurion Feb 19, 2020
28fedf9
modules/libremkey-hotp-verification: make reproducible
MrChromebox Feb 19, 2020
62f180d
Flash.sh cleanup: Fix FLASHROM_OPTIONS -> CONFIG_FLASHROM_OPTIONS to …
Feb 19, 2020
30b098b
gui-init: fix checking librem key card-status
MrChromebox Feb 19, 2020
c684d6b
Merge pull request #681 from tlaurion/flash_sh-config_export_fix
tlaurion Feb 19, 2020
83a67d2
oem-factory-reset: fix GPG key backup filename
MrChromebox Feb 19, 2020
e5c7f73
Merge pull request #682 from MrChromebox/clean_boot_detect_fix
tlaurion Feb 19, 2020
76ac9d2
Merge pull request #683 from MrChromebox/oem-reset-fix
tlaurion Feb 19, 2020
3165ba6
Update coreboot-t420.config
snmcmillan Feb 20, 2020
65e718b
Merge pull request #684 from SebastianMcMillan/patch-2
tlaurion Feb 20, 2020
508034b
Merge pull request #680 from MrChromebox/libremkey_hotp_reproducible
tlaurion Feb 20, 2020
1bd93d6
Eliminate use of CONFIG_USB_BOOT_DEV
MrChromebox Feb 20, 2020
f42b338
Merge pull request #478 from flammit/coreboot-kgpe-d16
tlaurion Feb 22, 2020
ad84c38
Merge pull request #685 from MrChromebox/fix_iso_boot
tlaurion Mar 5, 2020
3f0c5fd
Merge pull request #1 from osresearch/master
Gusher123 Mar 6, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 29 additions & 56 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,88 +2,61 @@ version: 2
jobs:
build:
docker:
- image: osresearch/heads-ubuntu:16.04
- image: osresearch/musl-cross:38e52db
steps:
- run:
name: Install dependencies
command: |
apt update
apt install -y \
build-essential \
zlib1g-dev \
uuid-dev \
libdigest-sha-perl \
libelf-dev \
bc \
bzip2 \
bison \
flex \
git \
gnupg \
iasl \
m4 \
nasm \
patch \
python \
wget \
gnat \
cpio \
ccache \
lzma \

- checkout

- run:
name: Bootstrap make
command: |
make -j4 bootstrap

- run:
name: Bootstrap coreboot-gcc
command: |
./build/make-4.2.1/make \
TOOLCHAIN=/home/builder/heads \
V=1 \
BOARD=qemu-coreboot \
coreboot-gcc
# linuxboot steps need something to pass in the kernel header path
# skipping for now
# - run:
# name: qemu-linuxboot-edk2
# command: |
# ./build/make-4.2.1/make \
# CROSS=/cross/bin/x86_64-linux-musl- \
# BOARD=qemu-linuxboot \
# `/bin/pwd`/build/linuxboot-git/build/qemu/.configured \
# # Run first to avoid too many processes
#
# - run:
# name: qemu-linuxboot
# command: |
# ./build/make-4.2.1/make \
# CROSS=/cross/bin/x86_64-linux-musl- \
# --load 2 \
# V=1 \
# BOARD=qemu-linuxboot \
#
# - store-artifacts:
# path: build/qemu-linuxboot/linuxboot.rom
# - store-artifacts:
# path: build/qemu-linuxboot/hashes.txt


- run:
name: qemu-coreboot
command: |
./build/make-4.2.1/make \
TOOLCHAIN=/home/builder/heads \
CROSS=/cross/bin/x86_64-linux-musl- \
--load 2 \
V=1 \
-j4 \
BOARD=qemu-coreboot \

- store-artifacts:
path: build/qemu-coreboot/coreboot.rom
- store-artifacts:
path: build/qemu-coreboot/hashes.txt


- run:
name: qemu-linuxboot
command: |
./build/make-4.2.1/make \
TOOLCHAIN=/home/builder/heads \
V=1 \
-j4 \
BOARD=qemu-linuxboot \

- store-artifacts:
path: build/qemu-linuxboot/linuxboot.rom
- store-artifacts:
path: build/qemu-linuxboot/hashes.txt


- run:
name: x230
command: |
./build/make-4.2.1/make \
TOOLCHAIN=/home/builder/heads \
-j4 \
CROSS=/cross/bin/x86_64-linux-musl- \
--load 2 \
V=1 \
BOARD=x230 \

Expand Down
21 changes: 12 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,13 @@ SHELL := /bin/bash
# be defined prior to any other module.
include modules/musl-cross

musl_dep := musl
heads_cc := $(INSTALL)/bin/musl-gcc \
musl_dep := musl-cross
heads_cc := $(CROSS)gcc \
-fdebug-prefix-map=$(pwd)=heads \
-gno-record-gcc-switches \
-D__MUSL__ \
-I$(INSTALL)/include \
-L$(INSTALL)/lib \

CROSS_TOOLS_NOCC := \
AR="$(CROSS)ar" \
Expand Down Expand Up @@ -145,8 +147,9 @@ all:
FORCE:

# Make helpers to operate on lists of things
# Prefix is "smart" and doesn't add the prefix for absolute file paths
define prefix =
$(foreach _, $2, $1$_)
$(foreach _, $2, $(if $(patsubst /%,,$_),$1$_,$_))
endef
define map =
$(foreach _,$2,$(eval $(call $1,$_)))
Expand Down Expand Up @@ -264,17 +267,18 @@ define define_module =
# Unpack the tar file and touch the canary so that we know
# that the files are all present
$(build)/$($1_base_dir)/.canary: $(packages)/.$1-$($1_version)_verify
tar -xf "$(packages)/$($1_tar)" -C "$(build)"
mkdir -p "$$(dir $$@)"
tar -xf "$(packages)/$($1_tar)" $(or $($1_tar_opt),--strip 1) -C "$$(dir $$@)"
if [ -r patches/$1-$($1_version).patch ]; then \
( cd $(build)/$($1_base_dir) ; patch -p1 ) \
( cd $$(dir $$@) ; patch -p1 ) \
< patches/$1-$($1_version).patch \
|| exit 1 ; \
fi
if [ -d patches/$1-$($1_version) ] && \
[ -r patches/$1-$($1_version) ] ; then \
for patch in patches/$1-$($1_version)/*.patch ; do \
echo "Applying patch file : $$$$patch " ; \
( cd $(build)/$($1_base_dir) ; patch -p1 ) \
( cd $$(dir $$@) ; patch -p1 ) \
< $$$$patch \
|| exit 1 ; \
done ; \
Expand Down Expand Up @@ -409,6 +413,7 @@ endef

# Only some modules have binaries that we install
# Shouldn't this be specified in the module file?
#bin_modules-$(CONFIG_MUSL) += musl-cross
bin_modules-$(CONFIG_KEXEC) += kexec
bin_modules-$(CONFIG_TPMTOTP) += tpmtotp
bin_modules-$(CONFIG_PCIUTILS) += pciutils
Expand Down Expand Up @@ -450,8 +455,7 @@ endif
$(COREBOOT_UTIL_DIR)/cbmem/cbmem \
$(COREBOOT_UTIL_DIR)/superiotool/superiotool \
$(COREBOOT_UTIL_DIR)/inteltool/inteltool \
: $(build)/$(coreboot_base_dir)/.canary \
$(build)/$(musl_dir)/.build
: $(build)/$(coreboot_base_dir)/.canary
+$(call do,MAKE,$(notdir $@),\
$(MAKE) -C "$(dir $@)" $(CROSS_TOOLS) \
)
Expand Down Expand Up @@ -563,7 +567,6 @@ modules.clean:
real.clean:
for dir in \
$(module_dirs) \
$(musl_dir) \
$(kernel_headers) \
; do \
if [ ! -z "$$dir" ]; then \
Expand Down
Binary file modified blobs/dev.cpio
Binary file not shown.
15 changes: 8 additions & 7 deletions blobs/librem_kbl/get_blobs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
# depends on : wget sha256sum gunzip

# Purism source
PURISM_SOURCE="https://source.puri.sm/coreboot/releases/raw/master"
RELEASES_GIT_HASH="9828ffc0fbe7e0da65f10fe5e14f68f0ef061d5d"
PURISM_SOURCE="https://source.puri.sm/coreboot/releases/raw/${RELEASES_GIT_HASH}"

# Librem 13 v4 and Librem 15 v4 binary blob hashes
KBL_UCODE_SHA="a420274eecca369fcca465cc46725d61c0ae8ca2e18f201b1751faf9e081fb2e"
KBL_UCODE_SHA="bb07f0f77abe08e553f85b99d18fa129f991bf3613cf73d77c4f0ece87dd251e"
KBL_DESCRIPTOR_SHA="642ca36f52aabb5198b82e013bf64a73a5148693a58376fffce322a4d438b524"
KBL_ME_SHA="0eec2e1135193941edd39d0ec0f463e353d0c6c9068867a2f32a72b64334fb34"
KBL_FSPM_SHA="5da3ad7718eb3f6700fb9d97be988d9c8bdd2d8b5910273a80928c49122d5b2d"
KBL_FSPS_SHA="c81ffa40df0b6cd6cfde4f476d452a1f6f2217bc96a3b98a4fa4a037ee7039cf"
KBL_VBT_SHA="0ba40c1b8c0fb030a0e1a789eda8b2a7369339a410ad8c4620719e451ea69b98"
KBL_FSPM_SHA="b285fc2240df7fee4fa069444cc2be2ebf5ea70af21b722b0e3dd102321b4877"
KBL_FSPS_SHA="223d0f3d3ff28c46a3ac33442385ffedefe2d3063774784d4fef432013568019"
KBL_VBT_SHA="45135459f7cbc06675fec5688479c2e2f4335d77c61bb58e4016d32ba7daa9d0"

# cbfstool, ifdtool, coreboot image from Purism repo
CBFSTOOL_FILE="cbfstool.gz"
Expand All @@ -26,7 +27,7 @@ IFDTOOL_BIN="./ifdtool"
COREBOOT_IMAGE="coreboot-l13v4.rom"
COREBOOT_IMAGE_FILE="$COREBOOT_IMAGE.gz"
COREBOOT_IMAGE_URL="$PURISM_SOURCE/librem_13v4/$COREBOOT_IMAGE_FILE"
COREBOOT_IMAGE_SHA="4491efd0a8b2de5a88fd7491a5d2605884ed956c3d271d7761906269b4cfb601"
COREBOOT_IMAGE_SHA="5a7548e2742289fa66339f817f4247599d51bc7a5a6a9e887efd39fcf7f9e831"

die () {
local msg=$1
Expand Down Expand Up @@ -121,4 +122,4 @@ rm -f $COREBOOT_IMAGE >/dev/null 2>&1
rm -f *.gz >/dev/null 2>&1

echo ""
echo "All blobs have been verified and are ready for use"
echo "All blobs have been verified and are ready for use"
19 changes: 10 additions & 9 deletions blobs/librem_skl/get_blobs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
# depends on : wget sha256sum gunzip

# Purism source
PURISM_SOURCE="https://source.puri.sm/coreboot/releases/raw/master"
RELEASES_GIT_HASH="9828ffc0fbe7e0da65f10fe5e14f68f0ef061d5d"
PURISM_SOURCE="https://source.puri.sm/coreboot/releases/raw/${RELEASES_GIT_HASH}"

# Librem 13 v2/v3 and Librem 15 v3 binary blob hashes
SKL_UCODE_SHA="9c84936df700d74612a99e6ab581640ecf423d25a0b74a1ea23a6d9872349213"
SKL_UCODE_SHA="e528d2ccc5d76cd04bfabb556a3fbb70b93d9aca43e291e0f0104fbaae5720fd"
SKL_DESCRIPTOR_SHA="642ca36f52aabb5198b82e013bf64a73a5148693a58376fffce322a4d438b524"
SKL_ME_SHA="cf06d3eb8b24490a1ab46fd988b6cef822e5347cd6a2e92bc332cb4a376eb8bc"
SKL_FSPM_SHA="5da3ad7718eb3f6700fb9d97be988d9c8bdd2d8b5910273a80928c49122d5b2d"
SKL_FSPS_SHA="c81ffa40df0b6cd6cfde4f476d452a1f6f2217bc96a3b98a4fa4a037ee7039cf"
SKL_VBT_SHA="0ba40c1b8c0fb030a0e1a789eda8b2a7369339a410ad8c4620719e451ea69b98"
SKL_FSPM_SHA="5f402416894c324b6cbf8cba85068ac2c3de9be8dd4f37fae3af6cfed7acc38e"
SKL_FSPS_SHA="223d0f3d3ff28c46a3ac33442385ffedefe2d3063774784d4fef432013568019"
SKL_VBT_SHA="45135459f7cbc06675fec5688479c2e2f4335d77c61bb58e4016d32ba7daa9d0"

# cbfstool, ifdtool, coreboot image from Purism repo
CBFSTOOL_FILE="cbfstool.gz"
Expand All @@ -23,10 +24,10 @@ IFDTOOL_URL="$PURISM_SOURCE/tools/$IFDTOOL_FILE"
IFDTOOL_SHA="08228ece4968794499ebd49a851f7d3f7f1b81352da8cd6e0c7916ac931a7d72"
IFDTOOL_BIN="./ifdtool"

COREBOOT_IMAGE="coreboot-l13v3.rom"
COREBOOT_IMAGE="coreboot-l13v2.rom"
COREBOOT_IMAGE_FILE="$COREBOOT_IMAGE.gz"
COREBOOT_IMAGE_URL="$PURISM_SOURCE/librem_13v3/$COREBOOT_IMAGE_FILE"
COREBOOT_IMAGE_SHA="34276a7b82624cfb29aed688df7f2b4e747a9e951196e376732e972c8575ece6"
COREBOOT_IMAGE_URL="$PURISM_SOURCE/librem_13v2/$COREBOOT_IMAGE_FILE"
COREBOOT_IMAGE_SHA="c703e0e705554bc7eb90814ae933d4372c0042927a6bbd7f27024cb99a8993d6"

die () {
local msg=$1
Expand Down Expand Up @@ -121,4 +122,4 @@ rm -f $COREBOOT_IMAGE >/dev/null 2>&1
rm -f *.gz >/dev/null 2>&1

echo ""
echo "All blobs have been verified and are ready for use"
echo "All blobs have been verified and are ready for use"
65 changes: 65 additions & 0 deletions blobs/t420/extract.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/bin/bash

function printusage {
echo "Usage: $0 -f <romdump> -m <me_cleaner>(optional) -i <ifdtool>(optional)"
exit 0
}

BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ "$#" -eq 0 ]; then printusage; fi

while getopts ":f:m:i:" opt; do
case $opt in
f)
FILE="$OPTARG"
;;
m)
if [ -x "$OPTARG" ]; then
MECLEAN="$OPTARG"
fi
;;
i)
if [ -x "$OPTARG" ]; then
IFDTOOL="$OPTARG"
fi
;;
esac
done

if [ -z "$MECLEAN" ]; then
MECLEAN=`command -v $BLOBDIR/../../build/coreboot-*/util/me_cleaner/me_cleaner.py 2>&1`
if [ -z "$MECLEAN" ]; then
echo "me_cleaner.py required but not found or specified with -m. Aborting."
exit 1;
fi
fi

if [ -z "$IFDTOOL" ]; then
IFDTOOL=`command -v $BLOBDIR/../../build/coreboot-*/util/ifdtool/ifdtool 2>&1`
if [ -z "$IFDTOOL" ]; then
echo "ifdtool required but not found or specified with -m. Aborting."
exit 1;
fi
fi

echo "FILE: $FILE"
echo "ME: $MECLEAN"
echo "IFD: $IFDTOOL"

bioscopy=$(mktemp)
extractdir=$(mktemp -d)

cp "$FILE" $bioscopy

cd "$extractdir"
$IFDTOOL -x $bioscopy
cp "$extractdir/flashregion_3_gbe.bin" "$BLOBDIR/gbe.bin"
$MECLEAN -O "$BLOBDIR/me.bin" -r -t "$extractdir/flashregion_2_intel_me.bin"
$IFDTOOL -n "$BLOBDIR/layout.txt" $bioscopy
$IFDTOOL -x $bioscopy.new
cp "$extractdir/flashregion_0_flashdescriptor.bin" "$BLOBDIR/ifd.bin"

rm "$bioscopy"
rm "$bioscopy.new"
rm -r "$extractdir"
4 changes: 4 additions & 0 deletions blobs/t420/layout.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
00000000:00000fff fd
00018000:007fffff bios
00003000:00017fff me
00001000:00002fff gbe
29 changes: 29 additions & 0 deletions blobs/t420/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
To build for T420, we need to have the following files in this folder:
* `me.bin` - ME binary that has been stripped and truncated with me_cleaner
* `gbe.bin` - Network card blob from the original firmware
* `ifd.bin` - Flash layout file has been provided as text

To get the binaries, start with a copy of the original Lenovo firmware image.
If you do not have one already, you can read one out from the laptops SPI flash with flashrom

```
flashrom -p <programmer> -r original.bin
```

Set `<programmer>` to the flashrom programmer type that you will use (for example, `linux_spi:dev=/dev/spidev0.0` on a Raspberry Pi).

Once you have the image, the provided extraction script will extract the files needed.

```
./extract.sh -f <romdump>
```

Use the options '-m' and '-i' to provide me_cleaner and ifdtool if they can not be located automatically.

The flash layout will be automatically adjusted and the ME image cleaned and truncated.

You can now compile the image with:

```
make BOARD=t420
```
Loading