Введение

Coreboot — это проект с открытым исходным кодом, направленный на замену проприетарной прошивки (BIOS или UEFI), используемой в большинстве компьютеров, легковесной прошивкой, предназначенной для выполнения только минимального набора задач, необходимых для загрузки и запуска современной 32- или 64-битной операционной системы. Поскольку coreboot инициализирует аппаратное обеспечение на низком уровне, он должен быть адаптирован для каждого поддерживаемого чипсета и модели материнской платы. В результате coreboot доступен только для ограниченного числа аппаратных платформ и моделей материнских плат. Одним из вариантов coreboot является Libreboot — дистрибутив программного обеспечения, частично свободный от проприетарных компонентов, ориентированный на конечных пользователей.

История

Проект coreboot начался с целью создания BIOS, который быстро загружается и разумно обрабатывает ошибки. Он распространяется по лицензии GNU General Public License версии 2 (GPLv2). Основными участниками являются LANL, SiS, AMD, Coresystems и Linux Networx, Inc., а также производители материнских плат MSI, Gigabyte и Tyan, которые предлагают coreboot вместе со своим стандартным BIOS или предоставляют спецификации аппаратных интерфейсов для некоторых своих материнских плат. Google частично финансирует проект coreboot. CME Group, объединение фьючерсных бирж, начало поддерживать проект coreboot в 2009 году. За исключением первых трех моделей, все Chromebooks работают на coreboot. Код из Das U-Boot был интегрирован для обеспечения поддержки процессоров на основе архитектуры ARM. В июне 2019 года coreboot начал использовать программное обеспечение Ghidra, разработанное NSA, для обратной разработки при решении специфических проблем с прошивкой после выпуска этого пакета как свободного и открытого программного обеспечения.

Дизайн

coreboot обычно загружает ядро Linux, но может загружать любой другой автономный исполняемый файл ELF, такой как iPXE, gPXE или Etherboot, которые могут загружать ядро Linux по сети, или SeaBIOS, который может загружать ядро Linux, Windows 2000 и более поздние версии, а также BSD; поддержка Windows 2000/XP и OpenBSD ранее обеспечивалась ADLO. coreboot также может загружать ядро с любого поддерживаемого устройства, например, Myrinet, Quadrics или SCI кластерных соединений. Возможна также прямая загрузка других ядер, например, ядра Plan 9. Вместо прямой загрузки ядра, coreboot может передать управление специализированному загрузчику, такому как версия GNU GRUB 2, совместимая с coreboot. coreboot написан преимущественно на C, с небольшим количеством ассемблерного кода. Выбор C в качестве основного языка программирования облегчает аудит кода по сравнению с современными BIOS для ПК, которые обычно писались на ассемблере, что повышает безопасность. Существует поддержка компиляции и выполнения для написания частей coreboot на Ada с целью дальнейшего повышения уровня безопасности, но в настоящее время она используется лишь эпизодически. Исходный код распространяется под лицензией GNU GPL версии 2. coreboot выполняет абсолютно минимальный объем аппаратной инициализации, а затем передает управление операционной системе. В результате, код coreboot не выполняется после того, как операционная система получит управление. Особенностью coreboot является то, что x86-версия работает в 32-битном режиме после выполнения всего десяти инструкций (почти все остальные BIOS x86 работают исключительно в 16-битном режиме). Это аналогично современной прошивке UEFI, используемой на новом аппаратном обеспечении ПК.

Инициализация DRAM

Самым сложным оборудованием, которое инициализирует coreboot, являются контроллеры DRAM и сама DRAM. В некоторых случаях техническая документация по этой теме может быть закрытой (под NDA) или недоступной. Инициализация оперативной памяти особенно сложна, поскольку до её инициализации её нельзя использовать. Поэтому для инициализации контроллеров DRAM и DRAM код инициализации может использовать только регистры общего назначения CPU или кэш процессора, работающий в режиме Cache as RAM, в качестве временного хранилища. romcc, C-компилятор, использующий регистры вместо оперативной памяти, упрощает эту задачу. С помощью romcc относительно легко осуществлять доступ по SMBus к SPD ROM модулей DRAM DIMM, что позволяет использовать оперативную память. В новых процессорах x86 кэш процессора можно использовать в качестве оперативной памяти до инициализации DRAM. Кэш процессора также необходимо инициализировать в режим Cache as RAM, но это требует меньше инструкций, чем инициализация DRAM. Кроме того, инициализация режима Cache as RAM специфична для архитектур процессоров, что делает её более универсальной, чем инициализация DRAM, которая специфична для каждого чипсета и материнской платы. Для большинства современных x86-платформ для настройки DRAM используются компоненты с закрытым исходным кодом, предоставляемые производителем. Для систем Intel требуется FSP M, в то время как для AMD текущей поддержки нет. В настоящее время для проприетарной UEFI-прошивки на системах AMD используется двоичная AGESA, и ожидается, что эта модель сохранится и для будущей поддержки coreboot на платформах AMD.

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

Существуют также эмуляторы ЦП, которые либо заменяют ЦП, либо подключаются через порт JTAG, например, Sage SmartProbe. Код можно разрабатывать или загружать в эмуляторы BIOS, вместо записи непосредственно в микросхему BIOS.

Европейская конференция Coreboot

Одной из таких встреч является Европейская конференция Coreboot, которая проходила в октябре 2017 года и длилась три дня.

История конференции

Мероприятие и год Дата Город-хост Место проведения Ресурсы Темы ECC2017 26.10. – 29.10 Бохум, Германия RUB Convention Center https://ecc2017.com