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

下載本文檔

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

文檔簡(jiǎn)介

1、熊海泉熊海泉2021-12-29Bochs X86 PC模擬器原理與啟動(dòng)流程分析模擬器原理與啟動(dòng)流程分析1Bochs X86 PC模擬器原模擬器原理與啟動(dòng)流程分析理與啟動(dòng)流程分析熊熊 海海 泉泉熊海泉熊海泉2021-12-292主要內(nèi)容主要內(nèi)容 PC系統(tǒng)及系統(tǒng)及X86模擬器模擬器 模擬主控模塊模擬主控模塊 系統(tǒng)板的模擬系統(tǒng)板的模擬 內(nèi)存模塊的模擬內(nèi)存模塊的模擬 CPU的模擬的模擬 I/O模塊的模擬模塊的模擬 Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程 基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境 下一步工作思路下一步工作思路 參考資料參考資料Bochs X86 PC模擬器原理與啟動(dòng)流程分析模

2、擬器原理與啟動(dòng)流程分析熊海泉熊海泉2021-12-293典型典型PC系統(tǒng)構(gòu)成系統(tǒng)構(gòu)成PC系統(tǒng)及系統(tǒng)及X86模擬器模擬器熊海泉熊海泉2021-12-294常見(jiàn)常見(jiàn)X86模擬器模擬器 比較典型的比較典型的X86模擬器模擬器 Bochs PTLsim COTson Qemu PC系統(tǒng)及系統(tǒng)及X86模擬器模擬器熊海泉熊海泉Bochs模擬器模擬器 Bochs是一個(gè)是一個(gè)X86 PC的模擬器,它可以模擬幾乎所有的模擬器,它可以模擬幾乎所有類(lèi)型的類(lèi)型的X86 CPU,包括,包括16位,位,32位和位和64位位(X86_64),內(nèi)存以及內(nèi)存以及I/O設(shè)備,在其上可以運(yùn)行設(shè)備,在其上可以運(yùn)行Linux,Wind

3、ows等操作系統(tǒng)。等操作系統(tǒng)。 其中模擬的其中模擬的X86_64的工作方式包括以下兩類(lèi):的工作方式包括以下兩類(lèi): IA-32模式模式:包括實(shí)模式,保護(hù)模式和虛擬包括實(shí)模式,保護(hù)模式和虛擬8086模式三模式三個(gè)子模式個(gè)子模式 IA-32e模式模式:包括長(zhǎng)模式和兼容模式包括長(zhǎng)模式和兼容模式5PC系統(tǒng)及系統(tǒng)及X86模擬器模擬器熊海泉熊海泉Bochs模擬器基本構(gòu)成模擬器基本構(gòu)成6PC系統(tǒng)及系統(tǒng)及X86模擬器模擬器熊海泉熊海泉模擬主控模塊模擬主控模塊為用戶(hù)提供交互的系統(tǒng)為用戶(hù)提供交互的系統(tǒng)配置信息更改以及控配置信息更改以及控制制Bochs模擬器的運(yùn)模擬器的運(yùn)行行根據(jù)用戶(hù)的配置信息在根據(jù)用戶(hù)的配置信息在模

4、擬主控對(duì)象中建立模擬主控對(duì)象中建立配置信息參數(shù)樹(shù)并初配置信息參數(shù)樹(shù)并初始化,為始化,為Bochs系統(tǒng)系統(tǒng)硬件的初始化提供輸硬件的初始化提供輸入入啟動(dòng)啟動(dòng)Bochs模擬器并進(jìn)模擬器并進(jìn)入客戶(hù)操作系統(tǒng)的引導(dǎo)入客戶(hù)操作系統(tǒng)的引導(dǎo)將宿主機(jī)的外部事件如,將宿主機(jī)的外部事件如,鍵盤(pán)鍵擊,鼠標(biāo)移動(dòng)鍵盤(pán)鍵擊,鼠標(biāo)移動(dòng)等通過(guò)信號(hào)量機(jī)制從等通過(guò)信號(hào)量機(jī)制從而觸發(fā)而觸發(fā)Bochs模擬器模擬器相應(yīng)設(shè)備進(jìn)行響應(yīng)相應(yīng)設(shè)備進(jìn)行響應(yīng)(理理解不一定正確解不一定正確)7模擬主控模塊模擬主控模塊熊海泉熊海泉2021-12-298系統(tǒng)板主要功能系統(tǒng)板主要功能為系統(tǒng)外設(shè),系統(tǒng)板等為系統(tǒng)外設(shè),系統(tǒng)板等模塊提供工作時(shí)鐘,從模塊提供工作時(shí)鐘

5、,從而驅(qū)動(dòng)各功能模塊的正而驅(qū)動(dòng)各功能模塊的正常工作常工作負(fù)責(zé)為外設(shè)向負(fù)責(zé)為外設(shè)向CPUCPU模塊模塊觸發(fā)中斷控制信號(hào),總觸發(fā)中斷控制信號(hào),總線(xiàn)請(qǐng)求信號(hào)等功能線(xiàn)請(qǐng)求信號(hào)等功能負(fù)責(zé)提供負(fù)責(zé)提供CPUCPU系統(tǒng)復(fù)系統(tǒng)復(fù)位,外設(shè)復(fù)位以及位,外設(shè)復(fù)位以及A20A20地址線(xiàn)開(kāi)啟與關(guān)閉,地址線(xiàn)開(kāi)啟與關(guān)閉,I/OI/O端口讀寫(xiě)的相關(guān)功端口讀寫(xiě)的相關(guān)功能能系統(tǒng)板的模擬系統(tǒng)板的模擬熊海泉熊海泉2021-12-299系統(tǒng)板的實(shí)現(xiàn)模型系統(tǒng)板的實(shí)現(xiàn)模型64個(gè)定時(shí)器資源個(gè)定時(shí)器資源定時(shí)器實(shí)現(xiàn)的控制字定時(shí)器實(shí)現(xiàn)的控制字段,其中段,其中currCountdown為為0時(shí)將觸發(fā)時(shí)將觸發(fā)CountdownEvent時(shí)間,從而執(zhí)行

