Перейти к содержанию

Инструкция по сборке Coreboot для ThinkPad T60 с видеокартой ATI

Для ноутбуков ThinkPad T60 с графикой от Intel есть готовый файл прошивки от проекта Libreboot (дистрибутив Coreboot без проприетарных блобов), но в случае с T60 с ATI нужно ещё правильно добавить поддержку VGA BIOS из заводской прошивки, а также для каждого ноутбука T60 нужно собирать свою Coreboot прошивку.

Эта инструкция описывает как получить нужный бинарник для ATI графики из заводской BIOS прошивки и собрать Coreboot с его поддержкой.

В конце вы получите прошивку Coreboot на ваш T60, использующий VGA BIOS для ATI, SeaBIOS в качестве загрузчика, последний микрокод для процессора, отсутствие Intel ME и полное избавление от wifi whitelist, а также других ограничений.

Но ваша система всё равно будет поддерживать только 3 Гб ОЗУ, это не лимит BIOS, а лимит чипсета.

ThinkPad T60 рядом с X230
ThinkPad T60 рядом с X230

T60 рядом с X230
ThinkPad T60, открытый

Что будет если вставить стороннюю WiFi карту до прошивки Coreboot
Что будет если вставить стороннюю WiFi карту до прошивки Coreboot - система не загрузится.

Что потребуется:

  • ThinkPad T60 с видеокартой ATI (X1300/X1400), заводским BIOS и GNU/Linux системой
  • Программатор (например CH341A)
  • Второй компьютер, которым будем шить BIOS чип, тоже желательно на GNU/Linux

Получение бинарника

Нам нужно получить PCI ID видеокарты и записать бинарник с VGA BIOS. Для этого нужно загрузиться в GNU/Linux систему на T60.

Получение PCI ID

Введите команду:

sudo lspci -nn

Найдите в списке VGA compatible controller и запишите PCI ID устройства. Пример вывода для ATI X1300:

VGA compatible controller [0300]: RV515/M52 [Mobility Radeon X1300] [1002:7149]

То есть [1002:7149] будет PCI ID вашей видеокарты. Эти числа нужно запомнить, они пригодятся для создания config файла.

Получение VGA BIOS

Получаем адрес где хранится VGA BIOS прошивка:

sudo cat /proc/iomem | grep 'Video ROM'

Теперь получим VGA BIOS при помощи команды dd. За место startaddr и lastaddr напишите вывод адреса из предыдущей команды:

sudo dd if=/dev/mem of=vgabios.rom bs=1c skip=$((0xstartaddr)) count=$((0xlastaddr-0xstartaddr+1))

Вы должны получить vgabios.rom размером примерно 64 КиБ.

Проверка полученного образа

Для проверки полученного VGA BIOS воспользуемся утилитой romheaders из пакета fcode-utils

Для владельцев ArchLinux

Для ArchLinux пакет fcode-utils ставится из AUR.

romheaders vgabios.rom

Теперь сморим на вывод Vendor ID и Device ID. Они должны совпадать с PCI ID, которые мы получили ранее. Также в Class code должно быть написано VGA Display controller.

Если всё совпадает, то можете скопировать ваш vgabios.rom на компьютер, с которого вы будете перешивать ваш T60.

Пример вывода команды
Image 1:

PCI Expansion ROM Header:
Signature: 0x55aa (Ok)
CPU unique data: 0x80 0xe9 0xa9 0xe3 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30
Pointer to PCI Data Structure: 0x0040

PCI Data Structure:
Signature: 0x50434952 'PCIR' (Ok)
Vendor ID: 0x8086
Device ID: 0x27a2
Vital Product Data: 0x0000
PCI Data Structure Length: 0x0018 (24 bytes)
PCI Data Structure Revision: 0x00
Class Code: 0x030000 (VGA Display controller)
Image Length: 0x0080 blocks (65536 bytes)
Revision Level of Code/Data: 0x0000
Code Type: 0x00 (Intel x86)
Last-Image Flag: 0x80 (last image in rom)
Reserved: 0x0000

