LINUX.ORG.RU
ФорумTalks

[мечты][CoreBoot][LinuxBIOS][EFI] Идеальный загрузчик для x86-машин — альтернатива UEFI и Old BIOS

 , ,


0

1

Начну с требований. Загрузчик должен:
1) быть простым
2) выполнять минимум функций
3) работать быстро
4) позволять осуществлять управление ресурсами компьютера с максимальной гибкостью
5) совместимым с DOS-style BIOS

Думаю, всё. Кажется, что свойства 1-3 и 4 противоречат друг другу, но далее я покажу, что это не так.

Предлагаемая схема загрузчика:
Двууровневая система загрузки, ROM с минимумом функций, SSD с остальным.
Порядко загрузки:
0) Переключение блока питания (или там нажатие кнопки на корпусе) заставляет процессор прыгать на какой-нибудь фиксированный адрес, замапленный на ROM, так что бы команды читались прямо с него. Размер ROM-чипа меньше кэша процессора, следовательно предварительная его загрузка в RAM не нужна.
1) ROM содержит коды инициализации клавиатуры, внутреннего носителя материнской платы, одного или нескольких внешних носителей и отображения на дисплее.
ROM инициализирует минимум необходимого для работы железа, базово — клавиатуру, CMOS и мини-SSD. Загружает настройки CMOS, в зависимости от них устанавливает своё поведение. На этом этапе процессор переключается в защищённый режим, что бы всё остальное работало быстрее. По умолчанию:
1.1) Загружается драйвер клавиатуры и обработчик прерываний
1.2) Драйвер SSD
1.1a) На нажатие клавиш даётся сколько то времени, но не менее секунды.
1.1b) Если поступило прерывание от клавиатуры — то есть нажата ключевая комбинация, например клавиша DEL или F2 (предлагаю реагировать на любую из тех какие когда-нибудь встречались в загрузчиках что бы юзер не гадал что нажимать, то есть Del, F2, F10, F11 и может ещё shift), догружается драйвер дисплея и код отображения меню настройки. В меню настройки должны быть пункты: 1) загрузка системы с SSD, 2) загрузка системы с другого носителя (или нескольких) — как минимум одно устройство, которое можно подключить не разбирая комп, но увлекаться не стоит, флешки, CD, HDD вполне хватит 3) настройки. Настройки должны включать в себя как минимум переключение защиты от записи встроенного SSD. С другой стороны, как вариант можно просто сделать отдельным пунктами «загрузка с SSD без защиты его от записи», «загрузка с флешки без защиты SSD от записи»... Ещё туда можно включить установку часов и пароля. Ну и может быть дефолтного места загрузки (например загружаться сразу с жесткого диска, игнорируя встроенный SSD).
1.3) Происходит чтение встроенного в материнку SSD в фоне, пока ожидается прервывание от клавиатуры. реализовано оно должно быть максимально простым способом, например просто читается в память первые несколько мегабайт и происходит прыжок на самое начало (расчитываем сколько можно прочитать за 1 секунду по скорости SSD-шки).

2.1) часть SSD (носитель впаянный в материнку, ёмкостью не менее 128 MB и максимально быстрый) считана в оперативку. Она не формализуется в спецификациях и там может быть что угодно, например модифицированный GRUB2, эмулятор BIOS, эмулятор (U)EFI или даже сразу ядро Linux (или любое другое на выбор)
2.2) Так как носитель SSD имеет ёмкость порядка гигабайта, то можно туда запихать например SysRescCD и прочей фигни типа антивируса
2.3) загружается что-то вроде гипервизора, инициализирует уже всё железо... В него можно воткнуть все необходимые функции.

Теперь о требованиях:
1-3 — это фичи первоначального загрузчика, он умееть даже меньше чем обычный BIOS. Можно взять даже часть кода U-boot
5 — если загрузка происходит с внешнего носителя, то должна быть возможность делать носитель, который будет грузиться и на старых BIOS. Для этого я предлагаю загружать в RAM первый мегабайт носителя (или его область от 512 кб до 1 мб), а JMP делать на фиксированный в спеках адрес, который будет сразу с начала второго полумегабайта. Думаю что запаса в 512 кб хватит для всех GRUB2, lilo и прочих бут-менеджеров. А вторые 512 кб — это уже код защищённого режима, который загружает что-то вроде GRUB2
4 — очевидно что в мини-SSD на материнке можно установить любой лёгкий дистрибутив GNU/Linux, в том числе с гипервизором и какой-нибудь md5sum в rc-скрипте.

