gpu display in uefi bios phase
上图相信你似曾相识吧,这是在bios阶段,我们可以看到的界面。但是,你有没有想过这样一个问题,在bios阶段,gpu的驱动并未加载,为什么我们可以看到这样的图像界面?此时,是谁在驱动gpu呢?
在本文接下来的内容中,将会解答上述问题。
在本文中,只考虑主板是uefi firmware的情况。
1. overview
在bios阶段,gpu display的detail如上图所示。
2. OpRegion
OpRegion就是一段内存,我们假设OpRegion大小为为0x3000。
在IGD(Intel Graphics Device)的pci config中,0xFC寄存器存储着OpRegion的start addr。driver通过start addr即可获取到OpRegion的内容。
OpRegion的内容如下所示:
1 | /// |
可以看出,VBT包含在OpRegion中。
3. VBT
The Video BIOS Table, or VBT, provides platform and board specific configuration information to the driver that is not discoverable or available through other means. By other means the most used method here is to read EDID table from the attached monitor, over Display Data Channel (DDC) using two pin I2C serial interface.
The VBT configuration is related to display hardware. The VBT is available via the ACPI OpRegion.
The VBT consists of a VBT Header, a BIOS Data Block (BDB) Header, and a number of BIOS Data Blocks (BDBs) that contain the actual configuration information (supposed to replace the absence of EDID structure with the older monitors).
4. EDID
Extended Display Identification Data(EDID)存储着monitor相关的信息。
5. panel
笔记本屏幕是panel,并非通过VGA,HDMI or DP。它的信息并非存放在edid中,而是存放在vbt中。
6. GOP driver
在bios阶段,是Graphics Output Protocol (GOP) driver驱动着硬件gpu。这样,在操作系统加载之前,就可以看到图形界面了。
Replacing VGA, GOP implementation for UEFI
7. 总结
获取vbt
在bios阶段,gop driver读取OpRegion的内容,从而可以获取到vbt,得到platform and board specific configuration information。获取monitor信息
- 如果你使用的是panel或者不支持edid的monitor,那么,monitor相关的信息已存储在vbt中
- 如果你的monitor支持edid,那么,gop driver通过i2c总线,根据DDC protocol,获取monitor相关的信息
- 显示
最后,gop driver就可以驱动gpu,并将内容展示在monitor上了,你就能看到图形界面了。
参考资料: