SylixOS x86引導過程分析

2021-10-12 05:09:10 字數 2543 閱讀 8413

當x86電源開啟後,cpu將自動進入實模式,並從位址0xffff0(cs:0xffff,ip:0x0)開始自動執行程式**,此位址一般是bios的位址。

bios啟動後,將啟動裝置的主引導記錄。主引導記錄位於第0磁軌的第1個扇區,它的大小是512位元組,裡面存放了用組合語言編寫的預啟動資訊、分割槽表資訊、魔數0x55aa等。

bios將主引導記錄讀入記憶體絕對位址0x7c00處,並跳轉到此位址執行。

在sylixos平台中,事實上被拷貝到物理記憶體0x7c00處的內容就是grub。

grub是目前較流行啟動引導程式。

grub(grand unified bootloader)是當前linux諸多發行版本預設的引導程式,sylixos遵循了grub的引導協議multiboot後,也可以使用grub進行引導。

grub執行後,將初始化設定核心執行所需的環境,載入核心映象。

grub分為1.x版本和2.x版本,兩個版本的架構有所不同,目前sylixos啟動還是使用1.x版本的grub。

grub1.x磁碟引導sylixos全過程:

stage1

grub讀取磁碟的第乙個512位元組的主引導記錄mbr。

stage1.5

識別各種不同的檔案系統格式,目的是為了grub能識別到檔案系統。

stage2

載入系統引導選單(「/boot/grub/menu.lst」或「grub.lst」),載入sylixos的x86映象bspx86.elf。

為了統一x86平台grub引導各式作業系統的流程,grub支援了multiboot的引導協議,該協議定義了乙個可識別的系統映象檔案頭部應具備的格式協議,multiboot首部定義如下表所示。

sylixos參照上表所示的multiboot首部定義規則,對sylixos的x86映象的multiboot首部進行了定義,如下圖所示。

並且按照multiboot的協議要求,multiboot的首部應當位於整個elf映象的首部位置,所以對於sylixos的bsp映象工程,在鏈結multiboot檔案時需要指定其位址,如下圖所示。

grub啟動時,會根據menu.lst檔案載入對應的系統映象。

sylixos的realevo-ide預設提供的menu.lst檔案內容如下圖所示。

在menu.lst檔案中指定了grub啟動的預設等待時間timeout、預設載入選單項default以及各選單條目。

如,選單條目「title sylixos(up)」,其定義了使用grub的kernel命令引導bspx86.elf檔案,並為其傳遞「ncpus=1 hz=1000」等引數。

grub的kernel命令會解析bspx86.elf檔案,判斷其multiboot首部的有效性,在有效性完整判斷結束之後,根據elf的頭資訊,對bspx86.elf的各個段進行重定位。

elf檔案的頭資訊中包含了該elf檔案眾多的資訊,使用elf檔案分析工具等程式,可以檢視elf檔案頭部的資訊,如下圖所示。

程式的入口位址是在elf檔案中設定好的,所以grub在將sylixos映象重定位後,也會將該入口位址設定在elf頭資訊中指定的位置。

x86主核入口**如下圖所示。

以sylixos的32位系統為例,在跳轉到該入口位址後,應先設定棧指標,而設定棧指標之前,需要關閉中斷。

最後呼叫call命令,跳轉到c程式入口bspinit,而bspinit的兩個引數由%ebx和%eax暫存器傳遞,分別為multiboot的魔數和multiboot資訊結構體的首位址。

主核引導從核啟動也是遵循了intel制定的從核啟動規則。

如下圖所示,bsp為bios引導的主核,ap為待bsp啟動的從核。bsp需要首先向ap傳送init ipi命令,之後連續傳送兩次startup ipi命令。

init ipi命令與startup ipi命令都是固定的帶有引數的指令,通過核間中斷的方式進行傳送。

init ipi命令可以使ap自動進行復位操作,並完成上電啟動後post自檢等硬體所需流程。

startup ipi命令中可以指定從核跳轉到實模式執行的指令內容和位址,由此可以使從核按照smp或amp的流程進行初始化。

windows 7 引導過程概述

from window 7 的核心版本號是 nt6.1 和 vista nt6.0 還是屬於乙個系列的,因此採用了一樣的啟動管理機制。對於雙系統來說,正如 98 和 xp 共存的雙系統一樣,xp 和 7 共存的算系統安裝也是要有先後順序的。因為windows 的啟動管理屬於向下相容,7 的可以相容 ...

Angular從零到一1 6 引導過程

1.6 引導過程 import polyfills.ts 連同angular編譯器一起發布到瀏覽器 import from angular platform browser dynamic import from angular core import from environments envir...

Linux 9引導過程與服務控制

一 引導過程 開機自檢 bios自檢 mbr引導 grub選單 載入核心 kernel init 程序初始化 1 init程序 是所有程序的父程序 pid號永遠為1 2 runlevels 執行級別 0 關機 1 單使用者模式,無需密碼登入,用於系統維護 3 字元介面的完整多使用者模式 大部分伺服器...