Если мне сейчас скажут, что CoreBoot уже есть и всё это умеет, то я скажу — можно взять и его, собрать соответствующим образом и припаять на материнку флешку. Но это должны делать производители материнок, а не юзеры.

UPD: Что бы реализовать защиту от записи SSD, нужно встроить в материнку аппаратный ключ, который позволяет переключать себя программным способом только в одну сторону (запрет записи). Переключение в сторону разрешения записи должно требовать отключение питания.

Таким образом, код загрузчика из SSD (или код ROM) сможет активировать этот ключ сразу после того как убедится, что юзер не нажал на кнопку входа в меню настроек.

UPD2: Можно использовать съёмный SSD, например картридер microsd-карт c картой. Тогда в ROM достаточно только кода инициализации и чтения вот этого самого microsd и всё. Остальное будет делать код, прочитанный оттуда.

Правда появляется минус — если запорешь загрузчик, придётся открывать корпус компа.

★★★★★

Последнее исправление: Xenius (всего исправлений: 10)
Ответ на: комментарий от DarkV

> BIOS же

Если идёт речь о DOS-style биосе, то оно кривое проприетарное и 16-битное. Но в целом лучше UEFI.

Если речь идёт о BIOS, то я как раз и говорю, каким должен быть BIOS.

Кстати, кастую XVilka

Xenius ★★★★★
() автор топика

что бы юзер не гадал что нажимать

Достаточно научить юзера читать то, что на экране отображается во время POST.

Переключение блока питания ...

При включении что ли? Ну и завернул же ты... ) Между прочим «Переключение блока питания» не у всех приводит к включению ПК, для этого кнопочка есть, её нажать надо, а она в мульте запускает тактовый генератор и что-то там ещё и т. д. Короче или я болван, или тема запуска и инициализации не раскрыта.

SSD

ЗАААЧЕЕЕМ чип NAND-память на материнке??? может вообще весь накопитель будем сразу на материнке распаивать? Херсним, что места надо много, даже как для microATX, не говоря о всяких nano от VIA. Я не хочу переплачивать 5-10 баксов к стоимости материнки ради этой фичи, я считаю, что она не нужна и я точно не буду ей пользоваться.

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

> Пункты 1-4 противоречат пятому.
Не противоречат. Просто для совместимости надо оставить нулевой сектор произвольным.

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

> Достаточно научить юзера читать то, что на экране отображается во время POST.

POST в общем-то не очень нужен.
Может лучше пусть тестированием железа занимается уже операционка?

И да, предлагаемый BIOS будет грузиться очень быстро и юзер не успеет ничего прочитать

кнопочка есть, её нажать надо, а она в мульте запускает тактовый генератор и что-то там ещё и т. д.


Это второстепенно, главное что после включения железа.

ЗАААЧЕЕЕМ чип NAND-память на материнке?

Затем, что бы реализовать аппаратную защиту от перезаписи загрузчика.

Я не хочу переплачивать 5-10 баксов к стоимости материнки ради этой фичи, я считаю, что она не нужна и я точно не буду ей пользоваться.


А как тогда реализовать безопасную загрузку?
По-моему самый простой способ — минимальный Busybox/Linux с гипервизором и проверкой md5sum в rc-скрипте.

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

POST в общем-то не очень нужен.

Феерично, честное слово. А зачем он по-твоему нужен был все эти годы и почему исчезла потребность в нём сейчас? Или он изначально не нужен был?

Это второстепенно

Ну, знаешь, мне резануло слух такое изложение :)

Затем, что бы реализовать аппаратную защиту от перезаписи загрузчика.

А как этот твой SSD перезаписівать можно будет?

А как тогда реализовать безопасную загрузку?

В каком плане безопасную?

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

Какой смысл а том, что этот самый «минимальный Busybox/Linux с гипервизором и проверкой md5sum в rc-скрипте» загрузится за секунду, если ему придётся потратить примерно столько же времени, сколько тратится сейчас, на то же самое, что делается существующими вариантами BIOS?

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

