Coreboot

Coreboot
Логотип программы Coreboot
Скриншот программы Coreboot
Тип встроенное программное обеспечение, загрузчик операционной системы и свободное и открытое программное обеспечение
Авторы Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer, и сообщество coreboot
Написана на Си и язык ассемблера
Первый выпуск сентябрь 1999[2]
Аппаратные платформы ARM, IA-32 и x86-64
Последняя версия
Репозиторий review.coreboot.org/cgit…
Состояние актуальное, разрабатывается
Лицензия GNU GPL 2
Сайт coreboot.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

coreboot (ранее LinuxBIOS[3]) — проект по созданию свободного встроенного программного обеспечения для ряда ПК, одобренный Free Software Foundation. Целью проекта является замена проприетарных и закрытых систем BIOS и UEFI, используемых большинством персональных компьютеров, на легковесный, предназначенный исключительно для загрузки и запуска современных 32-битных и 64-битных операционных систем.

Так как coreboot инициализирует «железо», то проект должен быть адаптирован для каждого чипсета и каждой материнской платы. В результате coreboot доступен только для ограниченного количества аппаратных платформ и моделей материнских плат.

Один из вариантов coreboot — Libreboot, вариант coreboot, целью которого является полное отсутствие проприетарных микропрограмм (Блобов).

Общие сведения

Ronald G. Minnich показывает рост числа пользователей LinuxBIOS

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

Coreboot производит инициализацию аппаратного обеспечения, которую не может в полной мере выполнить операционная система, после чего передаёт управление модулю «полезной нагрузки» (Payload), который может выполнить дальнейшую загрузку ОС, либо выполнить некоторые другие полезные действия.

Coreboot поддерживает архитектуры x86, x86-64, ARM, ARM64, MIPS и RISC-V.

Отличительной особенностью coreboot по сравнению с Legacy BIOS является то, что версия для x86 начинает работать в защищённом режиме после выполнения всего лишь шестнадцати инструкций процессора, в то время как типичные BIOS для платформы x86 работают в основном в реальном режиме работы процессора. Совокупность этих факторов и простота внутреннего устройства делает загрузку с Coreboot очень быстрой (в настоящее время рекорд холодного старта с CoreBoot составляет около 3 секунд).

Хотя в названии LinuxBIOS присутствовало слово Linux, LinuxBIOS мог грузить и другие ядра операционных систем. Например, LinuxBIOS мог напрямую грузить ядро Plan 9. Поэтому он был переименован в coreboot.

Полезная нагрузка

Coreboot сам по себе является только маленькой программой, выполняющей инициализацию оборудования на материнской плате, далее управление передаётся одной из программ полезной нагрузки:

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

Разработка и отладка coreboot

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

Coreboot использует несколько устройств и приёмов для упрощения отладки:

  • Перед инициализацией ОЗУ coreboot инициализирует последовательный интерфейс, который может быть использован для вывода отладочной информации на подключённый к нему эмулятор терминала.
  • Используется POST Card, устройство, подключаемое к шине расширения компьютера и содержащее дисплей, который может выводить две цифры в шестнадцатеричной системе счисления. Программная работа с таким устройством довольно проста, например, на архитектуре x86 достаточно записать байт, который необходимо отобразить на индикаторе POST Card, по адресу 0x80 в адресном пространстве устройств ввода-вывода.
  • Устройство BIOS Savior, представляющее собой две микросхемы ПЗУ, содержащие BIOS и возможность выбрать для работы одно из них. Более дорогой альтернативой такому устройству является использование программатора микросхем ПЗУ.
  • Аппаратный эмулятор центрального процессора либо подключение к центральному процессору через интерфейс JTAG, позволяя таким образом знать результат работы каждой инструкции центрального процессора на самых ранних этапах работы компьютера.

Инициализация ОЗУ

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

См. также

Примечания

  1. Roth A. M. coreboot 24.05 release (англ.) — 2024.
  2. https://www.linuxjournal.com/article/7170
  3. [LinuxBIOS] Welcome to coreboot  (неопр.) (12 января 2008). Дата обращения: 2 июля 2019. Архивировано 1 июня 2013 года.
  4. Архивированная копия  (неопр.). Дата обращения: 18 марта 2012. Архивировано 23 апреля 2012 года.

Ссылки

  • Домашняя страница coreboot.org, а также wiki Архивная копия от 25 июля 2008 на Wayback Machine (англ.)
  • Motherboards supported in coreboot v2 Архивная копия от 16 мая 2008 на Wayback Machine (англ.)
  • Открытые системы BIOS для Linux Архивная копия от 28 апреля 2014 на Wayback Machine
  • LinuxBIOS: компьютер с Линуксом в сердце А. Кухар (апрель 2004)
  • Open BIOSes for Linux Архивная копия от 7 января 2007 на Wayback Machine (англ.) IBM
  • Google Linux BIOS Архивная копия от 19 марта 2012 на Wayback Machine (рус.) LOR 2006
  • Интервью с Ronald G. Minnich, одним из основных разработчиков проекта LinuxBIOS Архивная копия от 26 июля 2013 на Wayback Machine (рус.) LOR 2007