Option ROM - то, что прошивается в BIOS

Option ROM - то, что прошивается в BIOS плат расширений (типа PCI, PCI-E, сетевой карты).
В новой терминологии Legacy Option ROM - это код расширения, работающий без EFI, и соответственно
UEFI PCI Extension ROM Option - та же фигня, только написанная под EFI.

Старый (Legacy) код расширения исполнялся в реальном режиме, точнее (скорее всего) в эмуляции 16-битного из 32-битного.


Исполняется ли UEFI в реальном режиме - вряд ли. Насколько я понял из спецификации новый механизм приспособлен под выполнение в нормальных режимах процессора. Есть даже возможность писать код под виртуальную машину UEFI.

Собранный hello.efi запускается в Shell'е. Только как-то смешно у меня получилось. Есть плата с процом Intel Atom и поддержкой em64T. Компилятор и линкер использовал из Visual Studio из папки AMD, заголовки для EFI указывал em64T. EDK II скачан с Intel'а. Только тогда это сработало. Обычный компилятор, из директорий IA32, IA64, x86_IA32, x86_IA64 - пишет при запуске, что shell не поддерживает данную архитектуру.

Кстати, в статьях указаны инструменты из предыдущих EDK. В новом EDK есть утилита GenFw, которая поддерживает больше конечных форм файла .efi.
Есть EfiRom, которой на фход подаёшь файл .efi, а она делает образ для ROM.
Но обычный Hello Word там почему-то не работает. Как понять, передаётся ли туда вообще код - не понятно. Какой образ туда запихивать - тоже. Application или BootService.
В общем, не понятно как вызывается этот код из ROM'a. И есть ли в BIOS реализация этого вызова.

Покопался тут ещё.
Образ туда запихивается (см. 13.4.2.1 UEFI Spec 2_3_1) BootService Или Runtime Service. Приложения не выполняются, хотя запихнуть их туда можно и можно даже как-то вызвать, но другими методами. Вывод на экран, возможно, не действует (но это по спецификации 1.10). Работа с клавой тоже.

Остаётся непонятным, как должен быть устроен код. Чтобы его откомпилить и хоть что-то получить.

Свой модуль для EFI