> А как этот твой SSD перезаписівать можно будет?

Ты не читал что ли? Загрузчик первого уровня — самый минимум какой только можно, что бы запустить второй уровень + опциональные фичи типа вызова меню, которые в ROM есть но не выполняются в нормальных условиях — следовательно не ухудшают скорость загрузки.

Вот как раз этот загрузчик первого уровня должен устанавливать защиту SSD от записи, причём так что бы софтверно более это никто сделать не мог в принципе. Если необходимо, можно добавить ещё и аппаратный ключ.

Для серверов можно даже сделать необходимость воткнуть смарт-карту для перезаписи SSD

В каком плане безопасную?


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

Феерично, честное слово. А зачем он по-твоему нужен был все эти годы и почему исчезла потребность в нём сейчас? Или он изначально не нужен был?


Ну изначально BIOS и DOS были в одной микросхеме.

Далее DOS всё-таки вывели из состава BIOS, но всё равно половина функций осталась там.

POST... ну какая-то его часть должна остаться, проверить наличие процессора, оперативки и тд, но большую часть инициализации железа может на себя взять уже мини-ОС.

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

> И как на этом linuxBIOS выставлять частоту проца, например?

В GNU/Linux есть какой-то демон для динамического регулирования частоты. Вот он и будет это делать — на выбор или в системе загруженной с винчестера или в системе загруженной с SSD.

Xenius ★★★★★
() автор топика

а по поводу SSD - уже есть материнка от Gigabyte со встроенным SSD носителем для богомерзкого уёфи.

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

> Какой смысл а том, что этот самый «минимальный Busybox/Linux с гипервизором и проверкой md5sum в rc-скрипте» загрузится за секунду, если ему придётся потратить примерно столько же времени, сколько тратится сейчас, на то же самое, что делается существующими вариантами BIOS?

Эээ, что-то я не понял о чём ты говоришь.

Суть в том что вроде как уже все согласны, что MSDOS-BIOS пора выкидывать. Но UEFI ещё хуже. Я предложил третий вариант.

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

> coreboot + SeaBIOS (а в нем поправить, чего не хватает)

Зачем SeaBIOS? Я считаю что нужно сразу грузить линукс, а он уже будет эмулировать старый биос для альтернативных ОС, если нужно.

А про coreboot говорил — его и юзать для ROM, только в минимальной сборке, которой достаточно что бы загрузить остальное и с патчами что бы поддерживать менюшку где можно снять/защитить защиту SSD от записи.

а по поводу SSD - уже есть материнка от Gigabyte со встроенным SSD носителем для богомерзкого уёфи.


А можно из неё собрать то что я предложил? То есть минимальный CoreBoot в ROM + SSD с остальной обвязкой?

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

> Ты исходишь из того, что безопасная загрузка — фича, без которой нам не прожить?

Прожить можно, но почему бы её и не сделать, что бы машины без зондов не уступали машинам с зондами ни в чём?

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

Я не вижу вообще никакого профита в проверке подписи ядра. Руткиту быть в ядре абсолютно не нужно. Конечно, в ядре его сложнее вычислить, но лучше уж по возможности устранить возможность попадания руткитов.

Накладные расходы на реализацию (все эти распаянные SSD) гораздо выше профита.

Yareg ★★★
()

Во-первых, нельзя объять необъятное — в этом посте ты перечисляешь слишком много технических деталей, которые на самом деле не являются для тебя важными. Ну какая разница, фиксированы ли всякие адреса, по которым производится загрузка, или, например, они лежат в каких-нибудь фиксированных местах.

Во-вторых, игнорируется современное состояние железа. Например:

ROM содержит коды инициализации клавиатуры, внутреннего носителя материнской платы, одного или нескольких внешних носителей и отображения на дисплее.

Клавиатуры нынче USB. Инициализацию дисплея в современных условиях надо делать сразу под разрешение монитора, UEFI так умеет, и для этого нужен драйвер видеокарты. Это играет против компактности. А вот носители все уже с горячей заменой, поэтому их умеет инициализировать ОС всегда.

