mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-19 21:17:55 +00:00
T420 initial support + X220 FBWhiptail Support (#578)
* Add support for the Lenovo ThinkPad T420 and X220. * Fix the autodetection of ifdtool and me_cleaner. * Enable FBWhiptail mode for X220 and T420 * Decreased CBFS size to fix 50 seconds boot delay problems
This commit is contained in:
parent
f0d85ba2d7
commit
21faf524b9
65
blobs/t420/extract.sh
Executable file
65
blobs/t420/extract.sh
Executable file
@ -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
blobs/t420/layout.txt
Normal file
4
blobs/t420/layout.txt
Normal file
@ -0,0 +1,4 @@
|
||||
00000000:00000fff fd
|
||||
00018000:007fffff bios
|
||||
00003000:00017fff me
|
||||
00001000:00002fff gbe
|
29
blobs/t420/readme.md
Normal file
29
blobs/t420/readme.md
Normal file
@ -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
|
||||
```
|
@ -5,6 +5,8 @@ function printusage {
|
||||
exit 0
|
||||
}
|
||||
|
||||
BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
if [ "$#" -eq 0 ]; then printusage; fi
|
||||
|
||||
while getopts ":f:m:i:" opt; do
|
||||
@ -26,7 +28,7 @@ while getopts ":f:m:i:" opt; do
|
||||
done
|
||||
|
||||
if [ -z "$MECLEAN" ]; then
|
||||
MECLEAN=`command -v me_cleaner.py 2>&1`
|
||||
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;
|
||||
@ -34,7 +36,7 @@ if [ -z "$MECLEAN" ]; then
|
||||
fi
|
||||
|
||||
if [ -z "$IFDTOOL" ]; then
|
||||
IFDTOOL=`command -v ifdtool 2>&1`
|
||||
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;
|
||||
@ -47,7 +49,6 @@ echo "IFD: $IFDTOOL"
|
||||
|
||||
bioscopy=$(mktemp)
|
||||
extractdir=$(mktemp -d)
|
||||
BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
cp "$FILE" $bioscopy
|
||||
|
||||
|
37
boards/t420/t420.config
Normal file
37
boards/t420/t420.config
Normal file
@ -0,0 +1,37 @@
|
||||
# Configuration for a T420 running Qubes and other OS, T420 is identical to X230 on the Linux Side of things.
|
||||
export CONFIG_COREBOOT=y
|
||||
CONFIG_COREBOOT_CONFIG=config/coreboot-t420.config
|
||||
CONFIG_LINUX_CONFIG=config/linux-x230.config
|
||||
|
||||
CONFIG_CRYPTSETUP=y
|
||||
CONFIG_FLASHROM=y
|
||||
CONFIG_FLASHTOOLS=y
|
||||
CONFIG_GPG2=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_UTIL_LINUX=y
|
||||
CONFIG_LVM2=y
|
||||
CONFIG_MBEDTLS=y
|
||||
CONFIG_PCIUTILS=y
|
||||
CONFIG_POPT=y
|
||||
CONFIG_QRENCODE=y
|
||||
CONFIG_TPMTOTP=y
|
||||
CONFIG_DROPBEAR=y
|
||||
|
||||
CONFIG_CAIRO=y
|
||||
CONFIG_FBWHIPTAIL=y
|
||||
|
||||
CONFIG_LINUX_USB=y
|
||||
CONFIG_LINUX_E1000E=y
|
||||
|
||||
export CONFIG_TPM=y
|
||||
export CONFIG_BOOTSCRIPT=/bin/gui-init
|
||||
export CONFIG_BOOT_REQ_HASH=n
|
||||
export CONFIG_BOOT_REQ_ROLLBACK=n
|
||||
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on intel_iommu=igfx_off"
|
||||
export CONFIG_BOOT_KERNEL_REMOVE="quiet"
|
||||
export CONFIG_BOOT_DEV="/dev/sda1"
|
||||
export CONFIG_BOOT_GUI_MENU_NAME="ThinkPad T420 Heads Boot Menu"
|
||||
export CONFIG_USB_BOOT_DEV="/dev/sdb1"
|
||||
export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0"
|
||||
export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0"
|
||||
export FLASHROM_OPTIONS='--force --noverify-all -p internal:laptop=force_I_want_a_brick,ich_spi_mode=hwseq --ifd --image bios'
|
@ -1,12 +1,12 @@
|
||||
# Configuration for a x220 running Qubes and other OS
|
||||
# The Linux configuration is close enough to the x230
|
||||
# Configuration for a x220 running Qubes and other OS, X220 is identical to X230 on the Linux Side of things.
|
||||
export CONFIG_COREBOOT=y
|
||||
CONFIG_COREBOOT_CONFIG=config/coreboot-x220.config
|
||||
CONFIG_LINUX_CONFIG=config/linux-x230.config
|
||||
|
||||
CONFIG_CRYPTSETUP=y
|
||||
CONFIG_FLASHROM=y
|
||||
CONFIG_GPG=y
|
||||
CONFIG_FLASHTOOLS=y
|
||||
CONFIG_GPG2=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_UTIL_LINUX=y
|
||||
CONFIG_LVM2=y
|
||||
@ -17,15 +17,21 @@ CONFIG_QRENCODE=y
|
||||
CONFIG_TPMTOTP=y
|
||||
CONFIG_DROPBEAR=y
|
||||
|
||||
CONFIG_CAIRO=y
|
||||
CONFIG_FBWHIPTAIL=y
|
||||
|
||||
CONFIG_LINUX_USB=y
|
||||
CONFIG_LINUX_E1000E=y
|
||||
|
||||
export CONFIG_BOOTSCRIPT=/bin/generic-init
|
||||
export CONFIG_TPM=y
|
||||
export CONFIG_BOOTSCRIPT=/bin/gui-init
|
||||
export CONFIG_BOOT_REQ_HASH=n
|
||||
export CONFIG_BOOT_REQ_ROLLBACK=n
|
||||
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on"
|
||||
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on intel_iommu=igfx_off"
|
||||
export CONFIG_BOOT_KERNEL_REMOVE="quiet"
|
||||
export CONFIG_BOOT_DEV="/dev/sda1"
|
||||
export CONFIG_BOOT_GUI_MENU_NAME="ThinkPad X220 Heads Boot Menu"
|
||||
export CONFIG_USB_BOOT_DEV="/dev/sdb1"
|
||||
export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0"
|
||||
export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0"
|
||||
export FLASHROM_OPTIONS='--force --noverify-all -p internal:laptop=force_I_want_a_brick,ich_spi_mode=hwseq --ifd --image bios'
|
||||
|
25
config/coreboot-t420.config
Normal file
25
config/coreboot-t420.config
Normal file
@ -0,0 +1,25 @@
|
||||
CONFIG_LOCALVERSION="heads"
|
||||
CONFIG_ANY_TOOLCHAIN=y
|
||||
# CONFIG_INCLUDE_CONFIG_FILE is not set
|
||||
# CONFIG_COLLECT_TIMESTAMPS is not set
|
||||
CONFIG_USE_BLOBS=y
|
||||
CONFIG_MEASURED_BOOT=y
|
||||
CONFIG_VENDOR_LENOVO=y
|
||||
CONFIG_CBFS_SIZE=0x700000
|
||||
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
|
||||
CONFIG_HAVE_IFD_BIN=y
|
||||
CONFIG_HAVE_ME_BIN=y
|
||||
CONFIG_HAVE_GBE_BIN=y
|
||||
CONFIG_IFD_BIN_PATH="../../blobs/t420/ifd.bin"
|
||||
CONFIG_ME_BIN_PATH="../../blobs/t420/me.bin"
|
||||
CONFIG_BOARD_LENOVO_T420=y
|
||||
CONFIG_DRIVERS_PS2_KEYBOARD=y
|
||||
CONFIG_NO_POST=y
|
||||
CONFIG_GBE_BIN_PATH="../../blobs/t420/gbe.bin"
|
||||
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
|
||||
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5=y
|
||||
CONFIG_PAYLOAD_LINUX=y
|
||||
CONFIG_PAYLOAD_FILE="../../build/t420/bzImage"
|
||||
CONFIG_LINUX_COMMAND_LINE="quiet"
|
||||
CONFIG_LINUX_INITRD="../../build/t420/initrd.cpio.xz"
|
||||
CONFIG_DEBUG_SMM_RELOCATION=y
|
@ -5,7 +5,7 @@ CONFIG_ANY_TOOLCHAIN=y
|
||||
CONFIG_USE_BLOBS=y
|
||||
CONFIG_MEASURED_BOOT=y
|
||||
CONFIG_VENDOR_LENOVO=y
|
||||
CONFIG_CBFS_SIZE=0x7e8000
|
||||
CONFIG_CBFS_SIZE=0x700000
|
||||
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
|
||||
CONFIG_HAVE_IFD_BIN=y
|
||||
CONFIG_HAVE_ME_BIN=y
|
||||
@ -15,12 +15,11 @@ CONFIG_ME_BIN_PATH="../../blobs/x220/me.bin"
|
||||
CONFIG_BOARD_LENOVO_X220=y
|
||||
CONFIG_DRIVERS_PS2_KEYBOARD=y
|
||||
CONFIG_NO_POST=y
|
||||
CONFIG_CHECK_ME=y
|
||||
CONFIG_GBE_BIN_PATH="../../blobs/x220/gbe.bin"
|
||||
#CONFIG_DEBUG_TPM=y
|
||||
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
|
||||
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5=y
|
||||
CONFIG_PAYLOAD_LINUX=y
|
||||
CONFIG_PAYLOAD_FILE="../../build/x220/bzImage"
|
||||
CONFIG_LINUX_COMMAND_LINE="quiet"
|
||||
CONFIG_LINUX_COMMAND_LINE="intel_iommu=igfx_off quiet loglevel=3"
|
||||
CONFIG_LINUX_INITRD="../../build/x220/initrd.cpio.xz"
|
||||
CONFIG_DEBUG_SMM_RELOCATION=y
|
||||
|
Loading…
Reference in New Issue
Block a user