LINUX.ORG.RU

Сoreboot портирован на материнскую плату для Intel Alder Lake

 , , , ,

Сoreboot портирован на материнскую плату для Intel Alder Lake

2

3

Компания 3mdeb объявила об успешном портировании Сoreboot для материнской платы MSI PRO Z690-A WiFi DDR4 для платформы Intel Alder Lake. На данный момент работают не все периферийные устройства; например, нет звука), но уже успешно загружается Ubuntu, и полноценная поддержка оставшейся аппаратной функциональности — лишь дело времени.

Свободная прошивка Сoreboot уже поддерживает достаточно обширный список устройств — от ноутбуков до рабочих станций и серверов — из которого вы сможете найти что-нибудь себе по душе с учётом личных предпочтений, подбирая баланс между свободой и производительностью:

  • без сопроцессоров Intel ME / AMD PSP и с минимальным количеством закрытых блобов (или даже полным их отсутствием — такие платы были дополнительно выделены в проект Libreboot);
  • менее свободное, но более производительное и современное.

Однако, как правило, к моменту появления поддержки платы её уже давно как нет в продаже, и любители свободных безопасных прошивок вынуждены искать б/у комплектующие в хорошем состоянии. И даже если coreboot вдруг предоставляется самим производителем «из коробки», оно идёт с существенной наценкой за мелкосерийное производство и свободный BIOS — что, разумеется, не делает его доступнее, особенно если оно не продаётся в вашей стране.

Перед вами — действительно уникальный случай, когда, несмотря на технические трудности, связанные в том числе и с преодолением большей закрытости современного железа x86, Сoreboot удалось портировать на массово производимую матплату, которая ещё есть в продаже.

Если вы хотите поучаствовать в подобных проектах на благо мира свободных прошивок, эти три вакансии по-прежнему актуальны.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: demidrol (всего исправлений: 6)
Ответ на: комментарий от firkax

К сожалению, Intel планирует всё больше и больше функционала переносить в блобы, так что со временем coreboot'у - если он будет возможен - останется довольствоваться ролью «загрузчика» для коребутовских дополнений вроде SeaBIOS и Tianocore - которые предоставляют пользовательский интерфейс к меню загрузки и прочие более высокоуровневые вещи.

SakuraKun ★★★★★
() автор топика
Ответ на: комментарий от SakuraKun

У меня уже второй раз складывается впечатление что ты не очень ориентируешься в схеме работы этого всего. Либо (это хуже) в ней не очень ориентируются те кто сейчас занимается разработкой coreboot'а.

Интел ничего не «переносит в блобы». В большинстве компов блоб это сам биос, и состоит он из нескольких частей. Начать стоит с того, что разделение на «coreboot/SeaBIOS/Tianocore» совершенно неочевидно ни из твоих объяснений, ни из названий этих частей (а вообще должно было быть очевидно из названий). Теперь выясняется, что, несмотря на декларируемое «мы отреверсили биос и сделали опенсорсную его реализацию», оказывается отреверсили не весь, а самый первый этап, настоящий загрузчик, так и оставили блобом. Заменили какую-то середину, назвав её coreboot'ом (почему-то, хотя оно ни с какой стороны не «boot») и конец, назвав (опять почему-то) SeaBIOS'ом.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Интел ничего не «переносит в блобы». В большинстве компов блоб это сам биос, и состоит он из нескольких частей.

Обычно под биосом на PC/x86 понимают код, который начинается бутблоком, находящимся (начиная с 386) по адресу (4GB - 16 == 0xFFFF_FFF0). Coreboot действительно содержит код, который может заменить собой и бутблок, и остальное содержимое региона bios в SPI-микросхеме.

При этом могут потребоваться некоторые блобы, например Intel FSP (для инициализации DRAM и первоначальной настройки регистров) и VGA GOP/Legacy OpROM (для инициализации видеоадаптера и предоставления стандартного интерфейса для взаимодействия с ним из загрузчика и/или ОС).

Есть другой код, который выполняется раньше бутблока. Есть код, который выполняется на ядрах, недоступных пользователю. Есть код, который находится не на флешке, а в bootrom процессора. Большая часть такого кода подписана Intel, и CPU откажется выполнять его, если попытаться заменить его на свободное ПО. Со временем этого кода становится больше.