6、某時(shí)間,從而執(zhí)行某一個(gè)定時(shí)器函數(shù),一個(gè)定時(shí)器函數(shù),這個(gè)函數(shù)通常是這個(gè)函數(shù)通常是I/O設(shè)備注冊(cè)的回設(shè)備注冊(cè)的回調(diào)函數(shù)調(diào)函數(shù)系統(tǒng)板定時(shí)器實(shí)系統(tǒng)板定時(shí)器實(shí)現(xiàn)的激勵(lì)來(lái)源現(xiàn)的激勵(lì)來(lái)源I/O設(shè)備初始化設(shè)備初始化時(shí)注冊(cè)的定時(shí)時(shí)注冊(cè)的定時(shí)器回調(diào)函數(shù)器回調(diào)函數(shù)實(shí)現(xiàn)一些系統(tǒng)控實(shí)現(xiàn)一些系統(tǒng)控制功能的字段,制功能的字段,如如HRQ代表示代表示否向否向CPU發(fā)出發(fā)出總線(xiàn)請(qǐng)求等總線(xiàn)請(qǐng)求等系統(tǒng)板的模擬系統(tǒng)板的模擬熊海泉熊海泉系統(tǒng)板與系統(tǒng)板與CPU及及I/O模塊的相互關(guān)系模塊的相互關(guān)系set_HRQ (用于用于DMA向系統(tǒng)發(fā)出總線(xiàn)請(qǐng)求向系統(tǒng)發(fā)出總線(xiàn)請(qǐng)求) set_INTR (調(diào)用調(diào)用CPU的的set_INTR ) Memor

7、yMappingChanged(TLB刷新)刷新)invlpg(清除頁(yè)表)(清除頁(yè)表)Reset(CPU復(fù)位復(fù)位)在在CPU每次指令執(zhí)行循環(huán)每次指令執(zhí)行循環(huán)cpu_loop中通過(guò)調(diào)用調(diào)用中通過(guò)調(diào)用調(diào)用系統(tǒng)板的系統(tǒng)板的tick來(lái)實(shí)現(xiàn)系統(tǒng)板上各個(gè)定時(shí)器來(lái)實(shí)現(xiàn)系統(tǒng)板上各個(gè)定時(shí)器系統(tǒng)復(fù)位系統(tǒng)復(fù)位Reset或或CPU的中斷響應(yīng)的中斷響應(yīng)IAC向系統(tǒng)板注冊(cè)工作驅(qū)動(dòng)的定時(shí)器及中斷向系統(tǒng)板注冊(cè)工作驅(qū)動(dòng)的定時(shí)器及中斷10系統(tǒng)板的模擬系統(tǒng)板的模擬熊海泉熊海泉2021-12-2911系統(tǒng)板初始化系統(tǒng)板初始化此時(shí)可以建立的概念就是,此時(shí)可以建立的概念就是,系統(tǒng)板的定時(shí)器資源已系統(tǒng)板的定時(shí)器資源已經(jīng)生成,可以供經(jīng)生成,

8、可以供I/O設(shè)設(shè)備注冊(cè)使用,同時(shí)備注冊(cè)使用,同時(shí)I/O設(shè)備通過(guò)系統(tǒng)板向設(shè)備通過(guò)系統(tǒng)板向CPU發(fā)送系統(tǒng)控制信號(hào)的功發(fā)送系統(tǒng)控制信號(hào)的功能已經(jīng)準(zhǔn)備就緒能已經(jīng)準(zhǔn)備就緒系統(tǒng)板的模擬系統(tǒng)板的模擬熊海泉熊海泉內(nèi)存模塊的基本功能內(nèi)存模塊的基本功能根據(jù)系統(tǒng)配置,一次性根據(jù)系統(tǒng)配置,一次性的向宿主機(jī)分配一片的向宿主機(jī)分配一片存儲(chǔ)空間存儲(chǔ)空間(應(yīng)該不是應(yīng)該不是物理內(nèi)存物理內(nèi)存),建立一,建立一套與實(shí)際機(jī)器類(lèi)似的套與實(shí)際機(jī)器類(lèi)似的內(nèi)存空間映像內(nèi)存空間映像在在X86中,有些中,有些I/O設(shè)備可能以?xún)?nèi)存映設(shè)備可能以?xún)?nèi)存映射的方式存取而不射的方式存取而不是通過(guò)傳統(tǒng)的是通過(guò)傳統(tǒng)的in或或out指令實(shí)現(xiàn),如指令實(shí)現(xiàn),如果有這

9、需求,相應(yīng)果有這需求,相應(yīng)的的I/O設(shè)備必須向設(shè)備必須向內(nèi)存模塊注冊(cè)內(nèi)存模塊注冊(cè)I/O讀寫(xiě)程序,這樣當(dāng)讀寫(xiě)程序,這樣當(dāng)使用使用readPhysicalPage等接口時(shí)會(huì)判斷等接口時(shí)會(huì)判斷是否是是否是I/O設(shè)備空設(shè)備空間而進(jìn)行不同的存間而進(jìn)行不同的存取操作取操作內(nèi)存的一個(gè)主要功能就內(nèi)存的一個(gè)主要功能就是向是向CPU提供存取指提供存取指令和數(shù)據(jù),以便令和數(shù)據(jù),以便CPU能夠不停的取指,執(zhí)能夠不停的取指,執(zhí)行及回寫(xiě),實(shí)現(xiàn)各種行及回寫(xiě),實(shí)現(xiàn)各種指令的功能指令的功能在在Bochs硬件初始化時(shí)硬件初始化時(shí)向向Bochs模擬的內(nèi)存模擬的內(nèi)存空間的空間的ROM地址空間地址空間加載可運(yùn)行的加載可運(yùn)行的BIOS二