Platform specific data for x86 compliant option rom:
Initialization Size: 0x80 (65536 bytes)
Entry point for INIT function: 0xe3af

Подготовка к сборке Coreboot

Сборка Coreboot должна выполняться на машине, с которой вы будете прошивать T60. В качестве примера воспользуемся официальной документацией.

Устанавливаем необходимые пакеты:

Ubuntu/Debian
sudo apt-get install -y bison build-essential curl flex git gnat libncurses5-dev m4 zlib1g-dev
ArchLinux
sudo pacman -S base-devel curl git gcc-ada ncurses zlib
Fedora
sudo dnf install git make gcc-gnat flex bison xz bzip2 gcc g++ ncurses-devel wget zlib-devel

Загружаем исходный код Coreboot'а:

git clone https://review.coreboot.org/coreboot
cd coreboot   

Собираем toolchain

Coreboot использует свой GCC и другие инструменты для сборки не зависящие от дистрибутива для избежания проблем. Для быстрой сборки воспользуемся параметром CPUS=$(nproc), иначе make запустится только с одним потоком.

make crossgcc-i386 CPUS=$(nproc)

Toolchain i386 используется для всех x86 и x86_64 платформ. Предупреждаю, процесс сборки будет долгим :)

Создание config файла

В файле конфигурации важно задать правильные настройки для VGA, иначе при загрузки вы получите черный экран.

Перед этим вам нужно скопировать ваш vgabios.rom в папку coreboot, чтобы он использовался при сборке.

Меню настройки сборки открывается командой:

make nconfig

Внимание!

Внимание! Если Вы до этого собирали Coreboot для другой материнской платы (или для QEMU), то перед изменением конфига напишите: make distclean

Если Вы собираете Coreboot в первый раз и только что скачали исходники, то это можно пропустить.

Переходим по вкладкам и отмечаем следующее (все остальные настройки оставляем по умолчанию):

* Mainboard
- Mainboard vendor (Lenovo) --->
- Mainboard model (ThinkPad T60 / T60p) --->
- ROM chip size (2048 KB (2 MB)) --->
- (0x200000) Size of CBFS filesystem in ROM

* Chipset
- Include CPU microcode in CBFS (Generate from tree) --->

* Devices
- Graphics initialization (Run VGA Option ROMs) --->
- [*] Re-run VGA Option ROMs on S3 resume
- [*] Load Option ROMs on PCI devices 
- Option ROM execution type (Native mode) --->

- Display --->
    + [*] Set framebuffer graphics resolution
    + framebuffer graphics resolution (1024x768 64k-color (5:6:5)) --->
    + Framebuffer mode (VESA framebuffer) --->
- [*] Add a VGA BIOS image   - `"(vgabios.rom)"`
- [ ] VGA BIOS path and filename
- (XXXX,XXXX) VGA device PCI IDs <-- ВАШ PCI ID через ',' (не через ':' )     

* Payload
- Add a payload (SeaBIOS)
- SeaBIOS version (1.14.0)
- [*] Use LZMA compression for payloads

Мы создали самый простой конфиг:

  • Выбрали материнскую плату для ThinkPad T60/T60p (они используют общие настройки)
  • Размер прошивки 2 Мб
  • Включили микрокод для процессора (хотя говорят что на T60 можно и без него, но я не проверял. Первый раз советую собрать с ним, а потом уже можете экспериментировать)
  • Добавили vgabios.rom, включили его инициализацию и выставили разрешение
  • В качестве загрузчика (payload) используем BIOS (SeaBIOS)

Напоминание

Не забудьте указать ваш PCI ID в пункте VGA device PCI IDs

И наконец, собираем Coreboot командой:

make   

В папке coreboot/build/ вы найдёте ваш coreboot.rom

Подготовка T60

Для прошивки нужна утилита flashrom. Установите её из репозитория вашего GNU/Linux дистрибутива.

Разбор ноутбука

Поскольку мы будем прошивать Coreboot при помощи программатора (в данной инструкции используем CH341A), придётся его разобрать до основания. Советую воспользоваться этой инструкцией.

