【问题标题】:Is it possible to use EFI to create fully cross-platform disk driver?是否可以使用 EFI 创建完全跨平台的磁盘驱动程序?
【发布时间】:2023-03-07 16:43:01
【问题描述】:

我需要创建一个驱动程序,其行为类似于软件 RAID。例如。驱动程序将需要与多个物理磁盘(甚至可能是网络资源)进行通信,并且对于操作系统来说应该看起来像一个磁盘。

所以两个主要问题是:

1) EFI 驱动程序是否被 Windows、MacOS X 和 Linux 识别和支持?例如。这些系统可以使用 EFI 磁盘驱动程序吗?

2) 理论上是否可以为 EFI 编写这样的驱动程序?我主要关心的是从您自己的虚拟磁盘驱动程序访问其他 EFI 磁盘驱动程序的可能性。

【问题讨论】:

    标签: driver efi uefi


    【解决方案1】:

    我只有时间快速回复,请原谅我的简短!

    Windows、MacOS X 和 Linux 是否认可和支持 EFI 驱动程序?例如。这些系统可以使用 EFI 磁盘驱动程序吗?

    据我所知,只有这些操作系统的引导加载程序使用 UEFI 驱动程序堆栈来加载本机操作系统内核和驱动程序。一旦引导加载程序调用ExitBootServices(),大多数驱动程序都将被卸载,并且(根据规范)此后可能不会调用基于句柄的驱动程序,这意味着没有磁盘驱动程序。与传统的引导加载程序一样,UEFI 引导加载程序仅使用足够长的基本驱动程序来加载操作系统的本机驱动程序。如果您愿意,也可以在预引导环境中使用这些驱动程序(尽管听起来您不这样做!)。
    TL;DR不,这些系统不能使用 UEFI 驱动程序除了加载操作系统。

    理论上是否可以为EFI编写这样的驱动程序?

    您绝对应该能够在现有堆栈之上分层您的 UEFI 驱动程序。如果您以前没有使用过 UEFI,这可能会有点棘手,但从概念上讲,该系统是非常模块化的。在 Internet 上似乎有很多资源可用于helpyouout,而且总是有 BIOS 之外:使用统一可扩展固件接口进行开发,作者 Vincent Zimmer。
    就测试而言,您可以使用Intel's EDKII 中提供的模拟器之一(如果您在 Windows 上,您可能应该使用 Nt32 项目,它适用于 Visual Studio)。
    TL; DR 是的,您可以编写此驱动程序,但它仅适用于预启动环境中的引导加载程序和应用程序。

    【讨论】:

    • 真的一针见血。例如,我想添加 Windows。加载 acpi.sys 后,它使用与 uefi 驱动程序非常相似的 Windows 驱动程序,但需要考虑一件事。 Uefi 驱动程序只是用来启动系统而不是一直运行(就像在早期的 Windows 中一样)。之后,加载符合 windows 的性能编写的驱动程序。是的,硬件供应商必须编写 2 个驱动程序。一个接口 Uefi,一个接口窗口。
    【解决方案2】:

    1) EFI 驱动程序是否被 Windows、MacOS X 和 Linux 识别和支持?例如。这些系统可以使用 EFI 磁盘驱动程序吗?

    没有。一旦你运行 ExitBootServices() ,它就会消失。您可以拥有一个 RunTimeDXE 驱动程序,但这些驱动程序非常有限。他们无法分配内存(VM Map 由操作系统控制)并且他们无法再访问任何 EFI API。它们可用于将信息从固件传输到操作系统,但更好的选择是私有 EFI 表。

    2) 理论上是否可以为 EFI 编写这样的驱动程序?我主要关心的是从您自己的虚拟磁盘驱动程序访问其他 EFI 磁盘驱动程序的可能性。

    引导加载程序是唯一能够使用 EFI 驱动程序的加载程序。如果要进入操作系统级别,则需要编写自己的操作系统驱动程序,使用 EFI 系统表从 EFI 驱动程序获取信息。此类示例是全盘加密实现。

    理论上,您需要编写基于 EFI 块驱动程序、Windows IO 过滤器或 BUS/卷驱动程序、OS X IOStorageFamily KEXT 和 Linux 块设备驱动程序,所有这些都使用 EFI 表将信息从固件传输到操作系统, 变量或 RuntimeDXE。

    由于从 EFI 中可用的平面寻址转换为虚拟内存映射,RuntimeDXE 实现非常困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多