10、二進(jìn)制程序,以為后序進(jìn)制程序,以為后序Bochs復(fù)位運(yùn)行作準(zhǔn)復(fù)位運(yùn)行作準(zhǔn)備備12內(nèi)存模塊的模擬內(nèi)存模塊的模擬熊海泉熊海泉內(nèi)存模塊的實(shí)現(xiàn)模型內(nèi)存模塊的實(shí)現(xiàn)模型2021-12-29132,記載目前系,記載目前系統(tǒng)內(nèi)存使用情統(tǒng)內(nèi)存使用情況的一些字段,況的一些字段,用于實(shí)現(xiàn)內(nèi)存用于實(shí)現(xiàn)內(nèi)存的分配管理的分配管理3,實(shí)現(xiàn),實(shí)現(xiàn)I/O內(nèi)存映射的注內(nèi)存映射的注冊(cè)管理服務(wù),其中包含了冊(cè)管理服務(wù),其中包含了地址信息,當(dāng)系統(tǒng)通過(guò)地址信息,當(dāng)系統(tǒng)通過(guò)readPhyicalPagewritePhysicalPage等存取函數(shù)時(shí)會(huì)判斷是否是等存取函數(shù)時(shí)會(huì)判斷是否是一個(gè)一個(gè)I/O內(nèi)存映射,如果內(nèi)存映射,如果是則執(zhí)行是則執(zhí)行

11、I/O內(nèi)存映射處內(nèi)存映射處理函數(shù)理函數(shù)1,初始化時(shí),根,初始化時(shí),根據(jù)據(jù).bochsrc配置文件中的配置文件中的(memory guest=512 host=256 )從宿主機(jī)中預(yù)從宿主機(jī)中預(yù)先分配好先分配好Bochs模擬器所需模擬器所需的內(nèi)存,并用的內(nèi)存,并用vector,rom等保存相應(yīng)的起始地址等保存相應(yīng)的起始地址4,內(nèi)存模塊為,內(nèi)存模塊為CPU提供了存提供了存取指令數(shù)據(jù)以取指令數(shù)據(jù)以及為及為I/O提供提供了內(nèi)存映射服了內(nèi)存映射服務(wù)務(wù)內(nèi)存模塊的模擬內(nèi)存模塊的模擬熊海泉熊海泉內(nèi)存模塊與內(nèi)存模塊與CPU及及I/O交互關(guān)系交互關(guān)系 為為CPU模塊提供的服務(wù)模塊提供的服務(wù) 數(shù)據(jù)和指令的存取數(shù)據(jù)和

12、指令的存取 MMU地址變換地址變換 為為I/O提供的服務(wù)提供的服務(wù) I/O內(nèi)存映射讀寫(xiě)處理注冊(cè)內(nèi)存映射讀寫(xiě)處理注冊(cè)管理管理 實(shí)現(xiàn)實(shí)現(xiàn)I/O內(nèi)存映射的存取內(nèi)存映射的存取14內(nèi)存模塊的模擬內(nèi)存模塊的模擬熊海泉熊海泉內(nèi)存模塊的初始化內(nèi)存模塊的初始化2021-12-2915為為Bochs模擬器準(zhǔn)備好了內(nèi)存空間,模擬器準(zhǔn)備好了內(nèi)存空間,可以為可以為CPU提供存取指令數(shù)據(jù)服提供存取指令數(shù)據(jù)服務(wù),同時(shí)也為需要實(shí)現(xiàn)務(wù),同時(shí)也為需要實(shí)現(xiàn)I/O內(nèi)存內(nèi)存映射的設(shè)備準(zhǔn)備好了注冊(cè)使用功映射的設(shè)備準(zhǔn)備好了注冊(cè)使用功能能內(nèi)存模塊的模擬內(nèi)存模塊的模擬熊海泉熊海泉CPU模塊的主要功能模塊的主要功能根據(jù)根據(jù)X86指令的邏輯功指令

13、的邏輯功能分別實(shí)現(xiàn)各類(lèi)能分別實(shí)現(xiàn)各類(lèi)X86指令,大部分指令按指令,大部分指令按其功能分別用不同的其功能分別用不同的源代碼文件實(shí)現(xiàn)源代碼文件實(shí)現(xiàn)通過(guò)通過(guò)prefetch,fetchDecode以及以及具體指令處理函數(shù)及具體指令處理函數(shù)及異常處理等實(shí)現(xiàn)異常處理等實(shí)現(xiàn)Bochs指令執(zhí)行循環(huán)指令執(zhí)行循環(huán)邏輯邏輯為為CPU指令的執(zhí)行提供數(shù)據(jù)指令的執(zhí)行提供數(shù)據(jù)和指令地址的變換,安全和指令地址的變換,安全保護(hù)等功能,最終實(shí)現(xiàn)對(duì)保護(hù)等功能,最終實(shí)現(xiàn)對(duì)內(nèi)存模塊的存取,具體主內(nèi)存模塊的存取,具體主要通過(guò)要通過(guò)translate_linear,access_linear,dtranslate_linear,itra