BIOS чип находится возле оперативной памяти, под левой кнопкой для трэкпоинта.

BIOS чип находится возле оперативной памяти, под левой кнопкой для трэкпоинта.
Полезный совет чтобы в следующий раз не пришлось полностью разбирать ноутбук

От скелета T60 можно "откусить" мешающий кусок плоскогубцами, чтобы он не закрывал BIOS чип и в следующий раз к нему можно было подключиться программатором без полного разбора ноутбука.

Image title

Image title

Подключаемся программатором

Напомню, что мы всё ещё используем CH341A. Как собрать программатор с прищепкой советую посмотреть тут в разделе Assembling the programmer

Внимание!

Не забудьте отключить аккумулятор, зарядное устройство и BIOS батарейку!

Подключаемся прищепкой программатора к чипу.

Подключение программатора к чипу

Красная линия на прищепке должна совпадать с цифрой 1 возле BIOS чипа и/или с точкой на самом чипе.

СНАЧАЛА прицепляемся прищепкой к BIOS чипу, ПОТОМ подключаем программатор к компьютеру.

Если на CH341A уже горит светодиод RUN, значит программатор не нашёл чип и надо прицепиться к нему заново:

Как правильно отключить программатор от чипа

Сначала отключаем программатор от компьютера чтобы его обесточить, потом отсоединяем прищепку от чипа.

Процесс прошивки ThinkPad T60 при помощи X230

Процесс прошивки ThinkPad T60 при помощи X230. Кусочка корпуса над BIOS чипом уже нет, по этому разбирать ноутбук полностью не пришлось.

Делаем бэкап заводского биоса (обязательно)

Считываем заводской BIOS с чипа. Сделаем это два раза, чтобы потом проверить их:

sudo flashrom -p ch341a_spi -r bios1.img
sudo flashrom -p ch341a_spi -r bios2.img   

Сравниваем оба образа:

diff bios1.img bios2.img

Если вывода нет, значит файлы идентичны, первый файл можно сохранить, а второй удалить. Храните бэкап в надёжном месте. При помощи его вы в любой момент сможете вернуться на рабочий заводской BIOS, если что-то пойдёт не так.

Если же diff написал, что файлы разные, то повторите процесс подключение к чипу из прошлого раздела.

Ещё один совет как проверить образ

Можно попробовать распаковать ваш заводской BIOS при помощи Coreboot утилиты bios_extract. Подробнее тут. Если образ распаковался, значит он записался правильно.

Прошиваем BIOS чип (наконец-то!)

Поскольку на BIOS чипе нет никаких ME, GBE и других регионов (в отличие от X230, например), то мы можем заливать нашу Coreboot прошивку полностью без необходимости в layout файлах. Воспользуемся этой командой:

sudo flashrom -p ch341a_spi -w coreboot.rom

Если прошивка завершилась выводом "Verifying flash... VERIFIED!", значит прошивка прошла успешно и можно отключить программатор и собрать ваш T60 обратно.

Как правильно отключить программатор от чипа

Сначала отключаем программатор от компьютера чтобы его обесточить, потом отсоединяем прищепку от чипа.

Загружаемся!

Если при запуске вас встречает вывод SeaBIOS, то поздравляю! Прошивка прошла успешно!

Дальше можете собирать свои Coreboot прошивки со своей конфигурацией :)

Экран выбора загрузочного диска на ThinkPad T60 с Coreboot и SeaBIOS в качестве загрузчика

Экран выбора загрузочного диска на ThinkPad T60 с Coreboot и SeaBIOS в качестве загрузчика

Если же ваш T60 запустился, но нет изображения, то проверьте ThinkLight (сочетание клавиш Fn+PgUp). Если ThinkLight загорелся, значит ноутбук и прошивка исправна, но VGA биос для ATI не заработал. Советую проверить ваш config файл ещё раз.

За дополнительной информацией советую англоязычный проект ZeroCat. Использовать их скрипты не советую (они собирают только с GRUB2 и требуют ОС Trisquel), но документация и примеры конфигов у них хорошие.