Coreboot

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Coreboot ARM
Coreboot full.svg
Тип Firmware
Автор(и) Ronald G. Minnich, Eric Biederman, Olli Lo, Stefan Reinauer, спільнота coreboot
Перший випуск 1999
Стабільний випуск 4.1 (13 липня 2015; 1470 днів тому)
Версії 4.6 (8 травня 2017)[1]
Репозиторій review.coreboot.org/cgit/coreboot.git
Платформа x86 х86-64, ARMv7[2]
Написано на головним чином C, лише близько 1% ASM
Стан розробки активний
Ліцензія GPLv2
coreboot.org

Coreboot ARM у Вікісховищі?

Coreboot (раніше LinuxBIOS) — проект зі створення вільних прошивок і BIOS, схвалений Free Software Foundation. Метою проекту є заміна власницьких і закритих BIOS, використовуваних більшістю персональних комп'ютерів, на легковаговий BIOS, призначений виключно для завантаження і запуску сучасних 32- і 64-розрядних операційних систем. Проект LinuxBIOS був початий взимку 1999 в лабораторії Advanced Computing Laboratory в Лос-Аламосі. Результати роботи проекту поширюються на умовах GNU GPL.

Загальні відомості[ред. | ред. код]

Ronald G. Minnich показує зростання числа користувачів Linuxbios

Типова задача coreboot — завантажувати ядро Linux, але, крім цього, coreboot може завантажувати і запускати виконувані файли в форматі ELF, зазвичай звані «корисним завантаженням» (англ. payload). Як корисне завантаження можуть виступати, наприклад, iPXE[en], який здатний завантажити Linux по мережі або SeaBIOS[en] — вільна реалізація BIOS, що дозволяє завантажувати Windows 2000/XP/Vista/7 и *BSD системи (раніше для цього використовувалася завантаження ADLO). Coreboot може завантажити операційну систему з будь-якого підтримуваного пристрою, такого як Myrinet, QsNet[en], або SCSI.

Coreboot виконує ініціалізацію апаратного забезпечення, яку не може виконати операційна система, після чого передає управління ядру ОС, надаючи йому можливість завершити ініціалізацію апаратури.

Coreboot підтримує платформи PowerPC і x86.

Унікальною особливістю coreboot є те, що версія для x86 починає працювати в 32-розрядному режимі після виконання всього лише шістнадцяти інструкцій процесора, в той час як типові BIOS для платформи x86 працюють виключно в 16-розрядному режимі. Робота в 32-розрядному режимі робить завантаження з LinuxBIOS дуже швидким (нині рекорд холодного старту з LinuxBIOS становить близько 3 секунд).

Хоча у назві LinuxBIOS присутнє слово Linux, LinuxBIOS може завантажувати ядра інших операційних систем. Наприклад, LinuxBIOS може безпосередньо завантажувати ядро Plan 9. Тому він був перейменований в coreboot.

Корисне завантаження[ред. | ред. код]

Coreboot сам по собі є лише маленькою програмою, що виконує ініціалізацію обладнання на материнській платі, далі управління передається однієї з програм корисного завантаження:

  • SeaBIOS[en] — вільна реалізація BIOS, що підтримує стандартні системні виклики. Дозволяє завантажувати операційну систему з твердого диска або CD / DVD дисковода. На даний момент протестована з ОС Linux, NetBSD, FreeDOS, і Windows XP/Vista/7. Завантаження інших x86-сумісних операційних систем також повинно працювати.
  • ADLO — реалізація BIOS, що використовує напрацювання проекту Bochs[en] з підтримкою більшості стандартних системних викликів. Дозволяє завантажувати Windows 2000, OpenBSD. В даний час витіснена SeaBIOS.
  • GRUB — популярний завантажувач ОС, що дозволяє завантажувати ядра дуже багатьох операційних систем (включаючи Linux) з широкого діапазону файлових систем, і що володіє безліччю додаткових функцій.
  • LILO — простий завантажувач ОС з підтримкою файлових систем.
  • Etherboot — мережевий завантажувач ОС, що дозволяє завантажувати ОС по мережі в рамках технології PXE.
  • OpenBIOS[en] і Open Firmware[en] — вільні реалізації BIOS.
  • Ядро Linux — також може виступати як корисне завантаження.
  • TianoCore — вільна реалізація UEFI.