14、nslate_linear主要包括系統(tǒng)復(fù)位,系主要包括系統(tǒng)復(fù)位,系統(tǒng)初始化等功能統(tǒng)初始化等功能實(shí)現(xiàn)實(shí)現(xiàn)X86系統(tǒng)的各類(lèi)系統(tǒng)系統(tǒng)的各類(lèi)系統(tǒng)寄存器和通用寄存器寄存器和通用寄存器以及其狀態(tài)的變換邏以及其狀態(tài)的變換邏輯輯在系統(tǒng)中設(shè)置一個(gè)全局在系統(tǒng)中設(shè)置一個(gè)全局標(biāo)志信息表示異步中標(biāo)志信息表示異步中斷異常是否有發(fā)生,斷異常是否有發(fā)生,相應(yīng)的異常請(qǐng)發(fā)生只相應(yīng)的異常請(qǐng)發(fā)生只要將其進(jìn)行相應(yīng)設(shè)置要將其進(jìn)行相應(yīng)設(shè)置即可即可16CPU的模擬的模擬熊海泉熊海泉X86架構(gòu)架構(gòu)CPU的模擬的模擬-實(shí)現(xiàn)邏輯實(shí)現(xiàn)邏輯結(jié)構(gòu)結(jié)構(gòu)CPU的核心邏輯就是指的核心邏輯就是指令執(zhí)行循環(huán)令執(zhí)行循環(huán)17CPU的模擬的模擬熊海泉熊海泉CPU指令循

15、環(huán)指令循環(huán)檢測(cè)系統(tǒng)是否有異常、中斷等檢測(cè)系統(tǒng)是否有異常、中斷等事件發(fā)生,這種事件的來(lái)源事件發(fā)生,這種事件的來(lái)源有有APIC,INIT,SMI,INTR,reset,bx_stop_simulation,系統(tǒng)板系統(tǒng)板DMA總線(xiàn)請(qǐng)求以及某總線(xiàn)請(qǐng)求以及某些產(chǎn)生異常的指令些產(chǎn)生異常的指令根據(jù)邏輯地址獲取線(xiàn)性地址,再由根據(jù)邏輯地址獲取線(xiàn)性地址,再由線(xiàn)性地址變換到物理地址,這樣線(xiàn)性地址變換到物理地址,這樣就準(zhǔn)備好了就準(zhǔn)備好了CPU存取一條指令存取一條指令I(lǐng)P地址指針,可以由地址指針,可以由CPU通過(guò)內(nèi)存通過(guò)內(nèi)存模塊獲取指令了模塊獲取指令了根據(jù)上一步獲取的地址開(kāi)根據(jù)上一步獲取的地址開(kāi)始從內(nèi)存模塊中獲取指始從

16、內(nèi)存模塊中獲取指令并譯碼填充在待處理令并譯碼填充在待處理的指令變量的指令變量i中,供下中,供下一步調(diào)用一步調(diào)用對(duì)譯碼好的指令進(jìn)行調(diào)研對(duì)譯碼好的指令進(jìn)行調(diào)研執(zhí)行,完成指令的邏輯執(zhí)行,完成指令的邏輯功能功能驅(qū)動(dòng)系統(tǒng)板中的定時(shí)器,驅(qū)動(dòng)系統(tǒng)板中的定時(shí)器,從而為驅(qū)動(dòng)從而為驅(qū)動(dòng)Bochs其余其余設(shè)備等模塊工作。設(shè)備等模塊工作。18CPU的模擬的模擬熊海泉熊海泉CPU模塊的初始化模塊的初始化2021-12-2919CPU會(huì)在會(huì)在bx_init_hardware中中由系統(tǒng)板復(fù)位觸發(fā)由系統(tǒng)板復(fù)位觸發(fā)CPU的的復(fù)位,從而使得復(fù)位,從而使得CPU中各中各寄存器回到寄存器回到Intel手冊(cè)手冊(cè)上關(guān)于處理器初始化的上關(guān)

17、于處理器初始化的初值,之后系統(tǒng)將會(huì)從初值,之后系統(tǒng)將會(huì)從0XFFFFFFF0處開(kāi)始執(zhí)處開(kāi)始執(zhí)行行熊海泉熊海泉I/O模塊的主要功能模塊的主要功能負(fù)責(zé)負(fù)責(zé)Bochs模擬設(shè)備實(shí)例的創(chuàng)模擬設(shè)備實(shí)例的創(chuàng)建與初始化,到底要?jiǎng)?chuàng)建哪建與初始化,到底要?jiǎng)?chuàng)建哪些設(shè)備是根據(jù)模擬主控對(duì)象些設(shè)備是根據(jù)模擬主控對(duì)象初始化時(shí)收集的系統(tǒng)配置信初始化時(shí)收集的系統(tǒng)配置信息決定息決定在在X86架構(gòu)中有專(zhuān)門(mén)的架構(gòu)中有專(zhuān)門(mén)的I/O指令,指令,負(fù)責(zé)對(duì)各類(lèi)設(shè)備寄存器的操作,負(fù)責(zé)對(duì)各類(lèi)設(shè)備寄存器的操作,此功能就是提供此功能就是提供I/O地址空間管地址空間管理的,為不同的端口根據(jù)設(shè)備需理的,為不同的端口根據(jù)設(shè)備需要提供不同的讀寫(xiě)函數(shù)要提供不同

