Можно ли использовать EFI для создания полностью кроссплатформенного драйвера диска?

Мне нужно создать драйвер, который будет вести себя аналогично программному RAID. Например. Драйвер должен будет взаимодействовать с несколькими физическими дисками (или, возможно, даже с сетевыми ресурсами), и должен выглядеть как диск для ОС.

Итак, два основных вопроса:

1) Распознаются ли и поддерживаются ли драйверы EFI в Windows, MacOS X и Linux? Например. могут ли эти системы использовать драйверы дисков EFI и?

2) Можно ли в теории написать такой драйвер для EFI? Меня больше всего беспокоит возможность доступа к другим драйверам дисков EFI из вашего собственного драйвера виртуального диска.


person LOST    schedule 01.09.2013    source источник


Ответы (2)


У меня есть время только для быстрого ответа, простите меня за краткость!

Распознаются ли и поддерживаются ли драйверы EFI в Windows, MacOS X и Linux? Например. могут ли эти системы использовать драйверы дисков EFI и?

Насколько мне известно, только загрузчики для этих ОС используют стек драйверов UEFI для загрузки собственного ядра ОС и драйверов. Как только загрузчик вызывает ExitBootServices(), большинство драйверы выгружаются, и (согласно спецификации) после этого не может происходить никаких вызовов драйверов на основе дескрипторов, что означает отсутствие драйверов дисков. Как и традиционный загрузчик, загрузчик UEFI использует только базовые драйверы достаточно долго, чтобы загрузить собственные драйверы ОС. Вы также можете использовать эти драйверы в предзагрузочной среде, если хотите (хотя похоже, что вы этого не делаете!).
TL;DR Нет, эти системы не могут использовать драйверы UEFI. кроме как для загрузки ОС.

Можно ли в теории написать такой драйвер для EFI?

Вы определенно должны иметь возможность разместить свой драйвер UEFI поверх существующего стека. Это может быть немного сложно, если вы раньше не работали с UEFI, но концептуально система очень модульная. Похоже, в Интернете есть ряд ресурсов, на которых можно помочь вы out, и всегда есть Помимо BIOS: разработка с помощью унифицированного расширяемого интерфейса встроенного ПО Винсента Циммера.
Что касается тестирования, вы можете использовать один из симуляторов, представленных в Intel EDKII. (если вы работаете в Windows, вам, вероятно, следует использовать проект Nt32, он хорошо работает с Visual Studio).
TL;DR Да, вы можете написать этот драйвер, но он будет работать только для загрузчиков и приложений в предзагрузочной среде.

person Rose Lynn Embry    schedule 08.09.2013
comment
Действительно попал в самую точку. Я хотел бы добавить с окнами, например. После загрузки acpi.sys использует драйверы Windows, которые очень похожи на драйверы uefi, но необходимо учитывать одну вещь. Драйверы UEFI предназначены только для загрузки системы, а не для постоянной работы (как в ранних версиях Windows). После этого выполнения загружаются написанные драйвера, которые соответствуют windows. Да, поставщики оборудования должны написать 2 драйвера. Один для интерфейса Uefi и один для интерфейса Windows. - person marshal craft; 14.12.2016

1) Распознаются ли и поддерживаются ли драйверы EFI в Windows, MacOS X и Linux? Например. могут ли эти системы использовать драйверы дисков EFI и?

Нет. Как только вы запустите ExitBootServices(), он перестанет работать. У вас может быть драйвер RunTimeDXE, но он невероятно ограничен. Они не могут выделять память (сопоставление виртуальных машин контролируется ОС) и больше не имеют доступа ни к каким EFI API. Их можно использовать для передачи информации из прошивки в ОС, но лучшим выбором будет частная таблица EFI.

2) Можно ли в теории написать такой драйвер для EFI? Меня больше всего беспокоит возможность доступа к другим драйверам дисков EFI из вашего собственного драйвера виртуального диска.

Загрузчик — единственный, кто может использовать драйверы EFI. Если вы хотите перейти на уровень ОС, вам нужно написать собственный драйвер ОС, который получает информацию от драйвера EFI с помощью системных таблиц EFI. Такими примерами являются реализации Full Disk Encryption.

Теоретически вам потребуется написать блочный драйвер EFI на основе фильтра ввода-вывода Windows или драйвера BUS/Volume, OS X IOStorageFamily KEXT и драйвера блочного устройства Linux, все они передают информацию из микропрограммы в ОС с использованием таблиц EFI, переменных или Время выполненияDXE.

Реализации RuntimeDXE невероятно сложны из-за преобразования в карты виртуальной памяти из плоской адресации, доступной в EFI.

person d3vi1    schedule 09.11.2015