閱讀時(shí)間:2015年12月2日
閱讀筆記:關(guān)于boot中bootsect.s的加載
在引導(dǎo)加載程序 bootsect.s 主要將 setup.s 代碼和 system 模塊加載到內(nèi)存中,其中 system 模塊的 首部包含有 head.s 代碼绝骚。在把自己移動(dòng)到物理地址 0x90000 處并將 setup.s 代碼放到 0x90200 處后垦沉,就 將執(zhí)行權(quán)交給了 setup 程序桶唐。
setup 程序的主要作用是利用 ROM BIOS 的中斷程序獲取機(jī)器的一些基本參數(shù),并保存在 0x90000 開 始的內(nèi)存塊中,供后面程序使用乳丰。同時(shí)把 system 模塊往下移動(dòng)到物理地址 0x00000 開始處,這樣内贮,system 中的 head.s 代碼就處在 0x00000 開始處了产园。然后加載描述符表基地址到描述符表寄存器中,為進(jìn)行 32 位保護(hù)模式下的運(yùn)行作好準(zhǔn)備贺归。接下來對(duì)中斷控制硬件進(jìn)行重新設(shè)置淆两,最后通過設(shè)置機(jī)器控制寄存器 CR0 并跳轉(zhuǎn)到 system 模塊的 head.s 代碼開始處,使 CPU 進(jìn)入 32 位保護(hù)模式下運(yùn)行拂酣。
Head.s 代碼的主要作用是初步初始化中斷描述符表中的 256 項(xiàng)門描述符秋冰,檢查 A20 地址線是否已經(jīng) 打開,測(cè)試系統(tǒng)是否含有數(shù)學(xué)協(xié)處理器婶熬。然后初始化內(nèi)存頁(yè)目錄表剑勾,為內(nèi)存的分頁(yè)管理作好準(zhǔn)備工作埃撵。
最后跳轉(zhuǎn)到 system 模塊中的初始化程序 init.c 中繼續(xù)執(zhí)行。