18、的讀寫(xiě)函數(shù)負(fù)責(zé)外部設(shè)備資源的分配負(fù)責(zé)外部設(shè)備資源的分配管理,供各外設(shè)使用管理,供各外設(shè)使用為為CPU I/O指令提供的指令提供的具體實(shí)現(xiàn)具體實(shí)現(xiàn)各類(lèi)具體外設(shè)的功能的邏各類(lèi)具體外設(shè)的功能的邏輯模擬,一般包括初始輯模擬,一般包括初始化,復(fù)位,以及設(shè)備專(zhuān)化,復(fù)位,以及設(shè)備專(zhuān)用功能的模擬用功能的模擬熊海泉熊海泉Bochs I/O模塊的實(shí)現(xiàn)模型模塊的實(shí)現(xiàn)模型作為與其它作為與其它Bochs模塊模塊如如CPU,系統(tǒng)板的接,系統(tǒng)板的接口,通過(guò)它可以找到口,通過(guò)它可以找到所有所有Bochs的設(shè)備,的設(shè)備,此外也在其中集中實(shí)此外也在其中集中實(shí)現(xiàn)了現(xiàn)了I/O地址空間的地址空間的管理管理具體設(shè)備的模擬實(shí)具體設(shè)備的模擬

19、實(shí)現(xiàn),根據(jù)各設(shè)備現(xiàn),根據(jù)各設(shè)備功能,為每一個(gè)功能,為每一個(gè)設(shè)備單獨(dú)構(gòu)建一設(shè)備單獨(dú)構(gòu)建一個(gè)個(gè)C+類(lèi)來(lái)實(shí)現(xiàn)類(lèi)來(lái)實(shí)現(xiàn)21I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs模擬器設(shè)備基本結(jié)構(gòu)模擬器設(shè)備基本結(jié)構(gòu)向設(shè)備集注冊(cè)向設(shè)備集注冊(cè)I/O地址地址空間、中斷以及向系空間、中斷以及向系統(tǒng)板注冊(cè)定時(shí)器資源統(tǒng)板注冊(cè)定時(shí)器資源將設(shè)備復(fù)位至到其初始將設(shè)備復(fù)位至到其初始化的狀態(tài)化的狀態(tài)為為CPU執(zhí)行執(zhí)行I/O指令時(shí)指令時(shí)提供的具體的設(shè)備讀提供的具體的設(shè)備讀寫(xiě)函數(shù)寫(xiě)函數(shù)設(shè)備的具體功設(shè)備的具體功能函數(shù)服務(wù)接能函數(shù)服務(wù)接口口22I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs I/O設(shè)備集設(shè)備集2021-12-2923I/

20、O模塊的模擬模塊的模擬I/O地址空間資源,共地址空間資源,共65536,分讀寫(xiě)各一,分讀寫(xiě)各一個(gè)向量數(shù)組,每個(gè)元個(gè)向量數(shù)組,每個(gè)元素指向相應(yīng)端口號(hào)的素指向相應(yīng)端口號(hào)的讀寫(xiě)處理函數(shù),各種讀寫(xiě)處理函數(shù),各種外設(shè)在初始化時(shí)會(huì)在外設(shè)在初始化時(shí)會(huì)在其中注冊(cè)它們的端口其中注冊(cè)它們的端口資源資源I/O端口資源的處理數(shù)端口資源的處理數(shù)據(jù)結(jié)構(gòu),每個(gè)外設(shè)對(duì)據(jù)結(jié)構(gòu),每個(gè)外設(shè)對(duì)應(yīng)的讀寫(xiě)處理不一樣,應(yīng)的讀寫(xiě)處理不一樣,各自具體實(shí)現(xiàn)各自具體實(shí)現(xiàn)中斷資源注冊(cè),各外設(shè)中斷資源注冊(cè),各外設(shè)如有需求也會(huì)在其中如有需求也會(huì)在其中申請(qǐng)注冊(cè)相應(yīng)的中斷申請(qǐng)注冊(cè)相應(yīng)的中斷資源資源根據(jù)系統(tǒng)配置創(chuàng)建的設(shè)根據(jù)系統(tǒng)配置創(chuàng)建的設(shè)備實(shí)例,在設(shè)備集中備

21、實(shí)例,在設(shè)備集中存儲(chǔ)有這些實(shí)例的指存儲(chǔ)有這些實(shí)例的指針,以便針,以便Bochs其它其它模塊可以存取模塊可以存取某些典型設(shè)備在沒(méi)有初某些典型設(shè)備在沒(méi)有初始化時(shí),缺省的設(shè)備始化時(shí),缺省的設(shè)備實(shí)例實(shí)例提供集中管理各具體設(shè)提供集中管理各具體設(shè)備的功能,此外還管備的功能,此外還管理理I/O地址空間的功地址空間的功能能熊海泉熊海泉Bochs I/O設(shè)備、設(shè)備集與系設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系統(tǒng)板的邏輯關(guān)系24I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs I/O設(shè)備、設(shè)備集與系設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系統(tǒng)板的邏輯關(guān)系1,通過(guò)調(diào)用設(shè)備集通過(guò)調(diào)用設(shè)備集init初始初始化方法創(chuàng)建系統(tǒng)配置時(shí)的設(shè)化方法創(chuàng)建

