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, целью которого является полное отсутствие проприетарных микропрограмм (Блобов).
Общие сведения
[править | править код]Типичная задача 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. После выполнения данного кода ОЗУ может быть использовано.
См. также
[править | править код]Примечания
[править | править код]- ↑ Roth M. coreboot 24.08 release (англ.) — 2024.
- ↑ https://www.linuxjournal.com/article/7170
- ↑ [LinuxBIOS] Welcome to coreboot (12 января 2008). Дата обращения: 2 июля 2019. Архивировано 1 июня 2013 года.
- ↑ Архивированная копия . Дата обращения: 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