Bios工程師手邊事—IGD VBIOS

    現代社會,是計算機技術高速發展的時代。計算機的發展,總是以人們生活的方便爲目的。早期的計算機要想看到計算機的計算結果,要根據打孔的卡片來計算輸出結果。而現在想看計算機的輸出,就方便多了,一臺顯示器,男女老少皆能看懂。

    顯示器只是一個輸出終端,計算機的核心輸出設備是顯卡。顯卡廠商爲了使自己的產品更容易銷售,便做了一個叫做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爲亮度值

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章