我想让 Bios POST 过程相信已安装显卡。之所以有这种需要,是因为某些不太聪明的人认为没有活动显卡的主板不应该启动。之前在其他问题中已经讨论过这个问题,其中最深入的是:现代个人电脑需要显卡才能运行吗?
我对 BIOS/硬件交互的理解是,Bios 在非常基本的通信级别上识别硬件的种类,此外,没有太多渠道可以进行这种通信(我怀疑是 7 号针脚 A 侧接地)。虽然对于 USB 设备,识别设备性质的代码很容易在网上找到,但对于 PCIe 设备,这似乎是一个严加保密的秘密,或者被琐事所混淆。然而,这一定是教科书上的知识,所以如果有人知道这在哪里指定,或者更好地了解这在实践中是如何工作的,我会很高兴。
我知道我可以通过 BIOS 启动主板,拔出显卡并插入 SATA 适配器。毕竟 PCIe 具有热插拔功能,所以它应该这样工作。但这样做有时会让重启变得很麻烦,导致我延迟更新,以至于出于其他原因我无论如何都需要重启。
答案1
USB 和 PCI 设备识别实际上非常相似。在 PCI 的情况下(PCIe 相同),信息位于 PCI 配置标头中。它们出现在物理地址空间中可预测的位置,因此是可枚举的。
配置头的格式非常公开。有供应商代码、产品 ID、子系统 ID 和修订号。还有一个“类别”代码。显卡的类别是 030000。USB 和 PCI 甚至使用同一套供应商代码 - 例如供应商 0x8086 是英特尔。
这是固件要查找的内容。您无法通过将几个引脚连接在一起来欺骗它。您需要一个标准 PCIe 目标设备的骨架,该骨架使用填充的配置标头来响应查询。
更糟糕的是:我认为伪造一个“简单”的 PCIe 设备并谎报其设备 ID 和类代码是不够的。您的固件将需要交谈该显卡带有标准 VGA 注册接口,这是行不通的。