Bochs X86 PC模擬器原理與啟動流程分析-熊海泉_第1頁
Bochs X86 PC模擬器原理與啟動流程分析-熊海泉_第2頁
Bochs X86 PC模擬器原理與啟動流程分析-熊海泉_第3頁
Bochs X86 PC模擬器原理與啟動流程分析-熊海泉_第4頁
Bochs X86 PC模擬器原理與啟動流程分析-熊海泉_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

2024/5/11BochsX86PC模擬器原理與啟動流程分析1BochsX86PC模擬器原理與啟動流程分析熊海泉xionghaiquan@2024/5/112主要內(nèi)容PC系統(tǒng)及X86模擬器模擬主控模塊系統(tǒng)板的模擬內(nèi)存模塊的模擬CPU的模擬I/O模塊的模擬Bochs模擬器初始化啟動過程基于Bochs的實驗環(huán)境下一步工作思路參考資料BochsX86PC模擬器原理與啟動流程分析2024/5/113典型PC系統(tǒng)構(gòu)成PC系統(tǒng)及X86模擬器2024/5/114常見X86模擬器比較典型的X86模擬器BochsPTLsimCOTsonQemu…PC系統(tǒng)及X86模擬器Bochs模擬器Bochs是一個X86PC的模擬器,它可以模擬幾乎所有類型的X86CPU,包括16位,32位和64位(X86_64),內(nèi)存以及I/O設(shè)備,在其上可以運行Linux,Windows等操作系統(tǒng)。其中模擬的X86_64的工作方式包括以下兩類:IA-32模式:包括實模式,保護(hù)模式和虛擬8086模式三個子模式IA-32e模式:包括長模式和兼容模式5PC系統(tǒng)及X86模擬器Bochs模擬器基本構(gòu)成6PC系統(tǒng)及X86模擬器模擬主控模塊為用戶提供交互的系統(tǒng)配置信息更改以及控制Bochs模擬器的運行根據(jù)用戶的配置信息在模擬主控對象中建立配置信息參數(shù)樹并初始化,為Bochs系統(tǒng)硬件的初始化提供輸入啟動Bochs模擬器并進(jìn)入客戶操作系統(tǒng)的引導(dǎo)將宿主機的外部事件如,鍵盤鍵擊,鼠標(biāo)移動等通過信號量機制從而觸發(fā)Bochs模擬器相應(yīng)設(shè)備進(jìn)行響應(yīng)(理解不一定正確)7模擬主控模塊2024/5/118系統(tǒng)板主要功能為系統(tǒng)外設(shè),系統(tǒng)板等模塊提供工作時鐘,從而驅(qū)動各功能模塊的正常工作負(fù)責(zé)為外設(shè)向CPU模塊觸發(fā)中斷控制信號,總線請求信號等功能負(fù)責(zé)提供CPU系統(tǒng)復(fù)位,外設(shè)復(fù)位以及A20地址線開啟與關(guān)閉,I/O端口讀寫的相關(guān)功能系統(tǒng)板的模擬2024/5/119系統(tǒng)板的實現(xiàn)模型64個定時器資源定時器實現(xiàn)的控制字段,其中currCountdown為0時將觸發(fā)CountdownEvent時間,從而執(zhí)行某一個定時器函數(shù),這個函數(shù)通常是I/O設(shè)備注冊的回調(diào)函數(shù)系統(tǒng)板定時器實現(xiàn)的激勵來源I/O設(shè)備初始化時注冊的定時器回調(diào)函數(shù)實現(xiàn)一些系統(tǒng)控制功能的字段,如HRQ代表示否向CPU發(fā)出總線請求等系統(tǒng)板的模擬系統(tǒng)板與CPU及I/O模塊的相互關(guān)系set_HRQ(用于DMA向系統(tǒng)發(fā)出總線請求)set_INTR(調(diào)用CPU的set_INTR)MemoryMappingChanged(TLB刷新)invlpg(清除頁表)Reset(CPU復(fù)位)在CPU每次指令執(zhí)行循環(huán)cpu_loop中通過調(diào)用調(diào)用系統(tǒng)板的tick來實現(xiàn)系統(tǒng)板上各個定時器系統(tǒng)復(fù)位Reset或CPU的中斷響應(yīng)IAC向系統(tǒng)板注冊工作驅(qū)動的定時器及中斷10系統(tǒng)板的模擬2024/5/1111系統(tǒng)板初始化此時可以建立的概念就是,系統(tǒng)板的定時器資源已經(jīng)生成,可以供I/O設(shè)備注冊使用,同時I/O設(shè)備通過系統(tǒng)板向CPU發(fā)送系統(tǒng)控制信號的功能已經(jīng)準(zhǔn)備就緒系統(tǒng)板的模擬內(nèi)存模塊的基本功能根據(jù)系統(tǒng)配置,一次性的向宿主機分配一片存儲空間(應(yīng)該不是物理內(nèi)存),建立一套與實際機器類似的內(nèi)存空間映像在X86中,有些I/O設(shè)備可能以內(nèi)存映射的方式存取而不是通過傳統(tǒng)的in或out指令實現(xiàn),如果有這需求,相應(yīng)的I/O設(shè)備必須向內(nèi)存模塊注冊I/O讀寫程序,這樣當(dāng)使用readPhysicalPage等接口時會判斷是否是I/O設(shè)備空間而進(jìn)行不同的存取操作內(nèi)存的一個主要功能就是向CPU提供存取指令和數(shù)據(jù),以便CPU能夠不停的取指,執(zhí)行及回寫,實現(xiàn)各種指令的功能在Bochs硬件初始化時向Bochs模擬的內(nèi)存空間的ROM地址空間加載可運行的BIOS二進(jìn)制程序,以為后序Bochs復(fù)位運行作準(zhǔn)備12內(nèi)存模塊的模擬內(nèi)存模塊的實現(xiàn)模型2024/5/11132,記載目前系統(tǒng)內(nèi)存使用情況的一些字段,用于實現(xiàn)內(nèi)存的分配管理3,實現(xiàn)I/O內(nèi)存映射的注冊管理服務(wù),其中包含了地址信息,當(dāng)系統(tǒng)通過readPhyicalPagewritePhysicalPage等存取函數(shù)時會判斷是否是一個I/O內(nèi)存映射,如果是則執(zhí)行I/O內(nèi)存映射處理函數(shù)1,初始化時,根據(jù).bochsrc配置文件中的(memoryguest=512host=256)從宿主機中預(yù)先分配好Bochs模擬器所需的內(nèi)存,并用vector,rom等保存相應(yīng)的起始地址4,內(nèi)存模塊為CPU提供了存取指令數(shù)據(jù)以及為I/O提供了內(nèi)存映射服務(wù)內(nèi)存模塊的模擬內(nèi)存模塊與CPU及I/O交互關(guān)系為CPU模塊提供的服務(wù)數(shù)據(jù)和指令的存取MMU地址變換為I/O提供的服務(wù)I/O內(nèi)存映射讀寫處理注冊管理實現(xiàn)I/O內(nèi)存映射的存取14內(nèi)存模塊的模擬內(nèi)存模塊的初始化2024/5/1115為Bochs模擬器準(zhǔn)備好了內(nèi)存空間,可以為CPU提供存取指令數(shù)據(jù)服務(wù),同時也為需要實現(xiàn)I/O內(nèi)存映射的設(shè)備準(zhǔn)備好了注冊使用功能內(nèi)存模塊的模擬CPU模塊的主要功能根據(jù)X86指令的邏輯功能分別實現(xiàn)各類X86指令,大部分指令按其功能分別用不同的源代碼文件實現(xiàn)通過prefetch,fetchDecode以及具體指令處理函數(shù)及異常處理等實現(xiàn)Bochs指令執(zhí)行循環(huán)邏輯為CPU指令的執(zhí)行提供數(shù)據(jù)和指令地址的變換,安全保護(hù)等功能,最終實現(xiàn)對內(nèi)存模塊的存取,具體主要通過translate_linear,access_linear,dtranslate_linear,itranslate_linear主要包括系統(tǒng)復(fù)位,系統(tǒng)初始化等功能實現(xiàn)X86系統(tǒng)的各類系統(tǒng)寄存器和通用寄存器以及其狀態(tài)的變換邏輯在系統(tǒng)中設(shè)置一個全局標(biāo)志信息表示異步中斷異常是否有發(fā)生,相應(yīng)的異常請發(fā)生只要將其進(jìn)行相應(yīng)設(shè)置即可16CPU的模擬X86架構(gòu)CPU的模擬-實現(xiàn)邏輯結(jié)構(gòu)CPU的核心邏輯就是指令執(zhí)行循環(huán)17CPU的模擬CPU指令循環(huán)檢測系統(tǒng)是否有異常、中斷等事件發(fā)生,這種事件的來源有APIC,INIT,SMI,INTR,reset,bx_stop_simulation,系統(tǒng)板DMA總線請求以及某些產(chǎn)生異常的指令根據(jù)邏輯地址獲取線性地址,再由線性地址變換到物理地址,這樣就準(zhǔn)備好了CPU存取一條指令I(lǐng)P地址指針,可以由CPU通過內(nèi)存模塊獲取指令了根據(jù)上一步獲取的地址開始從內(nèi)存模塊中獲取指令并譯碼填充在待處理的指令變量i中,供下一步調(diào)用對譯碼好的指令進(jìn)行調(diào)研執(zhí)行,完成指令的邏輯功能驅(qū)動系統(tǒng)板中的定時器,從而為驅(qū)動Bochs其余設(shè)備等模塊工作。18CPU的模擬CPU模塊的初始化2024/5/1119CPU會在bx_init_hardware中由系統(tǒng)板復(fù)位觸發(fā)CPU的復(fù)位,從而使得CPU中各寄存器回到Intel手冊上關(guān)于處理器初始化的初值,之后系統(tǒng)將會從0XFFFFFFF0處開始執(zhí)行I/O模塊的主要功能負(fù)責(zé)Bochs模擬設(shè)備實例的創(chuàng)建與初始化,到底要創(chuàng)建哪些設(shè)備是根據(jù)模擬主控對象初始化時收集的系統(tǒng)配置信息決定在X86架構(gòu)中有專門的I/O指令,負(fù)責(zé)對各類設(shè)備寄存器的操作,此功能就是提供I/O地址空間管理的,為不同的端口根據(jù)設(shè)備需要提供不同的讀寫函數(shù)負(fù)責(zé)外部設(shè)備資源的分配管理,供各外設(shè)使用為CPUI/O指令提供的具體實現(xiàn)各類具體外設(shè)的功能的邏輯模擬,一般包括初始化,復(fù)位,以及設(shè)備專用功能的模擬BochsI/O模塊的實現(xiàn)模型作為與其它Bochs模塊如CPU,系統(tǒng)板的接口,通過它可以找到所有Bochs的設(shè)備,此外也在其中集中實現(xiàn)了I/O地址空間的管理具體設(shè)備的模擬實現(xiàn),根據(jù)各設(shè)備功能,為每一個設(shè)備單獨構(gòu)建一個C++類來實現(xiàn)21I/O模塊的模擬Bochs模擬器設(shè)備基本結(jié)構(gòu)向設(shè)備集注冊I/O地址空間、中斷以及向系統(tǒng)板注冊定時器資源將設(shè)備復(fù)位至到其初始化的狀態(tài)為CPU執(zhí)行I/O指令時提供的具體的設(shè)備讀寫函數(shù)設(shè)備的具體功能函數(shù)服務(wù)接口22I/O模塊的模擬BochsI/O設(shè)備集2024/5/1123I/O模塊的模擬I/O地址空間資源,共65536,分讀寫各一個向量數(shù)組,每個元素指向相應(yīng)端口號的讀寫處理函數(shù),各種外設(shè)在初始化時會在其中注冊它們的端口資源I/O端口資源的處理數(shù)據(jù)結(jié)構(gòu),每個外設(shè)對應(yīng)的讀寫處理不一樣,各自具體實現(xiàn)中斷資源注冊,各外設(shè)如有需求也會在其中申請注冊相應(yīng)的中斷資源根據(jù)系統(tǒng)配置創(chuàng)建的設(shè)備實例,在設(shè)備集中存儲有這些實例的指針,以便Bochs其它模塊可以存取某些典型設(shè)備在沒有初始化時,缺省的設(shè)備實例提供集中管理各具體設(shè)備的功能,此外還管理I/O地址空間的功能BochsI/O設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系24I/O模塊的模擬BochsI/O設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系1,通過調(diào)用設(shè)備集init初始化方法創(chuàng)建系統(tǒng)配置時的設(shè)備并保存各設(shè)備的指針,以使得Bochs可以通過設(shè)備集訪問到所有I/O設(shè)備initinitinit25I/O模塊的模擬BochsI/O設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系2,設(shè)備集init初始化方法在創(chuàng)建各具體設(shè)備之后,再依次調(diào)用各具體設(shè)備的init方法來向設(shè)備集注冊I/O端口,中斷請求以使得將來CPU存取到對應(yīng)的端口時能夠找到具體設(shè)備讀寫的處理函數(shù),此外還可能系統(tǒng)板注冊定時器資源,作為設(shè)備工作的觸發(fā)機制,為設(shè)備正常工作做好準(zhǔn)備26I/O模塊的模擬BochsI/O設(shè)備初始化后狀態(tài)各類在系統(tǒng)啟動時配置的設(shè)備都已經(jīng)創(chuàng)建好了,并由各類具體設(shè)備的init初始化函數(shù)根據(jù)其各自的功能需求注冊好了I/O地址空間及定時器,中斷等資源,從而各個設(shè)備都具有驅(qū)動其工作的時鐘。27I/O模塊的模擬Bochs模擬器初始化啟動過程-整體概括Bochs的整體流程邏輯上可以分為以下幾個階段主控模擬對象SIM的創(chuàng)建,根據(jù)系統(tǒng)配置信息生成Bochs模擬器系統(tǒng)運行時的硬件配置參數(shù)樹形結(jié)構(gòu)并初始化BochsX86PC模擬器PC系統(tǒng)的生成初始化(等效于實現(xiàn)一臺可以工作的PC機)BochsX86PC模擬器系統(tǒng)的開機與操作系統(tǒng)的啟動28Bochs模擬器初始化啟動過程BochsX86PC模擬器系統(tǒng)啟動總體流程注冊Bochs模擬主控對象的配置接口回調(diào)函數(shù)ci_callback至此為止,已經(jīng)完成了系統(tǒng)配置信息的提取并將其存儲在模擬主控對象SIM中,供Bochs模擬器PC系統(tǒng)的構(gòu)建29Bochs模擬器初始化啟動過程Bochs模擬主控對象的初始化2024/5/1130創(chuàng)建模擬主控對象,為構(gòu)建系統(tǒng)配置參數(shù)樹做好準(zhǔn)備Bochs模擬器初始化啟動過程Bochs系統(tǒng)配置初始化2024/5/1131建立bochsrc系統(tǒng)配置文件相對應(yīng)的參數(shù)樹形數(shù)據(jù)結(jié)構(gòu)命令行參數(shù)選項處理作,根據(jù)情況作不同的處理,如顯示幫助等或讀取系統(tǒng)配置文件根據(jù)實際配置重新設(shè)置模擬主控對象在上面建立的參數(shù)樹,作為后續(xù)硬件的初始化的輸入Bochs模擬器初始化啟動過程由bx_init_options建立的系統(tǒng)配置參數(shù)樹32Bochs模擬器初始化啟動過程Bochs系統(tǒng)的運行準(zhǔn)備33Bochs模擬器初始化啟動過程Bochs系統(tǒng)的運行準(zhǔn)備2024/5/1134Bochs模擬器初始化啟動過程Bochs系統(tǒng)硬件初始化35Bochs模擬器初始化啟動過程Bochs系統(tǒng)硬件初始化2024/5/1136系統(tǒng)板初始化,完成之后可以為設(shè)備等需要的定時器注冊做好了準(zhǔn)備根據(jù)系統(tǒng)配置文件信息初始化內(nèi)存模塊,之后就準(zhǔn)備好了Bochs所需的內(nèi)存資源及讀寫服務(wù)接口根據(jù)系統(tǒng)配置信息將將BIOS及其它可選的ROM二進(jìn)制程序預(yù)先燒寫進(jìn)入Bochs的內(nèi)存系統(tǒng)中,整個燒寫結(jié)構(gòu)比照實際機器進(jìn)行CPU初始化完成指令系統(tǒng)譯碼表,各類內(nèi)部寄存器等的初始化,此時CPU相當(dāng)于處于沒有時鐘脈沖的等待狀態(tài)根據(jù)系統(tǒng)配置信息完成各類I/O設(shè)備的創(chuàng)建并根據(jù)各設(shè)備的具體要求注冊I/O地址空間地址、中斷以及定時器資源注冊模擬主控對象的信號處理函數(shù),以便相應(yīng)來自用戶界面的操作事件,如用戶可以中途關(guān)閉Bochs模擬器等操作系統(tǒng)板復(fù)位(CPU及外設(shè)復(fù)位)(類似于按實際機器的復(fù)位按鈕,),Bochs系統(tǒng)開始進(jìn)入真正的指令解釋執(zhí)行模擬過程,從0xFFFFFFF開始執(zhí)行Bochs模擬器初始化啟動過程Bochs系統(tǒng)CPU指令運行循環(huán)2024/5/1137Bochs模擬器初始化啟動過程2024/5/1138基于Bochs的實驗環(huán)境環(huán)境搭建及實驗方法Bochs模擬器的編譯基于Bochs模擬器系統(tǒng)運行環(huán)境的搭建添加新指令集的方法(今后有時間或需要時分析研究)增加新設(shè)備的方法步驟(今后有時間或需要時分析研究)…基于Bochs的實驗環(huán)境2024/5/1139Bochs模擬器的編譯從/下載Bochs源代碼如Bochs2.4.5.tar.gz并解壓tar–zxvfbochs-2.4.5.tar.gz進(jìn)入Bochs源代碼目錄執(zhí)行如下命令顯示可以配置的所有選項cdbochs-2.4.5./configure--help如果要支持64位架構(gòu),則可以使用如下配置命令./configure–enable-x86-64編譯make安裝makeinstall基于Bochs的實驗環(huán)境2024/5/1140Bochs模擬器運行環(huán)境-基本構(gòu)成根據(jù)實際需要進(jìn)行配置,確定系統(tǒng)的硬件配置情況有多種方式來制作,其中用于實驗的方法: 利用Linux開發(fā)主機由Linux源代碼編譯內(nèi)核、Busybox以及unetbootin工具生成系統(tǒng)自帶基于Bochs的實驗環(huán)境2024/5/1141Bochs模擬器運行環(huán)境-配置信息基本功能

