38 KiB
Практичною метою проекта Libreboot є підтримка якомога більшої кількості апаратного забезпечення підтримки coreboot, повністю протестованого з попередньо зібраними образами ROM та легкими інструкціями прошивки, направленими на нетехнічних користувачів, щоб привнести якомога більше користувачів в спільноту coreboot. З більшою кількістю користувачів, набагато більше людей відкриються coreboot і це неминуче призведе до більшої кількості людей, які розробляють coreboot, що є критичним проектом руху за вільне програмне забезпечення. З більшою кількістю розробників, більше користувачів матимуть змогу досягти рівень свободи або суверенітету в їх обчисленнях та, тому, цикл має продовжитись.
Ця мета існує, тому що ідеологічною метою Libreboot є поширення свободи програмного забезпечення будь-якими необхідними засобами, настільки багатьом людям, наскільки можливо. Універсальний доступ до джерельного кода, здатність вивчати та змінювати код або перерозповсюджувати його, та виконувати його нескінченно з будь-якою метою надзвичайно важлива. Таким свободам варто бути за замовчуванням для всього програмного забезпечення. Це робить coreboot надзвичайно корисним, навіть у випадках, де двійковий блоб є необхідним для певної функціональності. Свободі варто бути за замовчуванням для всього програмного забезпечення, і це є метою Libreboot допомогти продемонструвати це реальністю.
Політика проекта Libreboot, в межах цієї мети, надання такої підтримки апаратного забезпечення з якомога меншою можливою кількостю двійкових блобів, в ідеалі відсутньою, як у випадку з багатьма конфігураціями, які підтримує Libreboot. Libreboot спробує підтримувати будь-яку дану одиницю апаратного забезпечення, навіть у випадках, де повна свобода програмного забезпечення не є можливою; наприклад, якщо coreboot вимагає блоб для raminit на даній платі, блоб було би надано Libreboot.
Ви можете прочитати політику зменшення/мінімалізації блобів Libreboot в більших подробицях. Будь ласка, прочитайте документ, названий: Політика зменшення бінарних блобів.
Архітектура Coreboot
Хоча не суворо необхідно для не-розробників, Ви можете знайти корисним набуття розуміння на високому рівні того, як працює coreboot, для набуття деякого контексту про деякі із тем, які обговорено в цій статті. Дивіться:
https://doc.coreboot.org/getting_started/architecture.html
100% вільна ініціалізація coreboot
Всі плати, які наразі підтримуються Libreboot можуть мати 100% вільну ініціалізацію зі сторони coreboot. В цьому контексті, це має на увазі будь-яку ініціалізацію, яка виконується головним процесором, для підняття машини для виконання кода.
Завантажувальна прошивка не є єдиним програмним забезпеченням, присутнім в будь-якій машині, та існують деякі контексти, які потрібно зрозуміти, щоб побачити більшу картину.
Причина, чому ця різниця має значення (посилаючись конкретно на сторону ініціалізації coreboot), стане зрозуміліше, в наступних секціях:
Універсальний захист зроблено в Libreboot, дозволяючи (читайте: вимагаючи, згідно з політикою проекту) включення оновлень мікрокоду ЦП, якщо доступно. Ви можете прочитати більше про це і причини чому, прочитавши наступну статтю:
Оновлення мікрокоду ЦП є нормальним
Платформи Intel
Дескрипторне проти бездескрипторного налаштування
Libreboot підтримує декілька материнських плат, які використовують платформи Intel. Серед них існує суттєво два класи машин (для цілей цієї статті):
- Бездескрипторне налаштування
- Дескрипторне налаштування
Що означає дескриптор? Гаразд, традиційно, основна флеш інтегральна мікросхема (яка містить завантажувальну прошивку, зазвичай на яку посилаються як на BIOS) на машинах Intel, містила тільки виконуваний код x86, який відповідає за ініціалізацію всього апаратного забезпечення, такого як ЦП, контролер пам'яті та периферія. Це те, що ми будемо називати бездескрипторне налаштування; в таких конфігураціях, прошивка Intel ME є відсутньою за замовчуванням.
В дескрипторному налаштуванні, флеш поділений на регіони, такі як:
- Intel flash descriptor: завжди перші 4Кбайт флеш. Закодовані двійково конфігураційні дані для машини, та регіони (такі як цей, або інші нижче) оголошено тут. Деяким чином, ви можете думати про це аналогічно до Master Boot Record на жорсткому диску.
- Intel GbE NVM (неволатильна пам'ять gigabit ethernet): закодовані двійково конфігураційні дані, для пристроя Intel gigabit ethernet на платі, якщо такий є присутнім. Вона містить багато налаштувань, таких як MAC-адреса, на якій швидкості мережева карта має працювати, PCI ID, швидкість мерехтіння LED та більше. Якщо використовується мережева карта не Intel, цей флеш-регіон не буде присутнім.
- ME (Intel Management Engine): брудний недолік безпеки в своєму стані
за замовчуванням, ME надає багато функцій, таких як віддалене керування, з повним
мережевим функціоналом, ME є виділеним сопроцесором, окремим від головного ЦП, та
прошивка ініціалізації плюс операційна система для нього завантажується з
цього виділеного регіона в основній завантажувальній флеш-пам'яті. Більше інформації доступно в
частих запитаннях - там де в іншому випадку прошивка ME є присутньою, Libreboot
або видаляє її, або (за допомогою програми
me_cleaner
) переналаштовує її таким чином, що його вимкнено в процесі ініціалізації машини. - Регіон платформи: непрограмні дані, зазвичай просто купа рядків розміщена тут продавцем апаратного забезпечення.
- Регіон BIOS: цей містить основну завантажувальну прошивку, відповідальну за ініціалізацію ЦП, контролера пам'яті та периферії, призводячи машину в стан, де вона може виконувати програми (скоріше за все, що завантажувач, а потім операційну систему). Код coreboot (наданий Libreboot) іде тут.
По суті, ви можете думати про такі "регіони" за аналогією до розділів на жорсткому диску. Що важливо так це те, що інтегральна мікросхема флеш-пам'яті розділена на такі регіони, де кожний регіон призначено для конкретної мети.
На деяких новіших дескрипторних платформах Intel, існує більше регіонів, ніж ці. В деяких випадках, вбудований контролер (EC) може також бути в своєму власному регіоні на завантажувальній флеш-пам'яті; щонайменш, наразі, це не є актуальним ні на якому апаратному забезпеченні, яке підтримує Libreboot (натомість, це зберігається на окремій інтегральній мікросхемі).
Вміст регіонів дескриптора та GbE описано в даташітах Intel, але ті даташіти часто містять зарезервовані секції, де частини залишені незадокументованими. Зусилля зворотної розробки протягом років задокументували деякі з цих прогалин.
Libreboot не розповсюджує образи Intel ME
ME містить багато модулів в собі, і один з цих модулів це код BringUp. Цей код BringUp є власною прошивкою ініціалізації ME, подібною coreboot. Згідно з тією самою аналогією, інші модулі Intel ME (такі як: ядро ME) є подібними (концептуально) до корисного навантаження coreboot.
Так, налаштування нейтралізованого ME є, на сопроцесорі intel ME, аналогічним до виконання coreboot без корисного навантаження. В цьому стані, ME ініціалізує себе готовим до виконання коду, але потім насправді не виконує код. Він таким чином не шкідливий, обидва з точки зору безпеки- та точки зору свободи. Іншими словами, ME є вимкненим.
Libreboot не розповсюджує прошивку Intel ME жодним чином, ні в сховищі
Git, ні в випусках. Де необхідно, Libreboot надає
сценарії, які автоматично отримують та встановлюють її, в нейтралізованому стані, за
допомогою виконання програми me_cleaner
, про яку ви можете почитати тут:
https://github.com/corna/me_cleaner/wiki/How-does-it-work%3F
Це повністю автоматизовано. Якщо ви будуєте образи ROM з lbmk.git
,
автоматизованої системи побудови libreboot, прошивка ME буде завантажена,
нейтралізована за допомогою me_cleaner
та вставлена в фінальний образ ROM автоматично.
Випущені образи ROM, надані попередньо зібраними, упускають прошивку Intel ME. На платформах, які вимагають її, ті самі сценарії, які вставляють її в процесі побудови, можуть також виконувати після-побудову, перевставляючи Intel ME в завантажувальну ROM. Це в зв'язку з проблемними питаннями ліцензіювання, оточуючими розповсюдження образів Intel ME.
Система побудови Libreboot отримує її напряму від продавця для даної машини або набору машин (в якості приклада, Lenovo надає образи для декількох машин ThinkPad). Це гарантує, що кожен користувач отримує точно таку саму конфігурацію (іншою альтернативою є витаскування прошивки Intel ME з оригінального образа продавця, в регіоні ME інтегральної схеми флеш-пам'яті).
Ви можете дізнатись про це більше на наступній сторінці: docs/install/ivy_has_common.md
Прошивка ME є обов'язковою на майже всіх платформах Intel, або машина вимкнеться після 30 хвилин. В нейтралізованому налаштуванні, код BringUp Intel ME вимкне той час скидання в 30 хвилин, дозволяючи вам використовувати ваш комп'ютер нормально, навіть незважаючи на те, що ME не виконує нічого після цього.
Нейтралізований ME дійсно є вимкненим
Зважайте на це: якщо ME тільки робить свій власний BringUp, але потім не виконує нічого, чи це дійсно щось більше ніж незначний відтік часу життя вашої батареї? В нейтралізованому стані, Intel ME є лише неактивним комп'ютером на вашій материнській платі, таким, що нічого не робить, який вам не потрібен і який ви ніколи не будете використовувати. Таким чином, його можна розцінювати нешкідливим з обох перспективи свободи програмного забезпечення та перспективи безпеки, і це є поглядом, який взято проектом Libreboot.
Якщо триматись цих припущень, і ви погодились зі статтею Libreboot про мікрокод, на яку наведено посилання зверху, і зважаєте факт, що (щонайменш, станом на зараз) Libreboot є здатним на повністю вільну ініціалізацію в межах coreboot, тоді ми можемо не без причини бути впевненими, що Libreboot надає гарний рівень свободи програмного забезпечення. Так, незважаючи на те, як дехто може інакше почувати, якщо вони не мають такої перспективи.
Тобто, хоча код BringUp, який залишається для Intel ME є пропрієтарним, та не може бути модифікованим, в зв'язку з перевіркою криптографічного підпису апаратним забезпечення, це є програмним забезпеченням для пристрою, який ви ніколи не захочете насправді використовувати в реальному світі, тобто якщо він не робить нічого в нейтралізованому стані, тоді його може бути проігноровано на практиці. Це залежить від вашої точки зору, і деякі люди можуть займати більш догматичний підхід, ніж цей. Проект Libreboot зважає нейтралізовані налаштування ME прийнятними, обидва з перспективи безпеки та перспективи свободи програмного забезпечення.
Більше про видалення/вимкнення Intel ME
Libreboot надає шлях повністю видалити прошивку ME, зберігаючи повне використання машини, на платформах GM45 з південним мостом ICH9M. Це ноутбуки: ThinkPad X200/T400/T500/W500 і так далі з того покоління. Дивіться: docs/install/ich9utils.md
На новіших платформах використовується me_cleaner
. Ви можете прочитати про це тут:
https://github.com/corna/me_cleaner/wiki/How-does-it-work%3F
Option ROM VGA
Нативна ініціалізація відео підтримується та увімкнена, для всіх платформ Intel, які підтримуються, що мають її. Джерельний код надано coreboot, під вільною ліцензією.
На деяких машинах, подвійна графіка є можливою. Наприклад, конкретні материнські плати ThinkPad T440p ідуть з обома графічними картками Intel та Nvidia, де ви можете або використовувати обидві, або тільки Intel; для використання графічної картки Nvidia, двійковий блоб вимагається, який Libreboot не надає (і не захоче надавати), натомість вибираючи увімкнення тільки графічної карти Intel (де вільний код ініціалізації є доступним в coreboot). В більшості материнських плат T440p, тільки графічна картка Intel є фізично присутньою.
На деяких материнських платах ThinkPad T400, W500 та T500, графічні карти ATI та Intel є присутніми, і ви можете використовувати або одну, або обидві. Ще раз, Libreboot тільки підтримує графічну картку Intel, де coreboot має вільний код ініціалізації.
Це є прикладом нюансованого характеру в політиці Libreboot. Libreboot міг би надавати подібні блоби, з судженням, що необхідно використовувати ці додаткові процесори. Однак, на практиці, ці машини є повністю придатними для використання лише з графікою Intel, для якої джерельний код є доступним.
За замовчуванням Libreboot є завжди свобода, коли можливо на практиці. Користувачі, які бажають мати використання додаткових графічних процесорів, на такому апаратному забезпеченні, мають взяти до уваги наступний параграф у політиці Libreboot:
"Принципам зверху варто бути застосованими до конфігурацій за замовчування. Однак, libreboot є налаштовуваним, дозволяючи користувачу робити все, що заманеться." - налаштовуваний, напевно! Дивіться: docs/maintain/
Ініціалізація контролера пам'яті
Libreboot має повністю вільну ініціалізацію, доступну для всіх контролерів пам'яті Intel на платформах, які підтримуються. Це включає Haswell (ThinkPad T440p та W541), станом на Libreboot 20230319 та пізніші.
Платформи ARM (chromebook)
В більшості без блобів, за вийнятком вимоги на материнських платах daisy
та peach
включати блоби завантажувача BL1. Це:
- HP Chromebook 11 G1 (daisy-spring)
- Samsung Chromebook XE303 (daisy-snow)
- Samsung Chromebook 2 13” (peach-pi)
- Samsung Chromebook 2 11” (peach-pit)
Libreboot наразі не розміщує ці блоби взагалі, і це вважається помилкою; це задокументовано на сторінці сумісності апаратного забезпечення. Їх можна додати вручну користувачем, але документації для цього наразі бракує на веб-сайті Libreboot.
Список необхідних блобів, конкретно для кожної плати
Ця стаття ретельно пояснила, в деталізованому огляді, точний характер того, які бінарні блоби розміщуються в Libreboot. Знову, повністю вільна ініціалізація з coreboot є доступною на всіх наразі підтримуваних платах.
З coreboot є критичним аспектом цього, але повні межі Libreboot це основна завантажувальна інтегральна схема, яка (в деяких випадках) містить програмне забезпечення не з coreboot.
Ось список, для кожної плати, цих блобів:
Intel/x86
Intel ME:
Нейтралізований ME потрібен на цих цілях:
dell9020mt_nri_12mb
, dell9020sff_nri_12mb
, e5420_6mb
, e5520_6mb
, e5530_12mb
, e6220_10mb
, e6230_12mb
, e6320_10mb
, e6330_12mb
, e6420_10mb
, e6430_12mb
, e6520_10mb
, e6530_12mb
, hp2170p_16mb
, hp2560p_8mb
, hp2570p_16mb
, hp8200sff_4mb
, hp8200sff_8mb
, hp820g2_12mb
, hp8300cmt_16mb
, hp8300usdt_16mb
, hp8460pintel_8mb
, hp8470pintel_16mb
, hp8560w_8mb
, hp9470m_16mb
, t1650_12mb
, t420_8mb
, t420s_8mb
, t430_12mb
, t440plibremrc_12mb
, t520_8mb
, t530_12mb
, w530_12mb
, w541_12mb
, x220_8mb
, x230_12mb
, x230_16mb
, x230t_12mb
, x230t_16mb
Як заявлено, Libreboot надає це в стані, де ME більше не є
загрозою для безпеки. Він ініціалізує себе, але потім нічого не робить, тому його
вимкнено. Це зроблено використовуючи me_cleaner
. Дивіться:
https://github.com/corna/me_cleaner/wiki/How-does-it-work%3F
KBC1126 EC firmware (HP laptops):
This applies to the following targets: hp2170p_16mb
, hp2560p_8mb
,
hp2570p_16mb
, hp8470pintel_16mb
, hp9470m_16mb
.
EC firmware
is inserted into main boot flash, rather than being on a separate
IC. This is better because libre replacements would be more easy to install in
the future, and reverse engineering is made much easier by it. Libreboot's
build system handles such firmware with scripts, automatically downloading
it during the build process. Libreboot 20230423 onwards does scrub EC firmware
and provide functionality in a special script, to insert them with cbfstool
at the correct offset as defined by coreboot config for each board.
SMSC SCH5545 Environmental Control
This is a tiny firmware required for fan control, on Dell Precision T1650.
CPU microcode:
Оновлення мікрокоду для ЦП надано на всіх платформах x86, за замовчуванням. Не вимагається технічно, але надзвичайно рекомендовано. Виконайте для видалення:
cbfstool filename.rom remove -n cpu_microcode_blob.bin
Видалення оновлень мікрокоду вплине на стабільність системи негативно, впроваджуючи нестандартну поламану поведінку і його результатом може бути неможливість машини правильно завантажуватись. В інших випадках, видалення його може поламати такі функції, як S3 suspend/resume.
Блоби мікрокоду ЦП включено за замовчуванням, на всіх платах x86. В той час як не потрібні в більшості випадків, їх використання надзвичайно рекомендовано. Дивіться для причин чому: news/policy.uk.md#більш-детальна-інформація-про-мікрокод
Intel Flash Descriptor (IFD):
Intel Flash Descriptor надано в якості блобів на деяких платах, але це не є блобами програмного забезпечення. Це конфігурації, які надано в двійковому форматі, повністю придатному для читання вільним програмним забезпеченням. Наприклад:
- Програма Libreboot
ich9gen
створює флеш-дескриптори ICH9M з нуля. - Програма Coreboot
ifdtool
має обширні функції для маніпуляції Intel flash descriptor. - Програма Coreboot
bincfg
створює будь-який вид бінарних з файлу.spec
, який може описувати будь-який бінарний формат в форматі, який можна прочитати людині. Вона містить декілька Intel flash descriptor для декількох платформ, але Libreboot не використовує їх.
Конфігурація Intel GbE NVM (конфігураційні дані, закодовані двійково, для гігабітної мережевої картки):
- Програма Libreboot
ich9gen
також створює образи GbE NVM, конкретно для мережевих карток Intel, які використані в Thinkpad GM45. - Програма Libreboot
nvmutil
може маніпулювати образами GbE NVM
ARM/chromebook
BL1 bootloader (peach/daisy):
BL1 завантажувач потрібен на: daisy_snow
, daisy_spring
та peach_pit
.
Висновки
З вищезазначеного, ви можете бачити, що Libreboot в дійсності надає політику зменшення бінарних блобів, з наголошенням на зменшенні, що є найбільш критичним.
Libreboot міг би додати багато блобів для різних платформ, для увімкнення різноманітних додаткових функцій, які натомість він уникати додавати, в точності тому, що метою проекта Libreboot є поширення вільного програмного забезпечення та мінімізація сили, яку розробники пропрієтарного програмного забезпечення мають над користувачами.
Я сподіваюсь, що ця стаття надала їжу для роздумів.
Відступ: свобода обладнання
Жодна з машин, які наразі підтримуються Libreboot не має вільного апаратного забезпечення, в тому сенсі, що інтегральні схеми не ідуть з публічно доступними файлами verilog та подібним. Ви не змогли би виготовити власну заміну цих машин.
Деякі схеми та файли бордв'ю описують друковані плати окремих машин, які доступні онлайн, через різноманітні канали. Ви маєте знайти їх власноруч; одного дня, рух Право на ремонт, сподіваюся, принесе універсальний доступ до таких документів спільноті.
Для подальшого читання
В цій статті описано код, який міститься в основній завантажувальній флеш-пам'яті, але будь-який комп'ютер, який ви придбаєте, матиме тони мікропрограм в інших частинах системи. Деякі відомості доступні на сторінці частих запитань Libreboot. Дивіться:
- faq.uk.md#який-рівень-програмної-свободи-дає-мені-libreboot
- faq.uk.md#яке-ще-мікропрограмне-забезпечення-існує-за-межами-libreboot
З них найбільш критичним є прошивка жорстких дисків/твердотілих накопичувачів та прошивка EC. Проблема описана в цих двох посиланнях застосовується до багатьох різних комп'ютерів, включаючи Libreboot, та практично кожний інший комп'ютер в світі.