Разделение на «coreboot/SeaBIOS/Tianocore» совершенно неочевидно

coreboot - код, который инициализирует платформу (возможно с помощью Intel FSP) и запускает payload. До запуска payload уже работает консоль, DRAM и флеш-память, в которой находится cbfs (в которой находится payload). payload - программа, которая делает что-то полезное с точки зрения пользователя. SeaBIOS и Tianocore - варианты payload, первый реализует интерфейс (программных прерываний и структур в памяти), подобный IBM PC-compatible 16-битным биосам, а второй реализует UEFI. Обычно в payload уже нет кода, который был бы привязан к конкретному чипсету и/или плате, вся специфичная для платформы инициализация уже выполнена в coreboot.

назвав её coreboot’ом (почему-то, хотя оно ни с какой стороны не «boot»)

Это низкоуровневая (core) часть загрузки (boot) компьютера.

назвав (опять почему-то) SeaBIOS’ом

Это реализация интерфейсов BIOS, написанная (в основном) на C (омофон Sea).

kmeaw ★★★
()
Ответ на: комментарий от kmeaw

Обычно под биосом на PC/x86 понимают код, который начинается бутблоком, находящимся (начиная с 386) по адресу (4GB - 16 == 0xFFFF_FFF0). Coreboot действительно содержит код, который может заменить собой и бутблок, и остальное содержимое региона bios в SPI-микросхеме.

(тут надо оговориться, 0xFFFFFFF0 это конечно не начало биоса, а только точка входа, сам биос расположен ниже, но не суть)

Уже давно (начиная с i686 с PAE) не там. Было 0xFFFFFFFF0, а на современных процах этот адрес ещё длиннее думаю. А когда-то раньше было 0xFFFFF0, а ещё раньше 0xFFFF0. Только дело не в этом. По адресу 0xFFFF0 и сейчас есть какой-то код, выглядящий похоже на биос, но там только его имитатор для совместимости с API из 80-х. И речь не про нововведения с IME, этот «имитатор» там был уже во времена вторых пентиумов, а настоящий биос - по указанному 0xFFFFFFFF0. Дело в том, что системная прошивка материнок это не что-то статичное, она развивается, для старого софта остаются разные слои совместимости. Можно было с тем же успехом отреверсить содержимое 0xF0000-0xFFFFF и сказать, что у нас есть опенсорсный биос (напомню, уже во времена вторых пентиумов стартового кода там не было, там были только обработчики системных вызовов от софта). Так и сейчас походу что-то подобное происходит.

Это реализация интерфейсов BIOS, написанная (в основном) на C (омофон Sea).

И тут аналогично: современные «интерфейсы BIOS» это вовсе не только и не столько 16-битные прерывания. Современные 32/64-битные ОС тоже пользуются интерфейсами BIOS, например всякими ACPI-таблицами. А ещё, кстати, давным давно (ещё с времён 486) есть SMBIOS, который тоже не часть того кода, который назывался биосом в древние времена. Вобщем, без всего этого современные ОС тупо не запустятся, и с другой стороныоно весьма сильно привязано к конкретному железу. Называть это опциональным payload-ом странно. Хотя я не уверен что всё это в «SeaBIOS», возможно оно таки в coreboot.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

Под «переносом в блобы» я имел виду следующее: тот функционал, который разработчиком аппаратной платформы ранее предоставлялся в опенсорсном виде, для новых поколений всё больше переносится внутрь закрытых бинарников - блобов. Например, взять историю библиотеки AGESA для низкоуровневой инициализации железа: какое-то время AMD предоставляла её в полностью опенсорсном виде; затем, при подготовке к внедрению PSP, при очередном релизе под новые платформы убрала значительную часть функционала (например, инициализацию DDR-контроллера) в закрытый бинарник и опенсорса стало значительно меньше, а в дальнейшем вообще всё туда заныкала.

В большинстве компов блоб это сам биос

блобами называют закрытые бинарники, исходников для которых у тебя нет. а собранный из имеющихся исходников и бинарников BIOS - это ROM, но никак не блоб.

Начать стоит с того, что разделение на «coreboot/SeaBIOS/Tianocore» совершенно неочевидно ни из твоих объяснений, ни из названий этих частей

