本本發(fā)明公開一種bios顯卡驅(qū)動方法,涉及顯卡驅(qū)動領(lǐng)域,具體地說是一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法。
背景技術(shù):
顯卡bios(即videobios,以下簡稱vbios),是pcie顯卡提供的一段顯卡控制程序,包含顯卡的型號、規(guī)格及生產(chǎn)廠家等信息,并向bios或操作系統(tǒng)提供顯卡初始化、字符輸出、模式設(shè)定等編程接口。系統(tǒng)初始化時,bios通過pcie總線將vbios加載至內(nèi)存,并執(zhí)行vbios的入口函數(shù)完成顯卡初始化,vbios入口函數(shù)執(zhí)行結(jié)束后,會安裝int10h中斷,bios或操作系統(tǒng)可通過調(diào)用int10h中斷實(shí)現(xiàn)字符輸出、模式設(shè)定等功能。但vbios中的程序?yàn)閤86處理器的二進(jìn)制機(jī)器碼,無法直接在非x86體系架構(gòu)的國產(chǎn)平臺下運(yùn)行。
本發(fā)明針對國產(chǎn)處理器的bios進(jìn)行設(shè)計(jì),提供一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法,利用x86模擬器在非x86體系架構(gòu)下,運(yùn)行x86設(shè)計(jì)的程序,使國產(chǎn)平臺bios顯卡能進(jìn)行驅(qū)動。
x86模擬器可以在現(xiàn)有的軟件和硬件條件下,模擬x86架構(gòu)的微處理器及符合x86輸入輸出規(guī)范的所有必備外設(shè)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)存在的不足和問題,提供一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法,利用x86模擬器在非x86體系架構(gòu)下,運(yùn)行x86設(shè)計(jì)的程序,使國產(chǎn)平臺bios顯卡能進(jìn)行驅(qū)動。
本發(fā)明提出的具體方案是:
一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法,利用x86模擬器讀取pcie顯卡中的vbios,加載至x86模擬器的模擬內(nèi)存中,并執(zhí)行vbios的入口函數(shù)完成顯卡初始化,vbios入口函數(shù)執(zhí)行結(jié)束后,x86模擬器向顯示驅(qū)動提供int10h中斷調(diào)用接口使vbios入口函數(shù)所安裝的int10h中斷實(shí)現(xiàn)自身功能。
所述的方法中x86模擬器讀取顯卡中的vbios,并對vbios進(jìn)行校驗(yàn),若校驗(yàn)正確,則申請存儲空間存放模擬cpu寄存器,同時申請連續(xù)內(nèi)存區(qū)域作模擬內(nèi)存,存儲vbios。
所述的方法中x86模擬器通過調(diào)用接口執(zhí)行vbios入口函數(shù),從模擬內(nèi)存的特定地址讀取并解析x86機(jī)器碼,根據(jù)x86機(jī)器碼的內(nèi)容執(zhí)行對應(yīng)的操作。
所述的方法中x86模擬器根據(jù)所應(yīng)用的國產(chǎn)平臺處理器架構(gòu),對所讀寫的內(nèi)存地址或io地址進(jìn)行映射,可從物理內(nèi)存或pcie設(shè)備中獲得正確的數(shù)據(jù)。
一種x86模擬器,應(yīng)用于所述的方法中,
包括模擬器初始化模塊、x86機(jī)器碼解碼器、地址映射處理模塊、pcie/io讀寫模塊和int10h中斷調(diào)用接口;
其中模擬器初始化模塊讀取顯卡中的vbios,并對vbios進(jìn)行校驗(yàn),若校驗(yàn)正確,則申請存儲空間存放模擬cpu寄存器,同時申請連續(xù)內(nèi)存區(qū)域作模擬內(nèi)存,存儲vbios;同時調(diào)用x86機(jī)器碼解碼器提供的接口,執(zhí)行vbios的入口函數(shù);
x86機(jī)器碼解碼器從模擬內(nèi)存的特定地址讀取并解析x86機(jī)器碼,根據(jù)x86機(jī)器碼的內(nèi)容執(zhí)行對應(yīng)的操作,并為其它模塊提供x86機(jī)器碼的執(zhí)行接口;
地址映射處理模塊根據(jù)所應(yīng)用的國產(chǎn)平臺處理器架構(gòu),對x86機(jī)器碼解碼器所讀寫的內(nèi)存地址或io地址進(jìn)行映射,可從物理內(nèi)存或pcie設(shè)備中獲得正確的數(shù)據(jù);
pcie/io讀寫模塊負(fù)責(zé)對模擬器初始化模塊或地址映射模塊給出的指定pcie或io地址進(jìn)行讀寫;
int10h中斷調(diào)用接口負(fù)責(zé)向顯示驅(qū)動提供int10h中斷調(diào)用接口使vbios入口函數(shù)所安裝的int10h中斷實(shí)現(xiàn)自身功能。
所述的x86模擬器中模擬器初始化模塊將模擬內(nèi)存中部分用于系統(tǒng)內(nèi)存,部分用于smbios,部分用于存放vbios。
所述的x86模擬器中x86機(jī)器碼解碼器從模擬cpu寄存器的cs和ip寄存器中獲取指令地址,并調(diào)用地址映射處理模塊提供的接口,從指令地址讀取指令,并根據(jù)指令內(nèi)容修改模擬cpu寄存器。
所述的x86模擬器中x86機(jī)器碼解碼器從模擬cpu寄存器的cs和ip寄存器中獲取指令地址,并調(diào)用地址映射處理模塊提供的接口,從指令地址讀取指令,若指令需要讀寫內(nèi)存或io,則調(diào)用地址映射處理模塊提供的接口進(jìn)行處理。
所述的x86模擬器中pcie/io讀寫模塊通過pcie內(nèi)存存取接口、vgamemory存取接口、pcie配置空間存取接口和io存取接口來進(jìn)行指定pcie或io地址讀寫。
所述的x86模擬器中int10h中斷調(diào)用接口根據(jù)顯示驅(qū)動設(shè)定的寄存器的值,初始化模擬cpu寄存器,隨后將中斷觸發(fā)指令和中斷號填入模擬內(nèi)存的特定地址,最后調(diào)用x86機(jī)器碼解碼器跳轉(zhuǎn)至該地址執(zhí)行,觸發(fā)vbios所安裝的int10h中斷。
本發(fā)明的有益之處是:
本發(fā)明提供一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法,利用x86模擬器讀取pcie顯卡中的vbios,加載至x86模擬器的模擬內(nèi)存中,并執(zhí)行vbios的入口函數(shù)完成顯卡初始化,vbios入口函數(shù)執(zhí)行結(jié)束后,x86模擬器向顯示驅(qū)動提供int10h中斷調(diào)用接口使vbios入口函數(shù)所安裝的int10h中斷實(shí)現(xiàn)自身功能;
利用本發(fā)明方法通過x86模擬器在非x86體系架構(gòu)下,運(yùn)行x86設(shè)計(jì)的程序,使得國產(chǎn)平臺bios顯卡能進(jìn)行驅(qū)動。
附圖說明
圖1本發(fā)明x86模擬器的模塊框架示意圖;
圖2本發(fā)明方法流程示意圖。
具體實(shí)施方式
本發(fā)明提供一種基于x86模擬器的國產(chǎn)平臺bios顯卡驅(qū)動方法,利用x86模擬器讀取pcie顯卡中的vbios,加載至x86模擬器的模擬內(nèi)存中,并執(zhí)行vbios的入口函數(shù)完成顯卡初始化,vbios入口函數(shù)執(zhí)行結(jié)束后,x86模擬器向顯示驅(qū)動提供int10h中斷調(diào)用接口使vbios入口函數(shù)所安裝的int10h中斷實(shí)現(xiàn)自身功能。
同時提供一種x86模擬器,應(yīng)用于所述的方法中,
包括模擬器初始化模塊、x86機(jī)器碼解碼器、地址映射處理模塊、pcie/io讀寫模塊和int10h中斷調(diào)用接口;
其中模擬器初始化模塊讀取顯卡中的vbios,并對vbios進(jìn)行校驗(yàn),若校驗(yàn)正確,則申請存儲空間存放模擬cpu寄存器,同時申請連續(xù)內(nèi)存區(qū)域作模擬內(nèi)存,存儲vbios;同時調(diào)用x86機(jī)器碼解碼器提供的接口,執(zhí)行vbios的入口函數(shù);
x86機(jī)器碼解碼器從模擬內(nèi)存的特定地址讀取并解析x86機(jī)器碼,根據(jù)x86機(jī)器碼的內(nèi)容執(zhí)行對應(yīng)的操作,并為其它模塊提供x86機(jī)器碼的執(zhí)行接口;
地址映射處理模塊根據(jù)所應(yīng)用的國產(chǎn)平臺處理器架構(gòu),對x86機(jī)器碼解碼器所讀寫的內(nèi)存地址或io地址進(jìn)行映射,可從物理內(nèi)存或pcie設(shè)備中獲得正確的數(shù)據(jù);
pcie/io讀寫模塊負(fù)責(zé)對模擬器初始化模塊或地址映射模塊給出的指定pcie或io地址進(jìn)行讀寫;
int10h中斷調(diào)用接口負(fù)責(zé)向顯示驅(qū)動提供int10h中斷調(diào)用接口使vbios入口函數(shù)所安裝的int10h中斷實(shí)現(xiàn)自身功能。
結(jié)合附圖及具體實(shí)施,進(jìn)一步說明本發(fā)明的技術(shù)方案。
利用本發(fā)明方法及x86模擬器,其中x86模擬器中模擬器初始化模塊通過pcie總線,讀取顯卡中的vbios,并對vbios進(jìn)行校驗(yàn),若校驗(yàn)正確,則申請存儲空間存放模擬cpu寄存器,同時16mb的連續(xù)內(nèi)存區(qū)域作為模擬內(nèi)存,其中:16mb模擬內(nèi)存偏移為0x00000-0x10000的部分用于系統(tǒng)內(nèi)存,偏移為0xc0000-0xf0000的部分用于存放vbios,偏移為0xf0000-0xfffff的部分用于smbios。隨后,調(diào)用x86機(jī)器碼解碼器提供的接口,跳轉(zhuǎn)至vbios入口函數(shù)運(yùn)行;
x86機(jī)器碼解碼器從模擬cpu寄存器的cs和ip寄存器中獲取指令地址,并調(diào)用地址映射處理模塊提供的接口,從指令地址讀取1條指令,并根據(jù)指令內(nèi)容修改模擬cpu寄存器;若指令需要讀寫內(nèi)存或io,則調(diào)用地址映射處理模塊提供的接口進(jìn)行處理。
地址映射處理模塊向x86機(jī)器碼解碼器提供內(nèi)存和io讀寫接口,根據(jù)所應(yīng)用的國產(chǎn)平臺處理器架構(gòu),對x86機(jī)器碼解碼器所讀寫的內(nèi)存地址或io地址進(jìn)行映射:若為內(nèi)存讀寫且地址為0xa0000-0xb0000(即vgamemory),則根據(jù)宿主處理器的架構(gòu)進(jìn)行映射,調(diào)用pcie/io讀寫模塊提供的pcie存取接口進(jìn)行讀寫;若為內(nèi)存讀寫且地址不是0xa0000-0xb0000,則從模擬內(nèi)存的對應(yīng)偏移地址讀寫數(shù)據(jù);若為io讀寫且地址為0xcf8/0xcfc,則調(diào)用pcie/io讀寫模塊提供的pcie存取接口讀寫pcie配置空間;若為io讀寫且地址不是0xcf8/0xcfc,則根據(jù)宿主處理器的架構(gòu)進(jìn)行映射,調(diào)用pcie/io讀寫模塊提供的io存取接口進(jìn)行讀寫;
pcie/io讀寫模塊通過pcie內(nèi)存存取接口、vgamemory存取接口、pcie配置空間存取接口和io存取接口來進(jìn)行指定pcie或io地址讀寫;
int10h中斷調(diào)用接口向顯示驅(qū)動提供int10h中斷的調(diào)用機(jī)制,根據(jù)顯示驅(qū)動設(shè)定的ax、bx、cx等寄存器的值,初始化模擬cpu寄存器,隨后將中斷觸發(fā)指令0xcd和中斷號0x10填入模擬內(nèi)存的特定地址,最后調(diào)用x86機(jī)器碼解碼器跳轉(zhuǎn)至該地址執(zhí)行,觸發(fā)vbios所安裝的int10h中斷,實(shí)現(xiàn)int10h中斷的字符輸出、模式設(shè)定等功能。
利用本發(fā)明方法通過x86模擬器在非x86體系架構(gòu)下,運(yùn)行x86設(shè)計(jì)的程序,使得國產(chǎn)平臺bios顯卡能進(jìn)行驅(qū)動。