22、系統(tǒng)配置時(shí)的設(shè)備并保存各設(shè)備的指針,以備并保存各設(shè)備的指針,以使得使得Bochs可以通過(guò)設(shè)備集可以通過(guò)設(shè)備集訪問(wèn)到所有訪問(wèn)到所有I/O設(shè)備設(shè)備initinitinit25I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs I/O設(shè)備、設(shè)備集與系設(shè)備、設(shè)備集與系統(tǒng)板的邏輯關(guān)系統(tǒng)板的邏輯關(guān)系2,設(shè)備集設(shè)備集init初初始化方法在創(chuàng)建始化方法在創(chuàng)建各具體設(shè)備之后,各具體設(shè)備之后,再依次調(diào)用各具再依次調(diào)用各具體設(shè)備的體設(shè)備的init方法來(lái)向設(shè)備集方法來(lái)向設(shè)備集注冊(cè)注冊(cè)I/O端口,端口,中斷請(qǐng)求以使得中斷請(qǐng)求以使得將來(lái)將來(lái)CPU存取到存取到對(duì)應(yīng)的端口時(shí)能對(duì)應(yīng)的端口時(shí)能夠找到具體設(shè)備夠找到具體設(shè)備讀寫(xiě)的處理

23、函數(shù),讀寫(xiě)的處理函數(shù),此外還可能系統(tǒng)此外還可能系統(tǒng)板注冊(cè)定時(shí)器資板注冊(cè)定時(shí)器資源,作為設(shè)備工源,作為設(shè)備工作的觸發(fā)機(jī)制,作的觸發(fā)機(jī)制,為設(shè)備正常工作為設(shè)備正常工作做好準(zhǔn)備做好準(zhǔn)備26I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs I/O設(shè)備初始化后狀態(tài)設(shè)備初始化后狀態(tài) 各類(lèi)在系統(tǒng)啟動(dòng)時(shí)配置的設(shè)備都已經(jīng)創(chuàng)建好了,并由各各類(lèi)在系統(tǒng)啟動(dòng)時(shí)配置的設(shè)備都已經(jīng)創(chuàng)建好了,并由各類(lèi)具體設(shè)備的類(lèi)具體設(shè)備的init初始化函數(shù)根據(jù)其各自的功能需求注初始化函數(shù)根據(jù)其各自的功能需求注冊(cè)好了冊(cè)好了I/O地址空間及定時(shí)器,中斷等資源,從而各個(gè)地址空間及定時(shí)器,中斷等資源,從而各個(gè)設(shè)備都具有驅(qū)動(dòng)其工作的時(shí)鐘。設(shè)備都具有驅(qū)動(dòng)

24、其工作的時(shí)鐘。27I/O模塊的模擬模塊的模擬熊海泉熊海泉Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程-整體概括整體概括 Bochs的整體流程邏輯上可以分為以下幾個(gè)階段的整體流程邏輯上可以分為以下幾個(gè)階段 主控模擬對(duì)象主控模擬對(duì)象SIM的創(chuàng)建,根據(jù)系統(tǒng)配置信息生成的創(chuàng)建,根據(jù)系統(tǒng)配置信息生成Bochs模擬器系統(tǒng)運(yùn)行時(shí)的硬件配置參數(shù)樹(shù)形結(jié)構(gòu)并初始化模擬器系統(tǒng)運(yùn)行時(shí)的硬件配置參數(shù)樹(shù)形結(jié)構(gòu)并初始化 Bochs X86 PC模擬器模擬器PC系統(tǒng)的生成初始化系統(tǒng)的生成初始化(等效于實(shí)現(xiàn)等效于實(shí)現(xiàn)一臺(tái)可以工作的一臺(tái)可以工作的PC機(jī)機(jī)) Bochs X86 PC模擬器系統(tǒng)的開(kāi)機(jī)與操作系統(tǒng)的啟動(dòng)模擬器系統(tǒng)

25、的開(kāi)機(jī)與操作系統(tǒng)的啟動(dòng)28Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs X86 PC模擬器系統(tǒng)啟模擬器系統(tǒng)啟動(dòng)總體流程動(dòng)總體流程注冊(cè)注冊(cè)BochsBochs模擬主控模擬主控對(duì)象的配置接口回調(diào)對(duì)象的配置接口回調(diào)函數(shù)函數(shù)ci_callbackci_callback至此為止,已經(jīng)完成了至此為止,已經(jīng)完成了系統(tǒng)配置信息的提取系統(tǒng)配置信息的提取并將其存儲(chǔ)在模擬主并將其存儲(chǔ)在模擬主控對(duì)象控對(duì)象SIM中,供中,供Bochs模擬器模擬器PC系統(tǒng)系統(tǒng)的構(gòu)建的構(gòu)建29Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs模擬主控對(duì)象的初始化模擬主控對(duì)象的初始化2021

26、-12-2930創(chuàng)建模擬主控對(duì)象,為創(chuàng)建模擬主控對(duì)象,為構(gòu)建系統(tǒng)配置參數(shù)樹(shù)構(gòu)建系統(tǒng)配置參數(shù)樹(shù)做好準(zhǔn)備做好準(zhǔn)備Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs系統(tǒng)配置初始化系統(tǒng)配置初始化2021-12-2931建立建立bochsrcbochsrc系統(tǒng)配置系統(tǒng)配置文件相對(duì)應(yīng)的參數(shù)樹(shù)形文件相對(duì)應(yīng)的參數(shù)樹(shù)形數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)命令行參數(shù)選項(xiàng)處理命令行參數(shù)選項(xiàng)處理作,根據(jù)情況作不同的作,根據(jù)情況作不同的處理,如顯示幫助等或處理,如顯示幫助等或讀取系統(tǒng)配置文件讀取系統(tǒng)配置文件根據(jù)實(shí)際配置重新設(shè)置根據(jù)實(shí)際配置重新設(shè)置模擬主控對(duì)象在上面建模擬主控對(duì)象在上面建立的參數(shù)樹(shù),作為后立的參數(shù)樹(shù),作