на LOR я уже неоднократно рассказывал, что coreboot - сам по себе лишь инициализирует железо, после чего передаёт управление «полезной нагрузке» - которая предоставляет пользователю интерфейс, выбор откуда грузиться и т.д. По умолчанию это - SeaBIOS, им пользуется большинство коребутчиков. я люблю его за простоту и возможность загрузки виртуальных дискет вроде KolibriOS - но он пока что поддерживает только MBR. Если нужен именно GPT, то можно выбрать «опенсорсный UEFI» Tianocore, но он и жирнее и сложнее.

SakuraKun ★★★★★
() автор топика
Ответ на: комментарий от SakuraKun

при очередном релизе под новые платформы убрала значительную часть функционала (например, инициализацию DDR-контроллера)

Даже в открытом железе (HiFive Unmatched на RISC-V архитектуре например) код инициализации памяти представляет проблемы так что он в лучшем случае выложен в малопонятном виде без документации с какими-нибудь таблицами последовательности записи значений в регистры. Инструкцию к контроллеру пямяти выдают видимо только под NDA.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от SakuraKun

Под «переносом в блобы» я имел виду следующее: тот функционал, который разработчиком аппаратной платформы ранее предоставлялся в опенсорсном виде

А я думал авторы coreboot'а сами всё это достали реверсом блобов.

блобами называют закрытые бинарники, исходников для которых у тебя нет. а собранный из имеющихся исходников и бинарников BIOS - это ROM, но никак не блоб.

Так я и пишу - в большинстве компов биос это блоб, исходников к нему нет.

но он пока что поддерживает только MBR. Если нужен именно GPT,

Опять ты пишешь глупости. Загрузка MBR и GPT отличается только на уровне ОС, биосу вообще пофиг на таблицу разделов.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от X512

А что ж там такое намудрили в DDR-контроллерах? Ведь «просто» записать несколько конфигурационных значений в регистры, типа coreboot: mb/ti/beaglebone: Initialize DDR3 (30.03.2021). Или тайны начались лишь с DDR4?

gag ★★★★★
()
Ответ на: комментарий от firkax

Начать стоит с того, что разделение на «coreboot/SeaBIOS/Tianocore» совершенно неочевидно ни из твоих объяснений, ни из названий этих частей (а вообще должно было быть очевидно из названий).

Ну, вкратце, как-то так:

Прямо от ресет-вектора выполняется так называемая прошивка или firmware (firm она потому, что это ровно между hard и soft). Выполняется она на том же центральном процессоре, что и все остальное (начинается исполнение с одного конкретного ядра, обычно нулевого, которое называют BootStrap Processor, а все остальные ядра ничего не делают, пока не получат специальное SIPI-прерывание). Код прошивки исполняется прямо из ПЗУ, подключенного к одной из простых шин — LPC/SPI/eSPI, а затем копируется в ОЗУ после того, как это самое ОЗУ удасться найти и проинициализировать (процесс этот называется тренировкой, memory training). По сути своей, прошивка состоит из двух относительно независимых слоев, нижний из которых занимается инициализацией конкретного оборудования (процессора, памяти, шин), абсолютно необходимого для верхнего слоя и ОС, и верхнего, который реализует интерфейс к этой самой ОС, и которым ОС пользуется для своих собственных целей. Само слово BIOS (т.е. базовая система ввода-вывода) — оно именно про интерфейс (который полностью называется BIOS Interrupt Call, т.к. использует программные прерывания практически для всего), а UEFI уже и называется именно интерфейсом. Intel Management Engine — это отдельный процессор со своей собственной прошивкой (хранящейся обычно на том же ПЗУ, что и основная), стартующий раньше центрального и исполняющий различные сервисные задачи, которые на центральном процессоре исполнять по разным причинам не удобно.

coreboot занимается только инициализацией оборудования, а для предоставления интерфейса с ОС ему нужен т.н. payload, который может реализовать как старый интерфейс BIOS int (SeaBIOS), так и более новый интерфейс UEFI (TianoCore), а может вообще никакого не реализовавывать и запускать ядро Linux напрямую.

coreboot это нижняя половина, SeaBIOS либо TianoCore - верхняя.

MozillaFirefox ★★★★★
()
Последнее исправление: MozillaFirefox (всего исправлений: 4)
Ответ на: комментарий от X512

