Статья про Coreboot
This commit is contained in:
		
							parent
							
								
									a732be4963
								
							
						
					
					
						commit
						d5b211acbe
					
				
					 2 changed files with 393 additions and 1 deletions
				
			
		
							
								
								
									
										384
									
								
								2022/coreboot.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										384
									
								
								2022/coreboot.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,384 @@ | ||||||
|  | # Установка Coreboot+Tianocore на ThinkPad T530 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | #coreboot #bios #uefi #firmware #tianocore #thinkpad | ||||||
|  | 
 | ||||||
|  | Нян! | ||||||
|  | Сегодня мы будем заниматься установкой 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, для однократного применения можно брать и не особо дорогую; | ||||||
|  | * Набор отверток и прочего инструмента для разборки ноутбука; | ||||||
|  | * (Опционально) Термопаста, компрессор/пылесос - чтоб почистить перед сборкой; | ||||||
|  | * (Обязательно!) Желание довести дело до конца, терпение, внимательность и спокойствие. ~~Один прогиб - и ты погиб!~~ В некоторых моментах есть возможность сжечь чип с прошивкой, после такого вашу материнку можно будет использовать разве что как плитку в ванной. Сидеть с нерабочей прошивкой - вариант тоже не особо привлекательный, так что **ни в коем случае не пренебрегаем бекапами и сравнением хэшей!** | ||||||
|  | 
 | ||||||
