LINUX.ORG.RU

Софтверный CSM

 , , , ,


1

2

Как известно, большинство UEFI прошивок умеют эмулировать BIOS загрузку, и эмуляция называется «CSM». Но не все. Возможно ли реализовать CSM в виде EFI-приложения, или BIOS API содержит в себе функции, которые невозможно реализовать поверх EFI?

★★★

Последнее исправление: Werenter (всего исправлений: 1)

Возможно ли реализовать CSM в виде EFI-приложения, или BIOS API содержит в себе функции, которые невозможно реализовать поверх EFI?

Ну, BIOS как минимум предполагает реальный режим. Я хз, как ты собираешься запускать пейлоад в реальном режиме (при этом предоставляя ему все фичи IBM PC BIOS), при этом не вызывая ExitBootServices.

Разве что очень аккуратно с горой трюков и магии писать переключение туда-сюда и «ходить в реальный режим, пока UEFI не видит».

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

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

Короче, работает, используя недокументированные знания о том, как именно устроена данная конкретная реализация UEFI. Я бы предположил так.

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

В чём проблема то? Переключаемся в реальный режим и работаем дальше, как будто UEFI и не было. Возможно, придётся свою реализацию int10/int13 и что там ещё написать, но она не особо сложная. Железо нам уже инициализировали, так что этим заниматься не требуется. Может быть даже можно будет иногда переключаться в защищённый режим и обращаться из него к UEFI-драйверам, но это не обязательно (а можно или нет - не знаю, я не в курсе как UEFI устроено).

firkax ★★★★★
()

BIOS API содержит в себе функции, которые невозможно реализовать поверх EFI?

99% функций BIOS API родом из 80-х, максимум начала 90-х. Очевидно, никаких сложностей с их реализацией быть не может. Да и большинство из них современными ОС всё равно не используется, ведь после загрузски ядра начинается защищённый режим со драйверами ко всему из ядра.

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

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

В UEFI он начинается гораздо раньше. Ещё до загрузки внешних efi-программ (потому подложить CSM-"эмулятор" не выйдет, даже если ты извернёшься такой написать).

Но и в BIOS режим на защищённый можно переключить в любой момент до ядра (потому что ядро это точно такое же приложение, как загрузчик или любой другой исполняемый код), только обратно, ЕМНИП, из него уже не выйти.

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

Не вижу в твоих словах логики вообще. Работа UEFI в защищённом режиме никак не мешает потом перейти в реальный, настроить таблицу прерываний и запустить MBR загрузочного диска.

только обратно, ЕМНИП, из него уже не выйти.

«Не выйти» было только в 286 проце (16 бит, начало 80-х). Уж начиная с 386 режим свободно переключается в обе стороны сколько угодно раз.

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

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

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

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

UEFI не может что-то не позволять, это всего лишь некий код на флешке. Режим работы процессора выбирается его регистрами, а конкретно переход в реальный режим делается так:

mov eax,cr0
and eax,0xFFFFFFFE
mov cr0,eax
jmp far new_cs:new_ip

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

Мне вот заняться нечем кроме как возиться с этой помойкой, тем более что у меня таких машин нет и не планируются. Запустить, разумеется, получится, только для этого надо будет писать драйвер всех стандартных BIOS интерфейсов в формате efi - это дело далеко не одного дня.

firkax ★★★★★
()