В-третьих, совершенно не раскрыта тема инициализации карт расширения.

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

> В-третьих, совершенно не раскрыта тема инициализации карт расширения.

Это всё делает код на SSD, который может быть произвольным

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


Пожалуй, тогда надо реализовать вариант UPD2 — съёмный SSD. Тогда ROM не надо инициализировать клавиатуру и монитор.
Но вообще, для настроечного окошка из трёх пунктов хватит и VGA, а включаться оно будет только если пользователь зажмёт клавиатуру.

в этом посте ты перечисляешь слишком много технических деталей, которые на самом деле не являются для тебя важными


Пожалуй да, можно их и убрать. Но имеет ли смысл править пост?

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

>Но вообще, для настроечного окошка из трёх пунктов хватит и VGA, а включаться оно будет только если пользователь зажмёт клавиатуру.

Ты же хочешь не уступать UEFI, а там такой-то графон.

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

> А как тогда реализовать безопасную загрузку?

Также, как и обычно: покупаешь ПАКСЗИ НСД «Аккорд»/«Соболь»/др. в виде обычных PCI-express плат с аппаратными ключами в виде таблеток. Они умеют считать чексуммы биоса, проверять состав железа в серваке, лазать по винчестеру (в т.ч. на разделы ntfs, ext3 и т.д.). Системный блок сервака запираешь в шкаф на замок, опечатываешь, ключи зашиваешь во внутренний карман трусов.

А все эти остальные поделки с распайкой NAND на плате, с UEFI итд — не сертифицированы ФСТЭК РФ, поэтому годятся только для локалхоста.

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

> Они умеют считать чексуммы биоса, проверять состав железа в серваке, лазать по винчестеру (в т.ч. на разделы ntfs, ext3 и т.д.).

Круто, я и не знал, что так можно.
Но и стоит эта штука наверное как половина компа, если не больше.

поэтому годятся только для локалхоста.


Ну не надо так категорично, для серверов тоже хватит вполне — хотя может быть и не тех что хранят персональные данные.

Главное преимущество моего подхода не в этом, а в том что в ROM остаётся минимум без которого не обойтись, а всё остальное переносится на флешку, которая может быть модифицирована юзером произвольным образом (если он при загрузке нажмёт на кнопочку и снимет защиту от записи). То есть даёт ему полную свободу, большую чем в случае даже old BIOS, не говоря уже о новомодных извращениях.

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

> Они умеют считать чексуммы биоса, проверять состав железа в серваке, лазать по винчестеру (в т.ч. на разделы ntfs, ext3 и т.д.).

Круто, я и не знал, что так можно.
Но и стоит эта штука наверное как половина компа, если не больше.

поэтому годятся только для локалхоста.


Ну не надо так категорично, для серверов тоже хватит вполне — хотя может быть и не тех что хранят персональные данные.

Главное преимущество моего подхода не в этом, а в том что в ROM остаётся минимум без которого не обойтись, а всё остальное переносится на флешку, которая может быть модифицирована юзером произвольным образом (если он при загрузке нажмёт на кнопочку и снимет защиту от записи).

Плюс сверхбыстрая загрузка — так как грузится только самое нужное.

Xenius ★★★★★
() автор топика

Домохозяйки рассуждают о ядерной физике. Ну-ну. :)

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

> Имхо, все эти поделки бессильны против уязвимостей виртуализации и SMM

Кстати, по-моему самая ценная идея тут кроме двухуровневой загрузки — flashROM бывает только до 8 MB, чего мало даже для Rescue OS.

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