類似于自己去電腦市場配一臺計算機,例如配幾個CPU,幾個硬盤,幾個光驅(qū),軟盤,串口,并口,聲卡,網(wǎng)卡等具體可以參考bochs源代碼目錄下的.bochsrc模板文件重要的幾個配置內(nèi)存信息的配置軟硬盤,光盤配置及啟動順序…基于Bochs的實驗環(huán)境2024/5/1142Bochs模擬器運行環(huán)境-操作系統(tǒng)啟動鏡像獲取與制作網(wǎng)絡(luò)下載預(yù)先制作好的操作系統(tǒng)鏡像(簡單驗證Bochs系統(tǒng)已正確安裝,可使用)利用光盤或其ISO鏡像在Bochs下安裝,可以生成一個由Bochs啟動的磁盤操作系統(tǒng)鏡像(速度太慢,在使用Fedora時好像存在問題,具體可能還是因為Bochs模擬本身的問題)通過Linux內(nèi)核源代碼來實現(xiàn)精簡可啟動的操作系統(tǒng)鏡像(擬尋求可以通過Linux內(nèi)核源代碼生成可以由Bochs模擬器運行的精簡內(nèi)核供實驗之用)基于Bochs的實驗環(huán)境2024/5/1143Bochs模擬器下精簡Linux內(nèi)核可啟動的軟盤或硬盤鏡像制作基于Bochs的實驗環(huán)境2024/5/1144下一步工作基本思路基本思想Bochs代表一個可調(diào)整修改的X86處理器系統(tǒng)(或開發(fā)的處理器)64位可啟動的Linux內(nèi)核(用于驗證X86處理器的操作系統(tǒng))分析IntelX8664位Linux系統(tǒng)中與操作模式相關(guān)代碼并結(jié)合Bochs模擬器來調(diào)研64位模式與操作系統(tǒng)底層的相互關(guān)系,嘗試得出一些有參考價值的結(jié)論。啟動初始化代碼部分(特別關(guān)注其模式切換相關(guān)的部分)進(jìn)一步熟悉Bochs的實驗環(huán)境并能根據(jù)實際需要修改Bochs源代碼,完成相關(guān)的調(diào)研實驗熟悉Linux內(nèi)核調(diào)試技巧下一步工作基本思路實驗方案示意圖2024/5/1145基于預(yù)先的目標(biāo)以及Bochs的理解,確定相應(yīng)的驗證方案并進(jìn)行修改分析研究64位Linux版本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論