Coreboot. Instruction.
ua_hackПідбір компонентів.
Все необхідне у вас або вже є, або вільно продається в місцевих магазинах великих міст. Нам знадобляться:
1. Ваш ноутбук або ПК.
2. Программатор CH341A з проводом-прищіпкою-SOIC8
У багатьох мануалах використовуються Raspberry, такий варіант також можливий. Провід з прищіпкою може бути дешевий китайський (як на фото нижче) або більш дорожчий Pomona, різниці при використанні немає, беріть який знайдете.
3. Мала хрестова викрутка і пластикова картка (наприклад, будь-яка знижкова) для розбирання ноутбука.
(Опціонально: тюбик термопасти, ще стане в нагоді лупа, якщо зір не дуже. Також якщо ви звикли до такого підходу або якщо робите пристрій для когось, то пара рукавичок).
4. Прямі руки, уважність, запас терпіння і часу.
5. Пристрій, який ми будемо прошивати - я вибрав ноутбук. Для зручності далі він іноді може називатися «ноутбук-пацієнт».
Великий Брат подбав про нас настільки, що замінити пропрієтарний BIOS і заодно відключити Intel ME можна на дуже невеликому списку пристроїв.
Приблизний список відповідних ноутбуків виглядає так:
Coreboot: Lenovo ThinkPad X201, X220, X230, T420, T430.
Libreboot: Lenovo ThinkPad X60, X60s, X60 Tablet, X200, X200 Tablet, R400, T400, T500, Apple MacBook 1.1 і 2.1, Asus Chromebook C201.
(Не всі пристрої зі списків і залізо в них підтримуються повністю)
Різниця між ними така:
Coreboot - вільна альтернатива BIOS з відкритим вихідним кодом, лише деякі невеликі ділянки коду беруться з заводського BIOS.
Libreboot - те ж саме, але... Тільки повністю відкритий код і трохи простіший процес прошивки. Мінус в тому, що залізо, яке він підтримує менш продуктивне і його складніше знайти в нормальному стані. Ще він не підтримує Windows, якщо вам раптом це важливо.
Отримані профіти від перепрошивки:
відкритий код;
вимикається Intel ME;
завантаження ОС відбувається швидше;
зростає безпека, в поводженні з ОЗУ;
видаляється «схвалений список» Wi-Fi адаптерів присутній у багатьох ThinkPad, тобто з'явиться можливість використовувати адаптери з відкритими драйверами;
повнодискове шифрування стає дійсно таким, / boot розділ також можна зашифрувати (потрібно вибрати GRUB як Payload);
код Coreboot / Libreboot займає істотно менше місця, в місце, що звільнилося можливо впихнути невелику ОС типу KolibriOS, або гри на зразок тетріса (основна причина, чому я взагалі в це вплутався).
Спочатку я хотів саме Libreboot, але не знайшов для нього моделі в пристойному стані. Я шукав з живучою батареєю і, про всяк випадок, з процесором який не підтримує Intel vPro, попався під руку Lenovo ThinkPad X230. Для нього підійде Coreboot і після прошивання залишаться кілька blob і буде можливість запуску Windows (з зовнішнього диска, наприклад), якщо вибрати SeaBIOS. Саме на прикладі X230 + Coreboot буде описана ця інструкція.
Підготовка компонентів
1. Ваш ноутбук або ПК
Я використовував live образ Debian 9, можливо підійдуть і інші дистрибутиви, перевіряйте самі. Відкриваємо термінал.
(Нагадую для новачків, що команду потрібно копіювати після значка «$» і потім вставляти в термінал).
1) Встановлюємо необхідні пакети:
user@debian:~$ sudo apt update && sudo apt upgrade user@debian:~$ sudo apt install -y bison build-essential curl flashrom flex git gnat libncurses5-dev m4 zlib1g-dev
2) Створюємо 2 директорії:
user@debian:~$ mkdir -p ~/X230/bios-backup
3) Готовимо Coreboot:
user@debian:~$ cd ~/X230/ user@debian:~/X230$ git clone https://review.coreboot.org/coreboot user@debian:~/X230$ cd coreboot user@debian:~/X230/coreboot$ git submodule update --init --checkout user@debian:~/X230/coreboot$ make crossgcc-i386 CPUS=$(nproc)
2. Программатор CH341A