|  | ### Подготовка системы, из которой будем шить | ||||||
|  | Устанавливаем нужные пакеты: | ||||||
|  | ``` | ||||||
|  | $ sudo pacman -S base-devel curl git gcc-ada ncurses zlib | ||||||
|  | ``` | ||||||
|  | Создаем каталог с нашим сокровищем, в нем - каталог, куда положим оригинальную прошивку. Клонируем репозиторий coreboot: | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~$ mkdir ~/T530 | ||||||
|  | nihonium@delta/~$ cd ~/T530 | ||||||
|  | nihonium@delta/~/T530$ mkdir bios-backup | ||||||
|  | nihonium@delta/~/T530$ git clone https://review.coreboot.org/coreboot | ||||||
|  | nihonium@delta/~/T530$ cd coreboot | ||||||
|  | nihonium@delta/~/T530/coreboot$ git submodule update --init --checkout | ||||||
|  | ``` | ||||||
|  | Мы можем собрать toolchain для сборки coreboot, чтоб результат был воспроизводим не только на нашем устройстве (или чтоб собрать образ, сидя на другой архитектуре, например, на малине): | ||||||
|  | 	``` | ||||||
|  | nihonium@delta/~/T530/coreboot$ make crossgcc-i386 CPUS=$(nproc) | ||||||
|  | 	``` | ||||||
|  | Но я собирал, используя системный 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 МБ. | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | Смотрим, что написано на каждом из этих чипов, например - MX25L6406E и MX25L3206E. Записываем эти значения. | ||||||
|  | 
 | ||||||
|  | ## Прошивка | ||||||
|  | 
 | ||||||
|  | ### Делаем бекап оригинальной прошивки (ВАЖНО) | ||||||
|  | 
 | ||||||
|  | Подключаем программатор к левому чипу (SPI1), втыкаем программатор в USB. | ||||||
|  | Смотрим, определился ли чип: | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530$ sudo flashrom -p ch341a_spi | ||||||
|  | ``` | ||||||
|  | Если в выводе фигурирует значение, которое мы списали с данного чипа, то все в порядке. Иногда чип определяется не с первого запуска 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. | ||||||
|  | 	``` | ||||||
|  | Наш чип - "MX25L6406E/MX25L6408E", дальше подставляем эту строку при считывании/записи. | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | Если чип стабильно читается, то идем в каталог bios-backup и считываем левый чип (SPI1): | ||||||
|  | 	``` | ||||||
|  | nihonium@delta/~/T530$ cd bios-backup | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sudo flashrom -p ch341a_spi -r factory_spi1-1.bin -c "MX25L6406E/MX25L6408E" | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sudo flashrom -p ch341a_spi -r factory_spi1-2.bin -c "MX25L6406E/MX25L6408E" | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sha512sum factory_spi1-* | ||||||
|  | 	``` | ||||||
|  | Мы два раза считываем один чип, а затем проверяем, совпадают ли хеши этих двух файлов. Если хеши совпадают, то идем дальше. | ||||||
|  | 
 | ||||||
|  | Делаем такую же операцию для правого чипа (SPI2). | ||||||
|  | Подключаем программатор к правому чипу, смотрим, определяется ли чип flashrom'ом. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530$ sudo flashrom -p ch341a_spi | ||||||
|  | ``` | ||||||
|  | Пример вывода: | ||||||
|  | ``` | ||||||
|  | Calibrating delay loop... OK. | ||||||
|  | Found Macronix flash chip "MX25L3205(A)" (4096 kB, SPI) on ch341a_spi. | ||||||
|  | Found Macronix flash chip "MX25L3205D/MX25L3208D" (4096 kB, SPI) on ch341a_spi. | ||||||
|  | Found Macronix flash chip "MX25L3206E/MX25L3208E" (4096 kB, SPI) on ch341a_spi. | ||||||
|  | Found Macronix flash chip "MX25L3273E" (4096 kB, SPI) on ch341a_spi. | ||||||
|  | Multiple flash chip definitions match the detected chip(s): "MX25L3205(A)", "MX25L3205D/MX25L3208D", "MX25L3206E/MX25L3208E", "MX25L3273E" | ||||||
|  | Please specify which chip definition to use with the -c <chipname> option. | ||||||
|  | 	``` | ||||||
|  | Наш чип - "MX25L3206E/MX25L3208E". | ||||||
|  | Если все в порядке, идем считывать правый чип: | ||||||
|  | 	``` | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sudo flashrom -p ch341a_spi -r factory_spi2-1.bin -c "MX25L3206E/MX25L3208E" | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sudo flashrom -p ch341a_spi -r factory_spi2-2.bin -c "MX25L3206E/MX25L3208E" | ||||||
|  | nihonium@delta/~/T530/bios-backup$ sha512sum factory_spi2-* | ||||||
|  | 	``` | ||||||
|  | Так же сверяем суммы, если все совпадает - идем дальше. | ||||||
|  | Снимаем программатор, **папку bios-backup сохраняем в надежном месте.** | ||||||
|  | 
 | ||||||
|  | ### Готовим образ Coreboot | ||||||
|  | 
 | ||||||
|  | Сливаем два файла в один: | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/bios-backup$ cat factory_spi1-1.bin factory_spi2-1.bin > T530-bios.rom | ||||||
|  | ``` | ||||||
|  | Полученный образ состоит из нескольких элементов: | ||||||
|  | 
 | ||||||
|  | * Flash Descriptor (4 КБ); | ||||||
|  | * BIOS (7 МБ); | ||||||
|  | * Прошивка Intel ME (5 МБ); | ||||||
|  | * Прошивка Gigabit Ethernet (8 КБ). | ||||||
|  | 
 | ||||||
|  | Для разделения целого образа исходной прошивки на данные компоненты существует утилита ifdtool.Воспользуемся ей. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/bios-backup$ cd ../coreboot/util/ifdtool | ||||||
|  | nihonium@delta/~/T530/coreboot/util/ifdtool$ make | ||||||
|  | nihonium@delta/~/T530/coreboot/util/ifdtool$ cp ~/T530/bios-backup/T530-bios.rom . | ||||||
|  | nihonium@delta/~/T530/coreboot/util/ifdtool$ ./ifdtool -x T530-bios.rom | ||||||
|  | ``` | ||||||
|  | После выполнения данной операции мы получаем следующие файлы в текущей директории: | ||||||
|  | 
 | ||||||
|  | * flashregion\_0\_flashdescriptor.bin | ||||||
|  | * flashregion\_1\_bios.bin | ||||||
|  | * flashregion\_2\_intel\_me.bin | ||||||
|  | * flashregion\_3\_gbe.bin | ||||||
|  | 
 | ||||||
|  | Названия файлов вполне себе интуитивно понятные. Файл flashregion\_1\_bios.bin нам не пригодится вообще. | ||||||
|  | Теперь давайте вычистим Intel ME с помощью me_cleaner. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/util/ifdtool$ cd .. | ||||||
|  | nihonium@delta/~/T530/coreboot/util$ git clone https://github.com/corna/me_cleaner.git | ||||||
|  | nihonium@delta/~/T530/coreboot/util$ cd me_cleaner | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ cp ../ifdtool/flashregion_2_intel_me.bin . | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ python me_cleaner.py -t -r flashregion_2_intel_me.bin -O me.bin | ||||||
|  | ``` | ||||||
|  | Все, в файле me.bin мы имеем обезвреженный вариант Intel ME. | ||||||
|  | Создадим каталог для блобов и скопируем туда все необходимое. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ mkdir -p ~/T530/coreboot/3rdparty/blobs/mainboard/lenovo/t530 | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ mv me.bin ~/T530/coreboot/3rdparty/blobs/mainboard/lenovo/t530 | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ mv ../ifdtool/flashregion_0_flashdescriptor.bin ~/T530/coreboot/3rdparty/blobs/mainboard/lenovo/t530/descriptor.bin | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ mv ../ifdtool/flashregion_3_gbe.bin ~/T530/coreboot/3rdparty/blobs/mainboard/lenovo/t530/gbe.bin | ||||||
|  | ``` | ||||||
|  | Все, теперь у нас есть все нужные компоненты для сборки Coreboot. | ||||||
|  | 
 | ||||||