27、為后續(xù)硬件的初始化的輸入續(xù)硬件的初始化的輸入Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉由由bx_init_optionsbx_init_options建立的系建立的系統(tǒng)配置參數(shù)樹(shù)統(tǒng)配置參數(shù)樹(shù)32Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs系統(tǒng)的運(yùn)行準(zhǔn)備系統(tǒng)的運(yùn)行準(zhǔn)備33Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs系統(tǒng)的運(yùn)行準(zhǔn)備系統(tǒng)的運(yùn)行準(zhǔn)備2021-12-2934Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs系統(tǒng)硬件初始化系統(tǒng)硬件初始化35Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海

28、泉熊海泉Bochs系統(tǒng)硬件初始化系統(tǒng)硬件初始化2021-12-2936系統(tǒng)板初始化,完成之系統(tǒng)板初始化,完成之后可以為設(shè)備等需要后可以為設(shè)備等需要的定時(shí)器注冊(cè)做好了的定時(shí)器注冊(cè)做好了準(zhǔn)備準(zhǔn)備根據(jù)系統(tǒng)配置文件信息根據(jù)系統(tǒng)配置文件信息初始化內(nèi)存模塊,之初始化內(nèi)存模塊,之后就準(zhǔn)備好了后就準(zhǔn)備好了Bochs所需的內(nèi)存資源及讀所需的內(nèi)存資源及讀寫(xiě)服務(wù)接口寫(xiě)服務(wù)接口根據(jù)系統(tǒng)配置信息將根據(jù)系統(tǒng)配置信息將將將BIOS及其它可選及其它可選的的ROM二進(jìn)制程序二進(jìn)制程序預(yù)先燒寫(xiě)進(jìn)入預(yù)先燒寫(xiě)進(jìn)入Bochs的內(nèi)存系統(tǒng)的內(nèi)存系統(tǒng)中,整個(gè)燒寫(xiě)結(jié)構(gòu)中,整個(gè)燒寫(xiě)結(jié)構(gòu)比照實(shí)際機(jī)器進(jìn)行比照實(shí)際機(jī)器進(jìn)行CPU初始化完成指初始化完成

29、指令系統(tǒng)譯碼表,令系統(tǒng)譯碼表,各類(lèi)內(nèi)部寄存器各類(lèi)內(nèi)部寄存器等的初始化,此等的初始化,此時(shí)時(shí)CPU相當(dāng)于處相當(dāng)于處于沒(méi)有時(shí)鐘脈沖于沒(méi)有時(shí)鐘脈沖的等待狀態(tài)的等待狀態(tài)根據(jù)系統(tǒng)配置信息根據(jù)系統(tǒng)配置信息完成各類(lèi)完成各類(lèi)I/OI/O設(shè)備設(shè)備的創(chuàng)建并根據(jù)各的創(chuàng)建并根據(jù)各設(shè)備的具體要求設(shè)備的具體要求注冊(cè)注冊(cè)I/OI/O地址空間地址空間地址、中斷以及地址、中斷以及定時(shí)器資源定時(shí)器資源注冊(cè)模擬主控對(duì)象注冊(cè)模擬主控對(duì)象的信號(hào)處理函數(shù),的信號(hào)處理函數(shù),以便相應(yīng)來(lái)自用以便相應(yīng)來(lái)自用戶(hù)界面的操作事戶(hù)界面的操作事件,如用戶(hù)可以件,如用戶(hù)可以中途關(guān)閉中途關(guān)閉Bochs模擬器等操作模擬器等操作系統(tǒng)板復(fù)位系統(tǒng)板復(fù)位(CPU及外設(shè)

30、及外設(shè)復(fù)位復(fù)位)(類(lèi)似于按類(lèi)似于按實(shí)際機(jī)器的復(fù)位實(shí)際機(jī)器的復(fù)位按鈕,按鈕,),Bochs系統(tǒng)開(kāi)始系統(tǒng)開(kāi)始進(jìn)入真正的指令進(jìn)入真正的指令解釋執(zhí)行模擬過(guò)解釋執(zhí)行模擬過(guò)程,從程,從0 xFFFFFFF開(kāi)開(kāi)始執(zhí)行始執(zhí)行Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉Bochs系統(tǒng)系統(tǒng)CPU指令運(yùn)行循環(huán)指令運(yùn)行循環(huán)2021-12-2937Bochs模擬器初始化啟動(dòng)過(guò)程模擬器初始化啟動(dòng)過(guò)程熊海泉熊海泉2021-12-2938基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境 環(huán)境搭建及實(shí)驗(yàn)方法環(huán)境搭建及實(shí)驗(yàn)方法 Bochs模擬器的編譯模擬器的編譯 基于基于Bochs模擬器系統(tǒng)運(yùn)行環(huán)境的搭建模擬器系統(tǒng)運(yùn)行環(huán)

31、境的搭建 添加新指令集的方法添加新指令集的方法(今后有時(shí)間或需要時(shí)分析研究今后有時(shí)間或需要時(shí)分析研究) 增加新設(shè)備的方法步驟增加新設(shè)備的方法步驟(今后有時(shí)間或需要時(shí)分析研究今后有時(shí)間或需要時(shí)分析研究) 基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2939Bochs模擬器的編譯模擬器的編譯從從http:/ 2.4.5.tar.gz并解壓并解壓tar zxvf bochs-2.4.5.tar.gz進(jìn)入進(jìn)入Bochs源代碼目錄執(zhí)行如下命令顯示可以配置的源代碼目錄執(zhí)行如下命令顯示可以配置的所有選項(xiàng)所有選項(xiàng)cd bochs-2.4.5./configure -help如果要支持如果

