В данной статье я хочу описать процесс компиляции и установки coreboot на ноутбук Lenovo Thinkpad t440p.
В данном случае coreboot нужен был для удаления whitelist'а для wi-fi адаптеров в ноутбуке, хотя это можно сделать и проще, но я выбрал именно такой путь.
Для компиляции и установки coreboot нам понадобится программатор с клипсой и другое устройсво, под управлением какого-либо дистрибутива линукс(в моем случае - debian).
Приступим к процессу:
Для начала, необходимо разобрать ноутбук, чтобы получить доступ к микросхемам биоса(в данном ноутбуке их 2)
На рабочем устройстве устанавливаем необходимые программы для компиляции прошивки и работы с программатором, работа ведется из-под Ubuntu 22.04
После этого создаем рабочую папку, где будут хранится файлы для создания прошивки (в моем случае, папка называется t440p)
Переходим в данную папку
Присоеденяем клипсу к верхнему чипу (на 4MB) и пробуем считать информацию с чипа
Если всё нормально, делаем бекап образа с данного чипа
Аналогичную операцию делаем с нижним чипом (на 8MB).
Объеденим 2 образа в 1
Переходим в домашнюю директорию и скачиваем coreboot
Переходим в директорию с coreboot
Скачиваем дополнительные модули
Собираем ifdtool
Берем блобы из оригинального биоса, выполняя последовательно слебующие команды:
Получаем mrc.bin, выполняя следующие команды:
Конфигурируем образ coreboot (для облегчения задачи, я взял готовый конфиг с полезной нагрузкой Tianocore - альтернатива UEFI)
В открывшеея окно вставляем следующие строки:
Сохраняем изменения и создаем конфиг
В открывшемя окне, жмем F9 (либо, можно изменить конфигурцию под ваши требования)
Компилируем прошивку (CPUS=16 - число потоков)
Необходимо разбить образ в 12MB на 2 образа по 8MB и 4MB
Снова присоеденяем программатор, считываем и прошивем оба чипа соотвествующими образами следующей командой(команду выполнить для обоих чипов):
После этого собираем ноутбук и проверяем работоспособность.
Для тех, кто не хочет собирать образ coreboot самостоятельно (а я этот процесс крайне не рекомендую, т.к. он съедает много нервов и времени), есть более простой способ установить coreboot + SeaBIOS - https://github.com/merge/skulls
В данном случае coreboot нужен был для удаления whitelist'а для wi-fi адаптеров в ноутбуке, хотя это можно сделать и проще, но я выбрал именно такой путь.
Для компиляции и установки coreboot нам понадобится программатор с клипсой и другое устройсво, под управлением какого-либо дистрибутива линукс(в моем случае - debian).
Приступим к процессу:
Для начала, необходимо разобрать ноутбук, чтобы получить доступ к микросхемам биоса(в данном ноутбуке их 2)
На рабочем устройстве устанавливаем необходимые программы для компиляции прошивки и работы с программатором, работа ведется из-под Ubuntu 22.04
Код:
sudo apt install flashrom build-essential zlib1g-dev uuid-dev libdigest-sha-perl libelf-dev bc bzip2 bison flex git gnupg gawk iasl m4 nasm patch python python2 python3 wget gnat cpio ccache pkg-config cmake libusb-1.0-0-dev autoconf texinfo ncurses-dev doxygen graphviz udev libudev1 libudev-dev automake libtool rsync innoextract sudo libssl-dev device-tree-compiler u-boot-tools sharutils e2fsprogs parted curl unzip imagemagick libncurses5-dev
После этого создаем рабочую папку, где будут хранится файлы для создания прошивки (в моем случае, папка называется t440p)
Код:
mkdir ~/<название_папки>/
Переходим в данную папку
Код:
cd ~/<название_папки>/
Присоеденяем клипсу к верхнему чипу (на 4MB) и пробуем считать информацию с чипа
Код:
sudo flashrom -p ch341a_spi
Код:
sudo flashrom --programmer ch341a_spi -r <название_образа_чипа>.bin
Объеденим 2 образа в 1
Код:
cat <название_образа_чипа_8MB>.bin <название_образа_чипа_4MB>.bin > <название_образа_12MB>.rom
Переходим в домашнюю директорию и скачиваем coreboot
Код:
git clone https://review.coreboot.org/coreboot
Код:
cd ~/coreboot
Код:
git submodule update --init --checkout
Код:
cd util/ifdtool && make
Код:
./ifdtool -x ~/<название_рабочей_папки>/<название_образа_12MB>.rom
mv flashregion_0_flashdescriptor.bin ~/<название_рабочей_папки>/ifd.bin
mv flashregion_2_intel_me.bin ~/<название_рабочей_папки>/me.bin
mv flashregion_3_gbe.bin ~/<название_рабочей_папки>/gbe.bin
Код:
cd ~/coreboot
make -C util/cbfstool
cd util/chromeos
./crosfirmware.sh peppy
../cbfstool/cbfstool coreboot-*.bin extract -f mrc.bin -n mrc.bin -r RO_SECTION
mv mrc.bin ~/<название_рабочей_папки>/mrc.bin
Код:
cd ~/coreboot
nano .config
Код:
CONFIG_USE_OPTION_TABLE=y
CONFIG_TIMESTAMPS_ON_CONSOLE=y
CONFIG_VENDOR_LENOVO=y
CONFIG_CBFS_SIZE=0x200000
CONFIG_LINEAR_FRAMEBUFFER_MAX_WIDTH=2560
CONFIG_LINEAR_FRAMEBUFFER_MAX_HEIGHT=1600
CONFIG_IFD_BIN_PATH="/home/<имя_пользователя>/<название_рабочей_папки>/ifd.bin"
CONFIG_ME_BIN_PATH="/home/<имя_пользователя>/<название_рабочей_папки>/me.bin"
CONFIG_GBE_BIN_PATH="/home/<имя_пользователя>/<название_рабочей_папки>/gbe.bin"
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
CONFIG_HAVE_IFD_BIN=y
CONFIG_BOARD_LENOVO_THINKPAD_T440P=y
CONFIG_PCIEXP_L1_SUB_STATE=y
CONFIG_PCIEXP_CLK_PM=y
CONFIG_HAVE_MRC=y
CONFIG_MRC_FILE="/home/<имя_пользователя>/<название_рабочей_папки>/mrc.bin"
CONFIG_UART_PCI_ADDR=0x0
CONFIG_VALIDATE_INTEL_DESCRIPTOR=y
CONFIG_H8_SUPPORT_BT_ON_WIFI=y
CONFIG_HAVE_ME_BIN=y
CONFIG_CHECK_ME=y
CONFIG_USE_ME_CLEANER=y
CONFIG_HAVE_GBE_BIN=y
CONFIG_SUBSYSTEM_VENDOR_ID=0x0000
CONFIG_SUBSYSTEM_DEVICE_ID=0x0000
CONFIG_SMMSTORE_SIZE=0x40000
CONFIG_DRIVERS_PS2_KEYBOARD=y
CONFIG_TPM_DEACTIVATE=y
CONFIG_SECURITY_CLEAR_DRAM_ON_REGULAR_BOOT=y
CONFIG_POST_IO_PORT=0x80
CONFIG_PAYLOAD_TIANOCORE=y
CONFIG_TIANOCORE_BOOTSPLASH_IMAGE=y
CONFIG_TIANOCORE_BOOTSPLASH_FILE="/home/<имя_пользователя>/<название_рабочей_папки>/bootsplash.bmp"
Код:
cd ~/coreboot
make nconfig
Компилируем прошивку (CPUS=16 - число потоков)
Код:
make crossgcc-i386 CPUS=16
make
Код:
cd ~/coreboot/build
dd if=coreboot.rom of=<название_образа_чипа_8MB_coreboot>.rom bs=1M count=8
dd if=coreboot.rom of=<название_образа_чипа_4MB_coreboot>.rom bs=1M skip=8
Код:
sudo flashrom --programmer ch341a_spi -w <название_образа_чипа_coreboot>.rom
После этого собираем ноутбук и проверяем работоспособность.
Для тех, кто не хочет собирать образ coreboot самостоятельно (а я этот процесс крайне не рекомендую, т.к. он съедает много нервов и времени), есть более простой способ установить coreboot + SeaBIOS - https://github.com/merge/skulls
Последнее редактирование: