Доступ к диску SATA через AHCI непосредственно в оболочке efi?

Если мы хотим получить доступ (чтение/запись) к диску SATA через AHCI в оболочке EFI, используется ли для этой цели какой-либо интерфейс чтения/записи?

То есть нужно ли приложению оболочки EFI реализовывать спецификацию AHCI для доступа к диску? (создать команду, выполнить команду и обработать завершение команды...)

Или приложение просто вызывает определенные интерфейсы "чтения/записи" (например, SCSI_PATH_THROUGH в Windows), а "драйвер EFI ahci" преобразует их в процедуры низкоуровневого доступа?


person liaoo    schedule 22.04.2014    source источник
comment
Я не совсем понимаю вопрос. Можете ли вы попытаться описать то, что вы на самом деле пытаетесь сделать, а не краткую абстракцию?   -  person unixsmurf    schedule 02.05.2014
comment
Сначала я хочу написать приложение оболочки EFI для доступа к диску SATA через AHCI (я следовал спецификации ahci, чтобы выполнить это в режиме DOS. Для этого мое приложение должно создать заголовок команды, таблицу команд и соответствующие записи PRD, а затем отправить его! ) Во-вторых, как я знал (?), В оболочке efi есть драйверы efi. Таким образом, если я хочу разработать одно и то же приложение в оболочке efi, нужно ли мне использовать тот же способ или есть высокоуровневый интерфейс чтения/записи (предусмотренный в драйверах efi) для вызова?   -  person liaoo    schedule 06.05.2014


Ответы (1)


Если в вашем UEFI есть драйвер для диска SATA, и файловая система, к которой вы хотите получить доступ, поддерживается, то чтение/запись файлов выполняется с помощью простых вызовов протокола.

Лучшим примером этого, который я могу придумать, является загрузчик-заглушка ядра Linux (который превращает ядро ​​​​Linux в приложение EFI, способное загружать себя). Обязательно используйте текущую версию rc 3.15 или более позднюю, так как в более раннем коде была ошибка. https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/firmware/efi/efi-stub-helper.c?id=refs/tags/v3.15-rc5 использует функции, определенные в https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git./tree/arch/x86/boot/compressed/eboot.c?id=refs/tags/v3.15-rc5 для доступа к файловой системе.

В качестве альтернативы приложение может поступить так же, как GRUB, и использовать методы для необработанного доступа к блочным устройствам, что позволит приложению получить доступ к файловым системам, не поддерживаемым самим UEFI.

Кроме того, некоторые приложения (например, rEFInd) включают дополнительную поддержку файловой системы в UEFI, загружая протоколы (предоставляемые при установке rEFInd) во время выполнения.

person unixsmurf    schedule 10.05.2014