第十課 板級初始化

2022-09-12 02:15:07 字數 2554 閱讀 8511

板級初始化即

hal

層(硬體抽象層)初始化,其中執行了平台初始化,

hal層的記憶體初始化,中斷初始化,最後是核心層初始化。

該檔案中只有這乙個函式,呼叫函式用於初始化

hal層和核心層:

為了分離硬體的特性,設計了

hal層,把硬體相關的操作集中在這個層,並向上提供介面,目的是讓核心上層不用關注硬體相關的細節,也方便移植和擴充套件。

該檔案中也只有這乙個函式,呼叫函式用於初始化

hal層的初始化:

主要負責兩個任務:

1) 把二級引導器建立的機器資訊結構複製到hal層中的乙個全域性變數中,方便核心中其他**使用裡面的資訊,之後二級引導器建立的資料占用的記憶體都會被釋放。

2) 初始化圖形顯示驅動,核心在執行過程中要在螢幕上輸出資訊。

這個檔案的**負責平台初始化,平台初始化分兩步走,先初始化機器資訊結構,再初始化圖形顯示驅動:

初始化機器資訊結構體主要有兩個步驟:

1) 清零虛擬位址處的機器資訊結構體

2) 將實體地址處的機器資訊結構拷貝到虛擬位址處,即將實體地址轉換成虛擬位址。

其中,kmachbsp

是乙個hal

層的全域性變數,結構體型別同

kmbsp

,是用來儲存虛擬位址處機器資訊結構。

這個檔案中有

init_bdvideo

函式,用於初始化圖形顯示驅動。即初始化

kdftgh

這個全域性變數。

hal的記憶體初始化只需要向記憶體管理器提供記憶體空間布局資訊。之前在二級引導器中已經獲取了記憶體布局資訊(遺憾的是我沒看懂),但

cosmos

的記憶體管理器需要儲存更多的資訊,最好是順序的記憶體布局資訊,這樣可以增加額外的功能屬性,同時降低**複雜度(沒懂為啥)。

綜上所述,

hal的記憶體初始化就是以

bios

提供的結構為基礎,設計一套新的資料結構(牛哇)

init_phtmmarge

函式負責初始化

phymmarge_t

結構體,這個函式所做的事情主要是以

mbsp

機構圖中的機器資訊結構為基礎,對

phymmarge_t

結構體進行了初始化。初始化**如下圖所示:

3.3 初始化中斷

中斷分為兩種,一種是異常,是同步的,產生原因是錯誤或故障,有時也會是

cpu

通過陷阱指令主動發起異常。另一種是由外部事件產生的中斷,是非同步的,因為不確定何種裝置何時發出中斷訊號。

在x86 cpu

上,最多支援

256

個中斷,這意味著我們要準備

256

個中斷門描述符和

256

個中斷處理程式的入口。

中斷表其實是個

gate_t

結構的陣列,由

cpu

的 idtr

暫存器指向,

idtmax

為 256

光有陣列還不行,還需要設定其中的資料, init_halintupt

函式通過呼叫一些函式實現了中斷的初始化:

這個實驗就很簡單,在上一課的基礎上,

make release

十三課的**,把

release

資料夾下的

eki檔案拷到之前建立的虛擬硬碟目錄下的

boot

目錄下即可。如果沒有變成這張圖,試試改一下

makefile

檔案,把

logo.bmp

刪掉:我一開始圖沒變,後面又莫名其妙的變了,就很奇怪。

成功:

第十課學習

按鍵在未按下時,處於一種高電平狀態,一般這種情況下,其對io口的電平一致,則不會產生任何效果,只有在按下狀態時,由於與接地的迴路貫通,故相當於微控制器的io口直接接地。從原理圖上看,之所以要接keyin1 keyin4外接至按鍵中,主要原因是為了獲取按鍵的狀態,因為我們只能獲取微控制器的io口狀態,...

第十課 邊框

無邊框 border style none 虛線邊框 border style dotted 虛線邊框 border style dashed 實線邊框 border style solid 雙邊框 border style double 凹槽邊框 border style groove 壟狀邊框 ...

第十課 函式

第十課 函式 一.定義函式 def 函式名 引數1,引數2,文件描述 函式體return 值 def 定義函式的關鍵字 函式名 函式名指向函式記憶體位址,是對函式體 的引用。函式的命名應該反映出函式的功能 括號 括號內定義引數,引數是可有可無的,且無需指定引數的型別 冒號 括號後要加冒號,然後在下一...