您的位置:首页 > 移动开发 > IOS开发

Bios工程师手边事—IGD VBIOS

2015-12-10 22:07 781 查看
现代社会,是计算机技术高速发展的时代。计算机的发展,总是以人们生活的方便为目的。早期的计算机要想看到计算机的计算结果,要根据打孔的卡片来计算输出结果。而现在想看计算机的输出,就方便多了,一台显示器,男女老少皆能看懂。

显示器只是一个输出终端,计算机的核心输出设备是显卡。显卡厂商为了使自己的产品更容易销售,便做了一个叫做VBIOS的东西。它使得我们底层系统BIOS开发者可以不必知道显卡的具体初始化细节,我们只需要找到它执行它,然后再往显存里写数据,显示器便会神奇地显示我们的想要的结果。

作为BIOS工程师,需要对VBIOS做哪些事情呢?笔者现在从INTEL IGD VBIOS的角度来谈一下:

1, 客制化VBIOS,使其适合我们自己的平台。

2, 将VBIOS包入我们的BIOS ROM中。

3, 切屏和调整亮度。

1,客制化BIOS,使其适合我们自己的平台。

INTEL的VBIOS,是以二进制的方式提供给各个主板厂商,并且提供了BMP工具以方便我们对显示接口进行配置。

想要配置VBIOS,先打开BMP(如果你够牛,可以不用BMP遍历VBT区来修改各项值)。然后用BMP加载两个文件,一个是我们的VBIOS数据文件,另一个是脚本配置文件。打开后,我们需要调整的一般也就只有两块,LVDS屏的配置和几个数字PORT的配置。

LVDS:

屏的规格书一般都写有屏的分辨率和屏的色深。我们需要根据这几个值,来选择我们的LVDS屏号,并在Panel Color Depth一栏选择正确的值。

图1,Panel No.



如果主板和LVDS屏上都没有EDID ROM,那么BIOS工程师就需要在EDID SUPPORT一栏选择Disabled。并且要根据屏的Timing Characteristics来配置DTD Timing。

图2,TimingCharacteristics



图3,DTD Timings



DisplayPort:

根据主板需求,开关一些数字显示接口。很多工程师看到Device1,Device2就对应上了DisplayPortB,DisplayPortC。其实Device1,Device2都是针对设备接口来描述的,并不需要一定要和哪个数字显示接口相对应。DisplayPort口比LVDS的配置简单多了,只要认真看仔细,就不会出错。

2, 将VBIOS包入我们的BIOS ROM中。

(1) 包INTEL IGD VBIOS时,我们先要确保我们的VBIOS将会被GenFW,并且会被包到最终的ROM中。EDK和EDK2的具体做法有所不同,但目的都是一致的。

(2) 在第一步中,我们需要建一个GUID来代表VBIOS。在代码中,我们同样需要建立相应的GUID,然后加入我们的代码中,此时要填好正确的VID和DID。

做完以上两步后,Kernel代码会帮我们完成这个功能。

MRC代码执行后。VBIOS会随着BIOS代码被解压至内存的高端地址。在BDS阶段,PCI扫描过后,BiosVideo驱动将会被执行,BIOSVideo会将VBIOS从高端地址拷贝到C段地址起始处。根据PCI OptionROM的结构找到其EntryPoint,切换至实模式执行此EntryPoint。VBIOS执行完后,我们在1中的设定才真正实现了。

3, 切屏和调整亮度。

显示相关功能都交给VBIOS和显卡驱动来做了。系统BIOS能做的功能不多,但终端用户经常使用的功能:切屏和调整亮度却需要我们来触发。在ACPI OS下,我们需要通知驱动执行相关功能,在非ACPI OS环境下,我们要借助INT 10H来执行相应功能。

总结起来如下所示:

表1,切屏和调整亮度

功能

ACPI OS

非ACPI OS

切屏

GHDS()

INT10(AX=5F64H,BX=0401H),注:BL为VBIOS Toggle表。

亮度加

BRTN(0x86)

INT10(AX=5F61H,BX=08XXH),注XX为亮度值

亮度减

BRTN(0x87)

INT10(AX=5F61H,BX=08XXH),注XX为亮度值

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: