Сегодня мы будем заниматься установкой Coreboot'а на ноутбук ThinkPad T530, используя Tianocore для получения свободного варианта UEFI.
Раз вас заинтересовала данная статья, то, скорее всего, что такое [Coreboot](https://www.coreboot.org/ ), и так знаете. Но на всякий случай всё-так сделаю небольшое лирическое отступление "кто и зачем".
> Coreboot - проект по созданию свободного встроенного программного обеспечения для ряда ПК, одобренный FSF (Free Software Foundation). Целью проекта является замена проприетарных и закрытых систем BIOS и UEFI, используемых большинством персональных компьютеров, на легковесный, предназначенный исключительно для загрузки и запуска современных 32-битных и 64-битных операционных систем.
> TianoCore представляет собой открытую реализацию UEFI, разрабатываемую компанией Intel, но не содержащую компонентов для инициализации оборудования.
То есть, Coreboot отвечает за инициализацию железа, а Tianocore - за предоставление функционала UEFI.
Из-за привязки к оборудованию Coreboot доолжен быть отдельно портирован на каждую платформу, в отличие от Tianocore, который, при наличии инициализированного железа, будет работать где угодно.
Если мы совместим эти два компонента, то получим (почти) свободную реализацию UEFI, Tianocore используется в качестве т.н. payload'а ("полезная нагрузка") для coreboot.
Стоит отметить, что существуют и иные payload'ы для Coreboot, например, [SeaBIOS](https://ru.wikipedia.org/wiki/SeaBIOS), который предоставляет x86 BIOS, по некоторым ссылкам в конце данной статьи упомянуты моменты, специфичные для этой полезной нагрузки.
Итак, но почему бы не использовать стоковые закрытые и проприетарные прошивки? На самом деле, у них крайне много проблем. Например, наличие критических уязвимостей ([из недавнего](https://www.opennet.ru/opennews/art.shtml?num=56656)), выявление которых зачастую фактически невозможно в силу отсутствия исходных кодов самой прошивки. Если вирус установит себя на уровне ниже операционной системы (ОС), то выковырять его оттуда будет крайне проблематично.
Отдельно стоит отметить наличие подсистемы [Intel ME](https://ru.wikipedia.org/wiki/Intel_Management_Engine) в подавляющем большинстве современных x86 компьютеров. Если коротко - то это компьютер внутри компьютера, который имеет доступ ко всем компонентам системы, от оперативной памяти до видеопотока, имеет выделенный сетевой интерфейс, который НЕ виден для основной системы. В теории, это означает, что тот, кто владеет доступом к Intel ME, тот владеет и компьютером. У вас этого доступа нет, так что вывод, я думаю, очевиден. А, ну и да, никто не отменял уязвимости Intel ME =3
К сожалению, большая производителей выпускают прошивки для своего оборудования исключительно в бинарном виде, а открытых альтернатив нет. Именно поэтому в Coreboot присутствуют т.н. бинарные блобы (binary blobs), необходимые для функционирования некоторых компонентов, например, Ethernet. Несмотря на это, количество блобов минимально и, как правило, они не представляют особой опасности.
Существует также проект [Libreboot](https://libreboot.org/), представляющий собой прошивку без блобов. Ноее можно поставить на очень малый список устройств (даже меньше, чем в и так [скудном списке coreboot'а](https://www.coreboot.org/status/board-status.html)) , да и подходящие девайсы - далеко не первой свежести, так что слабое железо и дохлые аккумуляторы.
Intel ME невозможно полностью отключить на современных чипсетах, так как на эту подсистему перевесили много важных функций, но на Sandy Bridge и Ivy Bridge есть возможность так "сломать" Intel ME, что он проведет инициализацию нужных для нормального функционирования системы компонентов, но сам запустится в крайне ограниченном и беззубом режиме.
Итого, какие плюсы от установки Coreboot:
* Есть возможность обезвредить Intel ME, используя утилиту [me_cleaner](https://github.com/corna/me_cleaner);
* Исчезнет "белый" список Wi-Fi адаптеров, который есть в ThinkPad'ах. По умолчанию, в синках стоят карточки с закрытыми и проприетарными драйверами. После установки Coreboot будет возможно поставить, например, Qualcomm Atheros AR9285, для которой есть открытый драйвер ath9k;
* Меньшее время загрузки системы;
*В освободившееся место можно засунуть небольшую программку, типа memtest или тетриса =3
Минусы:
* Сложность самой процедуры;
* Необходимо наличие подходящего железа;
* Иногда становится невозможным просмотр DRM-защищенного контента. [Но он же нам и не нужен, правда](https://www.defectivebydesign.org/)?
* Периодически вылезают баги и проблемы, которые, тем не менее, фиксятся разработчиками, не зря же проект открытый.
Ладно, посмотрели, пора и потрогать, как оно там.
## Подготовка
Нам понадобится:
* Ноутбук, куда ставим (в моем случае - ThinkPad T530);
* Устройство, с которого ставим (можно использовать Raspberry Pi или другой ноутбук. В случае малины нужно удостоверится, что питание на ней достаточное!). На нем поставить linux. Я использовал Artix. Скрытого смысла тут нет, просто у меня была флешка с образом, да и pacman мне ближе (хотя могут быть некоторые плюсы, о которых упомяну чуть позже). А так - можете использовать тот же Debian, список пакетов к установке смотрите по ссылкам в конце статьи;
* Программатор CH341A (с малиной не нужен, там есть SPI, но распиновку на нем я оставляю в качестве упражнения для читателя, ищите всяких индусов на ютубе ;3);
* Прищепка SOIC-8, для однократного применения можно брать и не особо дорогую;
*Набор отверток и прочего инструмента для разборки ноутбука;
* (Опционально) Термопаста, компрессор/пылесос - чтоб почистить перед сборкой;
* (Обязательно!) Желание довести дело до конца, терпение, внимательность и спокойствие. ~~Один прогиб - и ты погиб!~~В некоторых моментах есть возможность сжечь чип с прошивкой, после такого вашу материнку можно будет использовать разве что как плитку в ванной. Сидеть с нерабочей прошивкой - вариант тоже не особо привлекательный, так что **ни в коем случае не пренебрегаем бекапами и сравнением хэшей!**
Мы можем собрать toolchain для сборки coreboot, чтоб результат был воспроизводим не только на нашем устройстве (или чтоб собрать образ, сидя на другой архитектуре, например, на малине):
Но я собирал, используя системный toolchain, пользуясь тем, что в Artix все пакеты свежие (вот и пригодился Arch-based!). Очевидно, собрать на малине таким образом образ для ThinkPad'а не выйдет, так что там обязателен данный шаг!
### Знакомимся с CH341A
Если вы никогда не имели дело с программатором, то настоятельно рекомендую посмотреть какое-нибудь видео на эту тему.
Самое важное при работе с программатором - соблюдение нумерации контактов.
Красный провод на прищепке - 1, крепим прищепку к площадке красным проводом на единицу. Затем отжимаем лапку на программаторе, ставим площадку в левую часть, опускаем лапку. Результат представлен на фото ниже.
1 на чипе соответствует нога с выемкой около нее. Красный провод прищепки крепится к этому контакту.
> **ВАЖНО! Перед тем, как пытаться что-то шить, необходимо убедиться, что на устройстве-пациенте нет питания! Должны быть отсоединены аккумулятор, блок питания и внутренняя батарейка.**
> **Подключаемся к чипу в следующем порядке: сначала надеваем прищепку на чип, потом вставляем программатор в USB порт. Извлекаем в обратном порядке - сначала вынимаем программатор из USB порта, затем снимаем прищепку.**
Перед началом ломания желательно обновить заводской BIOS до последней версии, если планируете ставить новые компоненты, то протестируйте их до перепрошивки (кроме, разве что, Wi-FI карт).
Приступаем к разборке ноутбука, [видео процесса](https://invidious.snopyta.org/watch?v=StH4DWwaHoo). В обязательном порядке снимаем и маленькую батарейку на материнской плате!
Находим чипы, в которых записан текущий BIOS (на материнской плате под ними написано SPI1 и SPI2). Левый - на 8 МБ, правый - на 4 МБ.
![Чипы SPI1 и SPI2](https://nekoea.red/wrfreely-images/chips.cleaned.jpg)
Смотрим, что написано на каждом из этих чипов, например - MX25L6406E и MX25L3206E. Записываем эти значения.
## Прошивка
### Делаем бекап оригинальной прошивки (ВАЖНО)
Подключаем программатор к левому чипу (SPI1), втыкаем программатор в USB.
Если в выводе фигурирует значение, которое мы списали с данного чипа, то все в порядке. Иногда чип определяется не с первого запуска flashrom'а, тогда, во-первых, надо проверить подключение прищепки к чипу, во-вторых, попробовать запустить flashrom еще пару раз.
Пример вывода:
```
Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on ch341a_spi.
Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on ch341a_spi.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on ch341a_spi.
Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E" (8192 kB, SPI) on ch341a_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E"
Please specify which chip definition to use with the -c <chipname> option.
Особое внимание следует уделить параметру payloads/Tianocore payload.
Тут необходимо выбрать именно этот пункт, т.к. [иные версии Tianocore чаще всего не работают на ThinkPad'ах](https://www.reddit.com/r/coreboot/comments/rilew7/tianocore_upstream_vs_uefipayload_vs/). Но из-за "старости" кода в данном варианте, нам надо поставить python2 и разрулить пару проблем с gcc.
В Федиверсе меня нет, но связаться со мной можно через [e-mail](mailto:nihonium@nekoea.red) ([публичный OpenPGP ключ](https://nekoea.red/nihonium.gpg)), XMPP (nihonium@nekoea.red), или через Matrix - @nihonium:nyatrix.nekoea.red.
* Статья чувака с Runion под названием "Паранойя на марше: замена BIOS на coreboot", легко ищется в Интернете, [например](https://playffa.ru/wps/?p=24911);
* Официальный сайт [Coreboot](https://doc.coreboot.org/) - много общих мест, мало практических руководств, информация сильно фрагментирована;
* [Опыт на X220](https://szclsya.me/posts/coreboot/x220/);
<arel="license"href="http://creativecommons.org/licenses/by-sa/4.0/"><imgalt="Creative Commons License"style="border-width:0"src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"/></a><br/>This work is licensed under a <arel="license"href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.