|  | Давайте его соберем! | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/util/me_cleaner$ cd ~/T530/coreboot | ||||||
|  | nihonium@delta/~/T530/coreboot$ make nconfig | ||||||
|  | ``` | ||||||
|  | Нам вылезет окно конфигурации, с которым мы и будем работать. | ||||||
|  | Крутим все примерно вот так: | ||||||
|  | ``` | ||||||
|  | + general | ||||||
|  |   - Compress ramstage with LZMA | ||||||
|  |   - Allow building with any toolchain (Разрешаем сборку системным toolchain'ом) | ||||||
|  |   - Include the coreboot .config file into the ROM image | ||||||
|  |   - Allow use of binary-only repository | ||||||
|  | + mainboard | ||||||
|  |   - Mainboard vendor (Lenovo) | ||||||
|  |   - Mainboard model (ThinkPad T530) | ||||||
|  |   - ROM chip size (12288 KB (12 MB)) | ||||||
|  |   - (0x250000) Size of CBFS system in ROM | ||||||
|  | + chipset | ||||||
|  |   - Enable VMX for virtualization | ||||||
|  |   - Support bluetooth on wifi cards | ||||||
|  |   - Add Intel descriptor.bin file | ||||||
|  |   - Add Intel ME/TXE firmware | ||||||
|  |     + Verify the integrity of the supplied ME/TXE firmware | ||||||
|  |   - Add gigabit ethernet configuration | ||||||
|  | + devices | ||||||
|  |   - Graphics initialization (Use libgfxinit) | ||||||
|  |   - Display | ||||||
|  |     - Framebuffer mode (Linear "high-resolution" framebuffer) | ||||||
|  |   - Enable PCIe Clock Power Management | ||||||
|  |   - Enable PCIe ASPM L1 SubState | ||||||
|  | + generic drivers | ||||||
|  |   - Support for flash based, SMM mediated data store | ||||||
|  |   - Support Intel PCI-e WiFi adapters | ||||||
|  |   - PS/2 keyboard init | ||||||
|  | + console | ||||||
|  |   - Show POST codes on the debug console | ||||||
|  | + payloads | ||||||
|  |   - Add a payload (Tianocore coreboot payload package) | ||||||
|  |   - Tianocore payload (CorebootPayload) | ||||||
|  |   - Secondary Payloads (None) | ||||||
|  | 	``` | ||||||
|  | Особое внимание следует уделить параметру payloads/Tianocore payload. | ||||||
|  | Тут необходимо выбрать именно этот пункт, т.к. [иные версии Tianocore чаще всего не работают на ThinkPad'ах](https://www.reddit.com/r/coreboot/comments/rilew7/tianocore_upstream_vs_uefipayload_vs/). Но из-за "старости" кода в данном варианте, нам надо поставить python2 и разрулить пару проблем с gcc. | ||||||
|  | Ставим второй питон и начинаем сборку. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot$ sudo pacman -S python2 | ||||||
|  | nihonium@delta/~/T530/coreboot$ make CPUS=$(nproc) | ||||||
|  | 	``` | ||||||
|  | Скорее всего, посреди сборки вылезет ошибка gcc с жалобами на vla-parameter. | ||||||
|  | Делаем вот такой финт: | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot$ cd ~/T530/coreboot/payloads/external/tianocore/tianocore/BaseTools/Source/C/BrotliCompress | ||||||
|  | nihonium@delta/~/T530/coreboot/payloads/external/tianocore/tianocore/BaseTools/Source/C/BrotliCompress$ gcc  -c -I ./brotli/c/include -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/ -MD -fshort-wchar -fno-strict-aliasing -fwrapv -fno-delete-null-pointer-checks -Wall -Werror -Wno-vla-parameter -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict -Wno-unused-result -nostdlib -g -O2  dec/decode.c -o dec/decode.o | ||||||
|  | nihonium@delta/~/T530/coreboot/payloads/external/tianocore/tianocore/BaseTools/Source/C/BrotliCompress$ gcc  -c -I ./brotli/c/include -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/ -MD -fshort-wchar -fno-strict-aliasing -fwrapv -fno-delete-null-pointer-checks -Wall -Werror -Wno-vla-parameter -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict -Wno-unused-result -nostdlib -g -O2  enc/encode.c -o enc/enccode.o | ||||||
|  | nihonium@delta/~/T530/coreboot/payloads/external/tianocore/tianocore/BaseTools/Source/C/BrotliCompress$ cd ~/T530/coreboot | ||||||
|  | ``` | ||||||
|  | [Если коротко, то проблема вызвана добавлением новых функций в GCC 11.](https://github.com/patmagauran/i915ovmfPkg/issues/21) | ||||||
|  | После таких манипуляций все должно собраться без проблем, получаем файл build/coreboot.rom. Разделим его на две части, на каждый чип. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot$ cd build | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ dd if=coreboot.rom of=coreboot-spi1.rom bs=1M count=8 | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ dd if=coreboot.rom of=coreboot-spi2.rom bs=1M skip=8 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Прошиваем Coreboot | ||||||
|  | 
 | ||||||
|  | Подключаем программатор к левому чипу (SPI1), не забываем про порядок действий при этом. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ sudo flashrom -p ch341a_spi | ||||||
|  | ``` | ||||||
|  | Если чип считывается, то можно шить. Если нет - то проверяем подключение. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ sudo flashrom --chip "MX25L6406E/MX25L6408E" --programmer ch341a_spi --write coreboot-spi1.rom | ||||||
|  | ``` | ||||||
|  | Примерный вывод: | ||||||
|  | ``` | ||||||
|  | Calibrating delay loop... OK. | ||||||
|  | Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on ch341a_spi. | ||||||
|  | Reading old flash chip contents... done. | ||||||
|  | Erasing and writing flash chip... Erase/write done. | ||||||
|  | Verifying flash... VERIFIED. | ||||||
|  | ``` | ||||||
|  | Если все прошло хорошо, то перецепляем программатор на правый чип (SPI2) и повоторяем. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ sudo flashrom -p ch341a_spi | ||||||
|  | ``` | ||||||
|  | Считался - шьем. | ||||||
|  | ``` | ||||||
|  | nihonium@delta/~/T530/coreboot/build$ sudo flashrom --chip "MX25L3206E/MX25L3208E" --programmer ch341a_spi --write coreboot-spi2.rom | ||||||
|  | ``` | ||||||
|  | Примерный вывод: | ||||||
|  | ``` | ||||||
|  | Calibrating delay loop... OK. | ||||||
|  | Found Macronix flash chip "MX25L3206E/MX25L3208E" (4096 kB, SPI) on ch341a_spi. | ||||||
|  | Reading old flash chip contents... done. | ||||||
|  | Erasing and writing flash chip... Erase/write done. | ||||||
|  | Verifying flash... VERIFIED. | ||||||
|  | ``` | ||||||
|  | Поключаем монитор, питание, клавиатуру и оперативку, проверяем включение. Если на экране появился зайчик, то поздравляю с успехом! | ||||||
|  | Cобираем ноутбук, ставим новую Wi-Fi карточку (при наличии). | ||||||
|  | 
 | ||||||
|  | ### Проверка статуса Intel ME | ||||||
|  | 
 | ||||||
|  | Это делаем из системы, запущенной на прошитом ноутбуке. К параметрам загрузки ядра надо добавить iomem=relaxed. Это можно сделать из GRUB'а. | ||||||
|  | ``` | ||||||
|  | aimi@alpha/~/$ git clone --depth=1 https://review.coreboot.org/coreboot | ||||||
|  | aimi@alpha/~/$ cd coreboot/util/intelmetool | ||||||
|  | aimi@alpha/~/coreboot/util/intelmetool$ make | ||||||
|  | aimi@alpha/~/coreboot/util/intelmetool$ ./intelmetool -m | ||||||
|  | ``` | ||||||
|  | И идем сравнивать результат выполнения с [табличкой](https://github.com/corna/me_cleaner/wiki/Get-the-status-of-Intel-ME). | ||||||
|  | Если значения как в столбце Stock firmware, то вы где-то ошиблись, надо снова вычищать Intel ME и заново шить. | ||||||
|  | Если как в последних двух столбцах - Intel ME отключен, поздравляю! | ||||||
|  | 
 | ||||||
|  | Спасибо за внимание! | ||||||
|  | Статья, вероятно, будет понемногу дополняться. | ||||||
|  | Буду очень благодарен за конструктивную критику и комментарии! | ||||||
|  | В Федиверсе меня нет, но связаться со мной можно через [e-mail](mailto:nihonium@nekoea.red) ([публичный OpenPGP ключ](https://nekoea.red/nihonium.gpg)), [XMPP](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/); | ||||||
|  | * [Coreboot tutorial](https://doc.coreboot.org/tutorial/part1.html); | ||||||
|  | 
 | ||||||
|  | <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="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 <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>. | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | 	``` | ||||||
|  | ``` | ||||||
|  | 	``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | 	``` | ||||||
|  | 	``` | ||||||
|  | 	``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | 	``` | ||||||
|  | 		``` | ||||||
|  | 	``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | 	``` | ||||||
|  | 		``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
|  | ``` | ||||||
							
								
								
									
										10
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
										
									
									
									
								
							|  | @ -1,2 +1,10 @@ | ||||||
| # blog | # nihonium's blog | ||||||
|  | 
 | ||||||
|  | Статьи из [моего блога](https://purring.nekoea.red/nihonium). | ||||||
|  | 
 | ||||||
|  | Список статей: | ||||||
|  | 
 | ||||||
|  | * 2022 | ||||||
|  |   * Установка Coreboot+Tianocore на ThinkPad T530 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue