linux啟動過程之MBR

我想每個使用linux系統的人,都會對一件事情感興趣,就是linux系統是如何啟動起來的,這一系列的過程是什麼樣的,本文將給你介紹一下linux系統的啟動。

我們正常都會把linux系統放在硬盤上,那麼為了啟動linux系統就會有以下的幾個問題需要解決:

1. Linux系統放在哪裡。

2. 那麼由哪個程序去找linux系統。

3. 找到linux系統後,如何將其加載起來的。

當我們的電腦開機時,會先運行一個程序,來進行硬件的自檢,完成硬件的自檢後,會調用boot_loader 將linux 系統啟動起來,那麼這個程序是什麼呢?這個程序就是我們熟知的BIOS。

BIOS程序是固化在計算中的ROM芯片中,當計算機開機時,會強制將CS寄存器設置為0xF000,IP寄存器設置為0xFFF0,因此開機啟動時,CPU就會去0XFFFF0地址取指令執行,而BIOS的入口就是該地址,因此計算機啟動時,運行的第一個程序就是BIOS。

BIOS程序的功能主要分為兩部分:

1. POST 自檢

2. Runtime服務

POST 自檢主要是檢測硬件是否正確,比如有沒有接觸不良的現象等。

Runtime 服務,主要是根據啟動順序,去啟動的設備中去讀取MBR,也就是主引導記錄,然後將IP指向MBR所在的內存的起始地址,去執行它。例如:啟動的設備正常都在硬盤中,所以BIOS會去硬盤去讀取第一個扇區,將這個扇區的代碼加載到內存中,這個扇區的內容就是MBR,然後將IP指針指向MBR進行執行。

通過上面我們知道了從BIOS到MBR的流程:

linux啟動過程之MBR

圖1

MBR即主引導記錄的介紹:

MBR位於啟動設備的第一個扇區,共佔用512個字節,程序代碼佔用446個字節,剩下的信息是分區表和標誌位。

linux啟動過程之MBR

圖2

MBR的前446個字節裝的是bootLoader,接下來的64個字節時分區表的信息,每個分區是16個字節,最後的兩個字節時0XAA55,作為MBR的結束標誌,也是MBR的有效校驗的標誌。

每16個字節代表一個分區,組成如下:

第一個字節:表示激活標誌,0x80表示該分區是激活的,非0x80表示的是普通的分區。

第2到4個字節:表示該分區的起始扇區的物理位置。

第5個字節:表示的該分區的類型。

第6到8個字節:表示的是該分區的最後的扇區所處的物理位置。

第9到12字節:表示的是第一個扇區的邏輯地址。

第13到16個字節:表示的是該分區的扇區數。

引導內核的流程:

剛才我們講到,自開機,第一個被運行的程序是BIOS,然後BIOS根據啟動順序去啟動設備讀取第一個扇區到內存,該扇區就是MBR,然後CPU轉到MBR中的bootloader去執行,也就是MBR對應的前446個字節所對應的代碼。

這段代碼所做的工作如下:

1. 將自己從0x7c00 移到0x600 處。

2. 遍歷分區表,找到可引導的分區,即查找激活的分區,即第一個字節是0x80 標誌的分區。

3. 如果找到可引導的分區,則MBR會讀取該分區的可引導的扇區的代碼,將其加載到0x7c00地址處。

4. 驗證可引導的扇區最後的兩個字節是否為0xAA55.

5. 最後跳轉到0x7c00 處執行內核的引導程序。

內核就是由該引導程序加載起來的,內核被加載到內存中後,會進行一系列的初始化,由於時間的關係,後續會講解內核的初始化的流程,請大家關注哦。


分享到:


相關文章: