如何使PCIe设备对BIOS/UEFI具有可引导性?

5
我有一台基于Intel的主机系统,其上安装了一个PCIe子卡,由我的公司设计。我们可以让它枚举,以便允许内存与Intel处理器共享。我希望将通过PCIe访问的子卡内存空间识别为BIOS/UEFI可启动的。
我可以实现HCI标准之一,但这似乎会很慢,因为该子卡是由处理器驱动的,并且HCI必须在软件中实现。更具体的问题是,是否存在已知的可引导内存格式,在枚举了子卡之后,BIOS/UEFI可以识别?对于我来说,谷歌搜索并没有取得太多成功,而且这些标准以及BIOS或UEFI在启动期间如何符合这些标准似乎是部落知识,很难发现。
其他细节:
- 我想在主机CPU上启动Linux或Vxworks。 - 两个镜像都存储在子卡上的非易失性存储器中。 - 子卡处理器负责通过PCIe向主机CPU呈现共享内存中的镜像。 - 您可以将子卡视为NVMe或SATA SSD扩展卡,就像主机CPU所知道的那样,但是子卡负责的功能不仅仅是引导主机CPU,这就是为什么这些类型的设备不适用于我的应用程序的原因。

你的意思是让主机CPU运行那个内存空间的指令吗?如果卡有自己可引导的CPU,难道你不能在上电时让它自行引导吗?(如果我说的不对,请原谅,我不开发卡片或编写PCIe驱动程序。我假设“可引导”在这种情况下有一些特定的技术含义,我不知道。) - Peter Cordes
@peter 我实际上想在主机CPU上启动Linux,但是Linux映像存储在子卡上的内存中。我会更新我的笔记以澄清。 - penguin4hire
也许你可以暴露一些简单的存储设备,其中包含一个跳转到你想要执行的PCIe内存的存根引导加载程序。然后它将出现在BIOS的启动菜单设备列表中,允许你的卡的用户配置他们的BIOS是否从中启动。例如,可能是带有USB大容量存储器的USB控制器?或软盘控制器?或者将存根引导加载程序放在标准引导ROM中,以跳转到你的PCIe可读/写内存中的正确地址? - Peter Cordes
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接