Дивимося Відео по работі с программатором (тисячі їх там же), найважливіше дотримуватися нумерацію, все 1 (вони ж - одиниці, вони ж - ключі) підключати між собою. Тобто:
Червоний провід йде до прищіпки 1.
Майданчик, до якої кріпиться провід, також містить нумерацію і червоний провід повинен бути з'єднаний до 1 на майданчику.
Потім, дивимося на програматор (USB роз'єм дивиться вліво): на программаторі знизу праворуч є вибір 25XX або 24XX, справа вгорі - буде 1, як зазначено в підказці там же), піднімаємо лапку вгору і майданчик встановлюємо в ліву частину, надійно вставили і опустили лапку вниз. Дивіться відео якщо раптом незрозуміло.
Також 1 це ключ (виїмка або поглиблення) чіпа на материнській платі ноутбука (в який зашитий BIOS), відповідно 1 до 1 т. Е. Червоний провід прищіпки повинен з'єднуватися до ніжки поруч з цією виїмкою.
І останнє що важливо пам'ятати, спочатку переконуємося, що на пристрої яке ми зібралися прошити немає живлення (від'єднана зовнішня батарея, зарядка, внутрішня батарейка), потім підключаємо прищіпку до чіпу, тільки після цього вставляємо вибору програм в USB-роз'єм поточного ноутбука або ПК. Відключення в зворотному порядку - витягуємо програматор, потім знімаємо прищіпку.
3. Ноутбук-пацієнт для прошивки
1) Насамперед оновлюємо заводський BIOS до останньої офіційної версії.
(Необов'язково, але про всяк випадок я це зробив: настройки BIOS скинув на заводські і дозволив прошивку)
2) (опціонально) Якщо хочете зробити апгрейд заліза найкраще для початку протестувати роботу нових компонентів на заводському BIOS. І тільки після цього приступати до Coreboot.
3) Від'єднуємо зарядку і батарею, після цього (опціонально: одягаємо рукавички) приступаємо до розбирання ноутбука:
Офіційні мануали:
4) Розібравши ноутбук-пацієнт, викидаємо з нього зайві деталі (не у всіх виконаннях все це є):
WLAN - с. 68 - все вбудовані варіанти Wi-Fi адаптерів цього ноутбука вимагають пропрієтарні драйвера, вони будуть працювати на тому ж Tails (привіт «параноїкам») так як там повно blob для підтримки різного устаткування, але не запрацюють на чистому Debian. Бажано замінити їх на адаптери, які використовують вільні драйвера і підтримують зміну MAC адреси, це або адаптери фірми Atheros (AR9285, AR9382 і т. П.), Або USB-адаптери (різних розмірів і функціоналу на будь-який смак).
WWAN - с. 70
Bluetooth - с. 74
Сканер відбитків пальця - розташований поруч з тачпадом, відкручується елементарно або просто від'єднується шлейф.
Мікрофони - с. 88 - їх два, знаходяться на планці разом зі світлодіодами. Видаляються разом з планкою.
Камера - с. 86
(Опціонально: видаляємо пензликом пил, міняємо термопасту)
5) Від'єднуємо внутрішню батарейку (с. 65).

6) Знаходимо чіпи в яких записаний поточний BIOS. Їх два, знаходяться приблизно під тачпадом. Виглядають ось так:
Верхній на 4 МБ, нижній на 8 МБ. Зчитувати і прошивати будемо обидва.
7) Зверніть увагу (опціонально: за допомогою лупи, а якщо чіпи заляпані акуратно протріть їх тканиною) і запишіть десь букви і цифри, які вказані на цих чіпах, наприклад «MX25L3206E» і «MX25L6406E», вони нам знадобляться на наступному етапі .
Процес прошивки
Багато команд терміналу взяті звідси. Відеопроцес прошивки через Raspberry.
1. Робимо backup ВЕРХНЬОГО чіпа заводської прошивки
Приєднуємо прищіпку до верхнього чіпу. Пам'ятаємо, що червоним проводом до виїмки на чіпі і все інше про що сказано вище. Як тільки з'єднання виглядає надійно вставляємо в порт ноутбука або ПК. Виглядати це буде приблизно так:

