Введение
Coreboot — это проект с открытым исходным кодом, направленный на замену проприетарной прошивки (BIOS или UEFI), используемой в большинстве компьютеров, легковесной прошивкой, предназначенной для выполнения только минимального набора задач, необходимых для загрузки и запуска современной 32- или 64-битной операционной системы. Поскольку coreboot инициализирует аппаратное обеспечение на низком уровне, он должен быть адаптирован для каждого поддерживаемого чипсета и модели материнской платы. В результате coreboot доступен только для ограниченного числа аппаратных платформ и моделей материнских плат. Одним из вариантов coreboot является Libreboot — дистрибутив программного обеспечения, частично свободный от проприетарных компонентов, ориентированный на конечных пользователей.
coreboot, formerly known as LinuxBIOS, is a software project aimed at replacing proprietary firmware (BIOS or UEFI) found in most computers with a lightweight firmware designed to perform only the minimum number of tasks necessary to load and run a modern 32 bit or 64 bit operating system. Since coreboot initializes the bare hardware, it must be ported to every chipset and motherboard that it supports. As a result, coreboot is available only for a limited number of hardware platforms and motherboard models. One of the coreboot variants is Libreboot, a software distribution partly free of proprietary blobs, aimed at end users.
История
Проект 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, используемой на новом аппаратном обеспечении ПК.
coreboot is written primarily in C, with a small amount of assembly code. Choosing C as the primary programming language enables easier code audits when compared to contemporary PC BIOS that was generally written in assembly, which results in improved security. There is build and runtime support to write parts of coreboot in Ada to further raise the security bar, but it is currently only sporadically used. The source code is released under the GNU GPL version 2 license. coreboot performs the absolute minimal amount of hardware initialization and then passes control to the operating system. As a result, there is no coreboot code running once the operating system has taken control. A feature of coreboot is that the x86 version runs in 32 bit mode after executing only ten instructions (almost all other x86 BIOSes run exclusively in 16 bit mode). This is similar to the modern UEFI firmware, which is used on newer PC hardware.
Инициализация 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