Плюс трёхуровневый аппаратный джампер:
1) запись SSD всегда запрещена
2) запись SSD сразу после включения разрешена, но можно её заблокировать до перезагрузки
3) заблокировать запись нельзя (этот режим нужен на случай если запорешь вторичный загрузчик, так что он будет блокировать запись до того как появится возможность войти в меню загрузчика.

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

у нас периодически появляются в рассылке люди анонсирующие подобные вещи «супер-пупер защищенных систем», но пока никто не поделился кодом и/или не вывел это в продакшн.

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

> люди анонсирующие подобные вещи «супер-пупер защищенных систем»

Защищённость тут есть, но в этом случае не главное, а главное — легкая замена кода начальной загрузки.

но пока никто не поделился кодом


Для кода надо вначале железо. Хотя я думаю, написать это должно быть не очень сложно. Более того. почти всё уже есть в CoreBoot и payloads к нему.

не вывел это в продакшн.


А вот это уже сложней, учитывая что пока что цели у производителей железа совсем не такие как у потребителей.

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

Он это делает на основе DSDT ACPI таблицы, которая биосом генерится. А как вольтаж регулировать и частоту шины - вообще тёмный лес.

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

> Он это делает на основе DSDT ACPI таблицы, которая биосом генерится.
Что мешает её генерить каким-нибудь dsdtgen который производители железа без проблем напишут?

А как вольтаж регулировать и частоту шины - вообще тёмный лес.

Если BIOS-ы это делают, значит программно это делать можно.

Xenius ★★★★★
() автор топика

В UEFI, если в конкретной его реализации нет той самой «безопасной загрузки», в сущности нет ничего плохого. Не знаю почему его так все не любят.

Nanodesu
()

Что должен делать нормальный адекватный загрузчик:

1. Загружать загрузчик ОС
2. См. пункт 1

И всё. Чтобы этой цели достичь, достаточно научить его понимать все разделы и устройства. Но саму таблицу разделов надо принципиально изменять - убрать нафиг логические и оставить только первичные. Всё!
Но это трудно осуществить, так как есть разнообразие способов загрузки и устройств, с которых надо загружаться. Так что оказывается, что будет куда проще прошить урезанный Linux с утилитами для загрузки.

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

допилите. Только ни к чему все это в биосе - главное дать ядру операционной системы максимум информации для управления компьютером. Все остальное - от лукавого

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

> Но саму таблицу разделов надо принципиально изменять - убрать нафиг логические и оставить только первичные. Всё!

количество первичных очень ограничено

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

> Недавно на ЛОРе видел это фото.

Да ну, убого, ничем не лучше просто BIOS выглядит. Но наверное менее удобно.

есть же открытые биосы, кто мешает допилить до такого состояния?


Кто? Производители материнских плат и прочего железа, конечно. Спеки не дают. А где поддерживается, там оно уже гораздо лучше — есть и EFI и SeaBIOS и OpenBIOS.

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

> В UEFI, если в конкретной его реализации нет той самой «безопасной загрузки», в сущности нет ничего плохого. Не знаю почему его так все не любят.

1) Использует костыльный формат исполнимых файлов от шиндошс (PE)

2) Перегружен всякой фигнёй вроде графического интерфейса или даже антивируса

3) С GNU/Linux часто работает криво, и вообще сильно завязан на шиндошс

4) Переизобретает фичи, которые давно уже были в OpenFirmware и core boot, но реализует их более кривым и неизящным способом

5) Не совместимо со старыми ОС без реальной причины.


Что, мало?

Xenius ★★★★★
() автор топика

Такое говно есть уже даже в платах от ASUS'а. Мгновенно загружаемый дистрибутив линапса с браузером, скайпом и ещё горой всего.

И, скажи, ты ведь не разбираешься в работе BIOS'а и архитектуре пека, верно?

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

Все эти «факты» ты утащил из желтушных новостей в толксах, слэшдотах и прочих опеннетах. Что-то более убедительное есть?

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

>Но и стоит эта штука наверное как половина компа, если не больше.

9-13 Тысяч за штуку. По-моему, даже дёшево.

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

Легко. Ядро в начальные сектора, либо примитивный загрузчик для ядра.

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

И как это мешает сделать это количество неограниченым? Это ограничение идёт для совместимости с ОС CP/M

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

> Все эти «факты» ты утащил из желтушных новостей в толксах, слэшдотах и прочих опеннетах. Что-то более убедительное есть?

И что же из перечисленного неверно?

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

> Но и стоит эта штука наверное как половина компа, если не больше

Если защищать ценную информацию, то цена в 10000 руб./шт. смешна в сравнении с ценностью защищаемой информации.

В остальном - хз, у нас взгляды на защиту информации разные)

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

>проприетарное и 16-битное

вы так говорите, будто это что-то плохое.

DOS-style

ну так, не M$ DOS же. DOS - камень во всём.

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