Розробка та налагодження coreboot[ред. | ред. код]

Так як coreboot повинен ініціалізувати апаратуру, то він повинен бути адаптований для підтримки кожного системного контролера (чипсета) і кожної плати на основі такого контролера. Додавання підтримки будь-якої нової плати ускладнюється труднощами налагодження: відладочна інформація виводиться за допомогою тих чи інших апаратних засобів, але як організувати висновок, коли засоби виведення ще ініціалізовані?

Coreboot використовує декілька пристроїв і прийомів для спрощення налагодження:

  • Перед ініціалізацією оперативної пам'яті coreboot ініціалізує послідовний інтерфейс, який може бути використаний для виведення налагоджувальної інформації на підключений до нього емулятору терміналу.
  • Використовується POST-карта — пристрій, що підключається до шини розширення комп'ютера і містить дисплей, який може виводити інформацію, зазвичай, це дві цифри в шістнадцятковій системі числення. Програмна робота з таким пристроєм досить проста, наприклад, на архітектурі x86 достатньо записати байт, який необхідно відобразити на індикаторі POST-карти, за адресою 0x80 в адресному просторі пристроїв введення-виведення.
  • Пристрій BIOS Savior, що являє собою дві мікросхеми ПЗУ, містять BIOS і можливість вибрати для роботи одне з них. Більш дорогою альтернативою такому пристрою є використання програматора мікросхем ПЗУ.
  • Апаратний емулятор центрального процесора або підключення до центрального процесора через інтерфейс JTAG, дозволяє таким чином знати результат роботи кожної інструкції центрального процесора на початкових етапах роботи комп'ютера.

Ініціалізація ОЗП[ред. | ред. код]

Найбільш складною частиною coreboot є код, який ініціалізує оперативну пам'ять і її контролер. Справа в тому, що поки ОЗП не ініціалізований, то його неможливо використовувати. Очевидним способом ініціалізації контролера ОЗП і самої оперативної пам'яті без звернень до неї є використання регістрів загального призначення процесора. Для спрощення цього складного завдання був розроблений спеціальний компілятор мови C — romcc, який породжує код, що не виробляє звернень до оперативної пам'яті при своїй роботі. За допомогою romcc компілюється код, який ініціалізує ОЗП шляхом звернення до SPD ROM на модулях DIMM по шині SMBus. Після виконання даного коду ОЗП можна використовувати.

Підтримувані платформи[ред. | ред. код]

Крім x86 і x86-64, Coreboot підтримує процесори AMD Geode. Підтримка почалася процесора з Geode GX, розробленого AMD для OLPC, Artec Group потім додана підтримка Geode LX для своєї моделі DBE61 ThinCan[en]. Нещодавно, код був прийнятий AMD і далі удосконалений для OLPC після переходу на платформу Geode LX. Цей код нині є подальшим розвитком у Coreboot співтоваристві щоб підтримати інші рішення AMD Geode. Coreboot можуть бути прошиті на платформі AMD Geode за допомогою Flashrom[en].

З цього початкового розвитку на платформах на базі AMD Geode, Coreboot підтримка була розширена для багатьох процесорів AMD і чипсетів. Список процесорів включає сім'ю 0Fh і 10h K8, і останні Family 14h на ядрі Bobcat[en], AMD Fusion APU. Coreboot підтримка поширюється також на чипсетах AMD серій RS690, RS7xx, SB600 і SB8x.

Примітки[ред. | ред. код]

  1. https://blogs.coreboot.org/blog/2017/05/08/announcing-coreboot-4-6/
  2. Coreboot ARM. coreboot. 2013-10-15. Процитовано 2014-02-01. 

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]