coreboot

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Coreboot
Coreboot full.svg
Тип

Микропрограмма (BIOS)

Разработчик

Ronald G. Minnich

Написана на

Си и Ассемблер

Первый выпуск

1999

Аппаратная платформа

ARM, IA-32 и x86-64

Последняя версия

4.1 (13 июля 2015)[1]

Лицензия

GNU General Public License

Сайт

coreboot.org

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

Общие сведения[править | править вики-текст]

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[1] — свободная реализация UEFI.

Разработка и отладка coreboot[править | править вики-текст]

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

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

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

Инициализация ОЗУ[править | править вики-текст]

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

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]