Начну с требований. Загрузчик должен:
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 и всё. Остальное будет делать код, прочитанный оттуда.
Правда появляется минус — если запорешь загрузчик, придётся открывать корпус компа.