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