а у AMD в coreboot есть полностью опенсорсная AGESA под платформы f14/f15tn/f16kb, включая полный код инициализации DDR3-контроллера. Правда, там он очень запутанный, с тренингом контроллера в несколько этапов, и чтобы разобраться как правильно туда вкорячить поддержку XMP - ушло немало времени и сил

SakuraKun ★★★★★
() автор топика
Последнее исправление: SakuraKun (всего исправлений: 1)
Ответ на: комментарий от MozillaFirefox

Само слово BIOS (т.е. базовая система ввода-вывода) — оно именно про интерфейс

Нет. Это выдумки чьи-то. BIOS это набор драйверов для взаимодействия с периферией (ввод с неё, вывод на неё, а так же некоторых мелких других, потому что их некуда больше засунуть было исторически). У них, разумеется, есть какой-то интерфейс. И, очевидно, драйвера эту самую периферию должны уметь и инициализировать.

а может вообще никакого не реализовавывать и запускать ядро Linux напрямую.

Ядру Linux нужен интерфейс к биосу (сразу скажу, не 16-битный). Если его можно запустить без SeaBIOS то опять выходит что там путаница в названиях, и настоящий биос - это таки coreboot, а SeaBIOS это какая-то легаси-совместимая прослойка для доса.

firkax ★★★★★
()
Ответ на: комментарий от X512

Если нужен инициализируемый опенсорсом DDR4, он есть в рабочей станции Talos II на POWER9

SakuraKun ★★★★★
() автор топика
Ответ на: комментарий от X512

I’ll guess you’ll need an NDA from SiFive to get the documentation for all 1480 of those registers.

Если новый RISC-V, на который (были?) такие надежды, уже сейчас вот так отгораживается, то как же хорошо, что у нас уже давным давно есть TI. Например, одна из их новых серий чипов AM64x (например, AM6442) для промышленности и не только (доступные в розницу). DDR4 контроллер с поддержкой low power, ECC, DDR PHY Features (Automatic and software controllable …). В публично доступном файлике объёмом в 9276 страниц есть описание настройки DDR4.

8 Memory Controllers ................................. 4507
8.1 DDR Subsystem (DDRSS)
    This section describes the DDR Subsystem (DDRSS) for the device.
8.1.1 DDRSS Overview ................................. 4509
8.1.2 DDRSS Environment .............................. 4512
8.1.3 DDRSS Integration .............................. 4514
8.1.4 DDRSS Functional Description ................... 4517
8.1.5 DDRSS Registers ................................ 4526
[8.2 Region-based Address Translation (RAT) Module ... 4578]

Там 38 регистров. Да, это обёртка. Получить необходимые значения конфигурационных регистров самого контроллера и PHY в нескольких форматах можно онлайн или загрузить джаваскрипты.

Причём эти чипы с ARM64 ядрами, напичканные разнообразной периферией, стоят порядка 13…23 евро.

Есть и ещё одна нова серия с DDR4: Jacinto 7 (например, DRA829V).

gag ★★★★★
()
Ответ на: комментарий от gag

Если новый RISC-V, на который (были?) такие надежды, уже сейчас вот так отгораживается

Они не отгораживаются, а покупают существующую реазизацию DDR, документация на которую под NDA. Видимо не хотели делать свой DDR контроллер или не смогли найти существующий с открытой документацией.

Также в отличии от ARM, архитектуру RISC-V может реализовывать кто угодно без необходимости лицензирования и выплаты отчислений владельцу архитектуры. Из не мощных ядер есть 100% открытые. Даже книжки по дизайну RISC-V ядер есть.

X512 ★★★★★
()
Ответ на: комментарий от SakuraKun

А почему всем так не нравится перенос части функциональности из железа в блобы?

Железо становится дешевле. В случае обнаружения ошибок производитель их хоть как-то может исправить. В блоб есть шанс доступными дома средствами залезть и изучить его работу, чего нельзя сказать про топологию сложных интегральных микросхем. Иногда можно без детального понимания того, что происходит, взять кусочки кода из разных мест (например, от других моделей) и соединить их в новую комбинацию. Вроде бы сплошные плюсы для пользователя.

Конечно, было бы лучше иметь свободную реализацию с возможностью пересборки и заменой пользователем, но даже проприетарное ПО с этой точки зрения выглядит привлекательнее, чем проприетарное железо.

kmeaw ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.