(Відмінність буде лише в способі кріплення прищіпки до программатору).
1) Переходимо в папку:
user@debian:~$ cd ~/X230/bios-backup
2) Читаємо (поки тільки читаємо) ВЕРХНІЙ чіп:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi
3) Вивід повинен бути таким:
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.
Якщо вивід інший, значить ви щось зробили не так, швидше за все потрібно від'єднати програматор і перевірити з'єднання прищіпки до чіпу. Потім знову повторити читання).
4) Робимо ПЕРШИЙ дамп ВЕРХНЬОГО чіпа:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi -r factory_top-1.bin -c "MX25L3206E/MX25L3208E"
5) Робимо ДРУГИЙ дамп ВЕРХНЬОГО чіпа:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi -r factory_top-2.bin -c "MX25L3206E/MX25L3208E"
6) Звіряємо контрольні суми дампів:
user@debian:~/X230/bios-backup$ sha512sum factory_top-*
Якщо суми збігаються значить все вірно і йдемо до наступного кроку, якщо ні - починаємо все заново.
7) Витягуємо програматор, знімаємо прищіпку і переходимо до наступного кроку
2. Робимо backup НИЖНЬОГО чіпа заводської прошивки.
1) Читаємо (поки тільки читаємо) НИЖНІЙ чіп:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi
2) Вивід повинен бути таким:
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"
3) Робимо ПЕРШИЙ дамп НИЖНЬОГО чіпа:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi -r factory_bottom-1.bin -c "MX25L6406E/MX25L6408E"
4) Робимо ДРУГИЙ дамп НИЖНЬОГО чіпа:
user@debian:~/X230/bios-backup$ sudo flashrom -p ch341a_spi -r factory_bottom-2.bin -c "MX25L6406E/MX25L6408E"
5) Звіряємо контрольні суми дампів:
user@debian:~/X230/bios-backup$ sha512sum factory_bottom-*
Якщо суми збігаються значить все вірно.
6) Витягуємо програматор, знімаємо прищіпку і переходимо до наступного кроку.
3. Зберігаємо всю папку / bios-backup в надійне місце, на випадок якщо далі щось піде не так.
4. Готуємо прошивку Coreboot
1) З'єднуємо 2 дампа в один файл:
user@debian:~/X230/bios-backup$ cat factory_bottom-1.bin factory_top-1.bin > X230-bios.rom
2) Беремо blob з заводського BIOS для подальшого використання:
user@debian:~/X230/bios-backup$ cd ~
user@debian:~$ cp ~/X230/bios-backup/X230-bios.rom ~/X230/coreboot/util/ifdtool/
user@debian:~$ cd ~/X230/coreboot/util/ifdtool/
user@debian:~/X230/coreboot/util/ifdtool$ make
user@debian:~/X230/coreboot/util/ifdtool$ ./ifdtool -x X230-bios.rom
user@debian:~/X230/coreboot/util/ifdtool$ mkdir -p ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
user@debian:~/X230/coreboot/util/ifdtool$ mv ~/X230/coreboot/util/ifdtool/*.bin ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
user@debian:~/X230/coreboot/util/ifdtool$ cd ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
user@debian:~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230$ rename 's/.{14}//' *.bin
user@debian:~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230$ mv flashdescriptor.bin descriptor.bin
user@debian:~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230$ mv intel_me.bin me.bin
user@debian:~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230$ cd ~/X230/coreboot/
3) Компілюємо нашу нову прошивку:
3.1) Виконуємо команду:
user@debian:~/X230/coreboot$ make nconfig

3.2) Встановлюємо наступні налаштування, зберігаємо і виходимо:
3.3) Виконуємо команду:
user@debian:~/X230/coreboot$ make
(Опціонально)
4) Додаємо пріоритет завантаження
Після прошивки у нас не буде звичних налаштувань BIOS (все буде виглядати зовсім інакше), наприклад, необхідний мені пріоритет завантаження потрібно сформувати заздалегідь і додати в .rom до прошивки. Отже, в моєму випадку, пріоритет по порядку: порти USB3.0, порт USB2.0, SATAIII, SATAII (слот WWAN в нього можна встановити SSD диск). Для цього:
4.1) Створюємо файл:
user@debian:~$ nano ~/X230/coreboot/mybootlist.txt
4.2) Записуємо в нього і зберігаємо:
/pci@i0cf8/usb@1d/hub@1/storage@1/*@0/*@0,0 /pci@i0cf8/usb@1d/hub@1/usb-*@1 /pci@i0cf8/usb@1d/hub@1/storage@2/*@0/*@0,0 /pci@i0cf8/usb@1d/hub@1/usb-*@2 /pci@i0cf8/usb@1a/hub@1/storage@2/*@0/*@0,0 /pci@i0cf8/usb@1a/hub@1/usb-*@2 /pci@i0cf8/*@1f,2/drive@0/disk@0 /pci@i0cf8/*@1f,2/drive@2/disk@0
4.3) Виконуємо команди:
user@debian:~$ cd ~/X230/coreboot/util/cbfstool/ user@debian:~/X230/coreboot/util/cbfstool$ make user@debian:~/X230/coreboot/util/cbfstool$ cd ~/X230/coreboot/ user@debian:~/X230/coreboot$ ./build/cbfstool build/coreboot.rom add -f mybootlist.txt -n bootorder -t raw
4.4) Перевіримо додавання:
user@debian:~/X230/coreboot$ ./build/cbfstool build/coreboot.rom print
Повинна з'явитися рядок «bootorder» ближче до кінця списку.
5) Ділимо створений .rom на дві частини (для кожного чіпа свій .rom):
user@debian:~$ cd ~/X230/coreboot/build user@debian:~/X230/coreboot/build$ dd if=coreboot.rom of=coreboot-bottom.rom bs=1M count=8 user@debian:~/X230/coreboot/build$ dd if=coreboot.rom of=coreboot-top.rom bs=1M skip=8
5. Прошиваємо Coreboot
ВЕРХНІЙ ЧІП:
1) Зчитуємо (поки тільки зчитуємо) ВЕРХНІЙ чІп:
user@debian:~/X230/coreboot/build$ sudo flashrom -p ch341a_spi
2) Якщо щось не так- перевіряємо з'єднання. Якщо все добре - прошиває:
user@debian:~/X230/coreboot/build$ sudo flashrom --chip "MX25L3206E/MX25L3208E" --programmer ch341a_spi --write coreboot-top.rom
3) Вивід повинен бути таким:
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.
4) Витягуємо програматор, знімаємо прищіпку і переходимо до наступного кроку
НИЖНІЙ ЧІП:
1) Читаємо (поки тільки читаємо) НИЖНІЙ чіп:
user@debian:~/X230/coreboot/build$ sudo flashrom -p ch341a_spi
2) Якщо щось не так- перевіряємо з'єднання. Якщо все добре - прошиває:
user@debian:~/X230/coreboot/build$ sudo flashrom --chip "MX25L6406E/MX25L6408E" --programmer ch341a_spi --write coreboot-bottom.rom
3) Вивід повинен бути таким:
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.
4) Витягуємо програматор, знімаємо прищіпку і переходимо до наступного кроку
При наступних перепрошивках (в рамках Coreboot) нижній чіп повторно прошивати не потрібно, він залишається без змін. Також після першої прошивки чіпа можна буде прошити без програматора, безпосередньо з системи, як в точності це робити поки не розбирався.
Перевірка і додаткові налаштування
1) Приєднуємо клавіатуру, ОЗУ, батарею і включаємо ноутбук.
2) Тепер, щоб дізнатися статус Intel ME(це зрада чи перемога?), на прошитому ноутбуці-пацієнта завантажуємо Debian.
Виконуємо наступні команди:
user@debian:~$ sudo apt update && sudo apt upgrade user@debian:~$ sudo apt install -y git libpci-dev zlib1g-dev user@debian:~$ git clone --depth=1 https://review.coreboot.org/coreboot user@debian:~$ cd ~/coreboot/util/intelmetool user@debian:~/coreboot/util/intelmetool$ make user@debian:~/coreboot/util/intelmetool$ sudo ./intelmetool -m
Якщо результат такий же як в першій колонці («Stock firmware») - рівняйте руки і починайте процес прошивки заново. Значення як в 3 і 4 колонках - Intel ME відключений.
3) Чи можна заодно перевірити наявність і роботу Intel AMT:
user@debian:~$ git clone https://github.com/mjg59/mei-amt-check user@debian:~$ cd ~/mei-amt-check/ user@debian:~/mei-amt-check$ make user@debian:~/mei-amt-check$ sudo modprobe mei_me user@debian:~/mei-amt-check$ sudo ./mei-amt-check
Повинно бути:
Unable to find a Management Engine interface - run sudo modprobe mei_me and retry. If you receive the same error, this system does not have AMT
4) Якщо перевірки пройдено успішно - відключаємо ноутбук і повністю його збираємо.
5) (опціонально) Якщо часто працюєте від мережі і хочете якомога довше зберігати ресурс батареї встановіть пороги зарядки батареї: зарядка почнеться нижче 40% і триватиме до 70%:
user@debian:~$ cd ~/coreboot/util/ectool user@debian:~/coreboot/util/ectool$ make user@debian:~/coreboot/util/ectool$ sudo ./ectool -w 0xb0 -z 0x28 user@debian:~/coreboot/util/ectool$ sudo ./ectool -w 0xb1 -z 0x46
6) (опціонально) При включенні ноутбука можна натиснути клавішу Esc і вибрати цифрою «Payload [nvramcui]», в ньому є трохи налаштувань, я застосував такі:
gfx_uma_size=224M wwan=Disable bluetooth=Disable fn_ctrl_swap=Enable
Для збереження і виходу натиснути F1.
7) Колишній Debian встановлений на іншому ноутбуці або свіжовстановленому на цьому ноутбуці (перевіряв двічі) - відмовляється запускатися, потрібно завантажити його з іншого ноутбука і виконати в терміналі:
user@debian:~$ echo "i915" | sudo tee -a /etc/initramfs-tools/modules user@debian:~$ sudo update-initramfs -u
Якщо у вас є більш елегантне рішення без використання іншого ноутбука, будь ласка, поділіться ним.
8) (опціонально) Якщо замість SeaBIOS вибрали GRUB, можна встановити дистрибутив з полнодісковим шифруванням включаючи розділ / boot.