32、要支持64位架構(gòu),則可以使用如下配置命令位架構(gòu),則可以使用如下配置命令./configure enable-x86-64編譯編譯make安裝安裝make install基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2940Bochs模擬器運(yùn)行環(huán)境模擬器運(yùn)行環(huán)境-基本基本構(gòu)成構(gòu)成根據(jù)實(shí)際需要進(jìn)行根據(jù)實(shí)際需要進(jìn)行配置,確定系統(tǒng)的配置,確定系統(tǒng)的硬件配置情況硬件配置情況有多種方式來(lái)制作,其中用于實(shí)有多種方式來(lái)制作,其中用于實(shí)驗(yàn)的方法:驗(yàn)的方法:利用利用LinuxLinux開(kāi)發(fā)主機(jī)由開(kāi)發(fā)主機(jī)由LinuxLinux源代碼編譯內(nèi)核、源代碼編譯內(nèi)核、BusyboxBusybox以及以及u

33、netbootinunetbootin工具生成工具生成系統(tǒng)自帶系統(tǒng)自帶基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2941Bochs模擬器運(yùn)行環(huán)境模擬器運(yùn)行環(huán)境-配置配置信息信息 基本功能基本功能類(lèi)似于自己去電腦市場(chǎng)配一臺(tái)計(jì)算機(jī),例如類(lèi)似于自己去電腦市場(chǎng)配一臺(tái)計(jì)算機(jī),例如配幾個(gè)配幾個(gè)CPU,幾個(gè)硬盤(pán),幾個(gè)光驅(qū),軟盤(pán),串口,并口,幾個(gè)硬盤(pán),幾個(gè)光驅(qū),軟盤(pán),串口,并口,聲卡,網(wǎng)卡等聲卡,網(wǎng)卡等 具體可以參考具體可以參考bochs源代碼目錄下的源代碼目錄下的.bochsrc模板文模板文件件 重要的幾個(gè)配置重要的幾個(gè)配置 內(nèi)存信息的配置內(nèi)存信息的配置 軟硬盤(pán),光盤(pán)配置及啟動(dòng)順序軟

34、硬盤(pán),光盤(pán)配置及啟動(dòng)順序 基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2942Bochs模擬器運(yùn)行環(huán)境模擬器運(yùn)行環(huán)境-操作操作系統(tǒng)啟動(dòng)鏡像獲取與制作系統(tǒng)啟動(dòng)鏡像獲取與制作 網(wǎng)絡(luò)下載預(yù)先制作好的操作系統(tǒng)鏡像網(wǎng)絡(luò)下載預(yù)先制作好的操作系統(tǒng)鏡像(簡(jiǎn)單驗(yàn)證簡(jiǎn)單驗(yàn)證Bochs系統(tǒng)已正確安裝,可使用系統(tǒng)已正確安裝,可使用) 利用光盤(pán)或其利用光盤(pán)或其ISO鏡像在鏡像在Bochs下安裝,可以生成一個(gè)下安裝,可以生成一個(gè)由由Bochs啟動(dòng)的磁盤(pán)操作系統(tǒng)鏡像啟動(dòng)的磁盤(pán)操作系統(tǒng)鏡像(速度太慢,在使用速度太慢,在使用Fedora時(shí)好像存在問(wèn)題,具體可能還是因?yàn)闀r(shí)好像存在問(wèn)題,具體可能還是因?yàn)锽oc

35、hs模模擬本身的問(wèn)題擬本身的問(wèn)題) 通過(guò)通過(guò)Linux內(nèi)核源代碼來(lái)實(shí)現(xiàn)精簡(jiǎn)可啟動(dòng)的操作系統(tǒng)鏡內(nèi)核源代碼來(lái)實(shí)現(xiàn)精簡(jiǎn)可啟動(dòng)的操作系統(tǒng)鏡像像(擬尋求可以通過(guò)擬尋求可以通過(guò)Linux內(nèi)核源代碼生成可以由內(nèi)核源代碼生成可以由Bochs模擬器運(yùn)行的精簡(jiǎn)內(nèi)核供實(shí)驗(yàn)之用模擬器運(yùn)行的精簡(jiǎn)內(nèi)核供實(shí)驗(yàn)之用)基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2943Bochs模擬器下精簡(jiǎn)模擬器下精簡(jiǎn)Linux內(nèi)核內(nèi)核可啟動(dòng)的軟盤(pán)或硬盤(pán)鏡像制作可啟動(dòng)的軟盤(pán)或硬盤(pán)鏡像制作基于基于Bochs的實(shí)驗(yàn)環(huán)境的實(shí)驗(yàn)環(huán)境熊海泉熊海泉2021-12-2944下一步工作基本思路下一步工作基本思路 基本思想基本思想 Bochs代表一個(gè)可調(diào)整修改的代表一個(gè)可調(diào)整修改的X86處理器系統(tǒng)處理器系統(tǒng)(或開(kāi)發(fā)的或開(kāi)發(fā)的處理器處理器) 64位可啟動(dòng)的位可啟動(dòng)的Linux內(nèi)核內(nèi)核(用于驗(yàn)證用于驗(yàn)證X86處理器的操作系處理器的操作系統(tǒng)統(tǒng)) 分析分析Intel X86 64位位Linux系統(tǒng)中與操作模式相關(guān)代系統(tǒng)中與操作模式相關(guān)代碼并結(jié)合碼并結(jié)合Bochs模擬器來(lái)調(diào)研模擬器來(lái)調(diào)研64位模式與操作系統(tǒng)底層位模式與操作系統(tǒng)底層的相互關(guān)系,嘗試得出一些有參考價(jià)值的結(jié)論。的相互關(guān)系,嘗試得出一些有參考價(jià)值的結(jié)論。 啟動(dòng)初始化代碼部分啟動(dòng)初

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論