【问题标题】:Access SATA drive via AHCI directly in efi shell?直接在 efi shell 中通过 AHCI 访问 SATA 驱动器?
【发布时间】:2014-06-06 18:13:46
【问题描述】:

如果我们想通过 EFI shell 中的 AHCI 访问(读/写)SATA 驱动器,是否有任何用于此目的的读/写接口?

也就是说,EFI shell 应用程序是否需要实现 AHCI 规范才能访问驱动器? (构建命令,发出命令并处理命令完成......)

或者应用程序只是调用特定的“读/写”接口(如 Windows 中的 SCSI_PATH_THROUGH),“EFI ahci 驱动程序” 将这些接口转换为低级访问例程?

【问题讨论】:

  • 我不太明白这个问题。你能试着描述一下你真正想做的事情,而不是提炼出来的摘要吗?
  • 首先我想编写 EFI shell 应用程序以通过 AHCI 访问 SATA 驱动器(我按照 ahci 规范在 DOS 模式下完成了此操作。为此,我的应用程序必须构建命令头、命令表和相应的 PRD 条目,然后提交!)其次,据我所知(?)在 efi shell 中有 efi 驱动程序。因此,如果我想在 efi shell 中开发相同的应用程序,我必须使用相同的方式还是有高级读/写接口(在 efi 驱动程序中提供)来调用?

标签: driver sata uefi efi


【解决方案1】:

如果您的 UEFI 中存在可用于 SATA 驱动器的驱动程序,并且您希望访问的文件系统受支持,则读取/写入文件的操作通过简单(ish)协议调用完成。

我能想到的最好的例子是 Linux 内核存根加载器(它将 Linux 内核转换为能够自行加载的 EFI 应用程序)。不过请确保使用当前的 3.15 rc 或更高版本,因为早期代码中存在错误。 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)通过在运行时加载协议(提供 rEFInd 的安装)在 UEFI 中启用额外的文件系统支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2012-02-08
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2011-01-09
    相关资源
    最近更新 更多