【问题标题】:How does a PCIe device appear bootable to the BIOS/UEFI?PCIe 设备如何显示为 BIOS/UEFI 可引导?
【发布时间】:2020-01-24 22:44:39
【问题描述】:

我有一个基于 Intel 的主机系统,带有我公司设计的 PCIe 子卡。我们能够枚举它以允许与英特尔处理器共享内存。我正在寻找可通过 PCIe 访问的子卡内存空间,以被 BIOS/UEFI 识别为可引导。

我可以选择实现众多 HCI 标准之一,但这似乎会很慢,因为这个子卡是由处理器驱动的,而且 HCI 必须在软件中实现。一个更具体的问题是,在枚举子卡后是否存在 BIOS/UEFI 可以识别的已知可引导内存格式?谷歌搜索对我和这些标准并没有取得太大的成功,而且在启动过程中 bios 或 UEFI 如何符合上述标准似乎是部落知识,很难发现。

其他细节:

  • 我想在主机 CPU 上启动 Linux 或 Vxworks。
  • 两个图像都驻留在子卡上的非易失性存储器中。
  • 子卡处理器负责通过 PCIe 将共享内存中的图像呈现给主机 CPU。
  • 就主机 CPU 所知,您几乎可以将子卡视为 NVMe 或 SATA SSD 扩展卡,但子卡负责的功能不仅仅是启动主机 CPU,这就是这些类型的设备的原因不适用于我的应用程序。

【问题讨论】:

  • 您的意思是您希望主机 CPU 从该内存空间运行指令吗?如果该卡有自己的可启动 CPU,您不能让它在开机时自行启动吗? (对不起,如果这是废话,我不开发卡或编写 PCIe 驱动程序。我认为“可引导”在这种情况下具有一些我不知道的特定技术含义。)
  • @peter 我实际上想在主机 CPU 上启动 Linux,但 Linux 映像存储在子卡的内存中。我将更新我的笔记以澄清。
  • 也许您可以公开某种简单的存储设备,其中包含一个存根引导加载程序,该引导加载程序跳转到您要执行的 PCIe 内存。然后它将显示在 BIOS 的设备启动菜单列表中,允许您的卡的用户配置他们的 BIOS 以从它启动或不启动。例如也许是一个带有 USB 大容量存储的 USB 控制器?还是软盘控制器?或者也许将存根引导加载程序放在标准引导 ROM 中,该 ROM 会跳转到 PCIe 读/写内存中的正确地址?

标签: x86 embedded bios pci-e uefi


【解决方案1】:

一个干净的方法是让您的设备公开一个 PCI 选项 ROM(UEFI 2.8 中的第 14.4.2 节)。您可以相当容易地实现一个基本的SIMPLE_FILESYSTEM_PROTOCOL,将图像作为文件系统中的文件公开。无需模拟 HCI。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2020-01-19
    • 2020-05-24
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多