日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

x86架构linux内核引导过程分析,SylixOS---x86引导过程分析

發(fā)布時間:2024/10/12 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 x86架构linux内核引导过程分析,SylixOS---x86引导过程分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 上電啟動流程

當x86電源打開后,CPU將自動進入實模式,并從地址0xFFFF0(CS:0xFFFF,IP:0x0)開始自動運行程序代碼,此地址一般是BIOS的地址。

BIOS啟動后,將啟動設備的主引導記錄。主引導記錄位于第0磁道的第1個扇區(qū),它的大小是512字節(jié),里面存放了用匯編語言編寫的預啟動信息、分區(qū)表信息、魔數(shù)0x55AA等。

BIOS將主引導記錄讀入內(nèi)存絕對地址0x7C00處,并跳轉(zhuǎn)到此地址運行。

在SylixOS平臺中,事實上被拷貝到物理內(nèi)存0x7C00處的內(nèi)容就是GRUB。

2. GRUB的作用

GRUB是目前較流行啟動引導程序。

GRUB(Grand Unified Bootloader)是當前Linux諸多發(fā)行版本默認的引導程序,SylixOS遵循了GRUB的引導協(xié)議Multiboot后,也可以使用GRUB進行引導。

GRUB執(zhí)行后,將初始化設置內(nèi)核執(zhí)行所需的環(huán)境,載入內(nèi)核鏡像。

GRUB分為1.x版本和2.x版本,兩個版本的架構(gòu)有所不同,目前SylixOS啟動還是使用1.x版本的GRUB。

GRUB1.x磁盤引導SylixOS全過程:

stage1

GRUB讀取磁盤的第一個512字節(jié)的主引導記錄MBR。

stage1.5

識別各種不同的文件系統(tǒng)格式,目的是為了GRUB能識別到文件系統(tǒng)。

stage2

載入系統(tǒng)引導菜單(“/boot/grub/menu.lst”或“grub.lst”),載入SylixOS的x86鏡像bspx86.elf。

3. Multiboot協(xié)議

為了統(tǒng)一x86平臺GRUB引導各式操作系統(tǒng)的流程,GRUB支持了Multiboot的引導協(xié)議,該協(xié)議定義了一個可識別的系統(tǒng)鏡像文件頭部應具備的格式協(xié)議,Multiboot首部定義如下表所示。

SylixOS參照上表所示的Multiboot首部定義規(guī)則,對SylixOS的x86鏡像的Multiboot首部進行了定義,如下圖所示。

并且按照Multiboot的協(xié)議要求,Multiboot的首部應當位于整個elf鏡像的首部位置,所以對于SylixOS的BSP鏡像工程,在鏈接Multiboot文件時需要指定其地址,如下圖所示。

4. SylixOS啟動

4.1 GRUB解析bspx86.elf

GRUB啟動時,會根據(jù)menu.lst文件加載對應的系統(tǒng)鏡像。

SylixOS的RealEvo-IDE默認提供的menu.lst文件內(nèi)容如下圖所示。

在menu.lst文件中指定了GRUB啟動的默認等待時間timeout、默認加載菜單項default以及各菜單條目。

如,菜單條目“title SylixOS(UP)”,其定義了使用GRUB的kernel命令引導bspx86.elf文件,并為其傳遞“ncpus=1 hz=1000”等參數(shù)。

GRUB的kernel命令會解析bspx86.elf文件,判斷其Multiboot首部的有效性,在有效性完整判斷結(jié)束之后,根據(jù)elf的頭信息,對bspx86.elf的各個段進行重定位。

4.2 重定位入口地址

elf文件的頭信息中包含了該elf文件眾多的信息,使用elf文件分析工具等程序,可以查看elf文件頭部的信息,如下圖所示。

程序的入口地址是在elf文件中設定好的,所以GRUB在將SylixOS鏡像重定位后,也會將該入口地址設置在elf頭信息中指定的位置。

4.3 跳轉(zhuǎn)到主核入口地址

x86主核入口代碼如下圖所示。

以SylixOS的32位系統(tǒng)為例,在跳轉(zhuǎn)到該入口地址后,應先設置棧指針,而設置棧指針之前,需要關(guān)閉中斷。

最后調(diào)用CALL命令,跳轉(zhuǎn)到C程序入口bspInit,而bspInit的兩個參數(shù)由%EBX和%EAX寄存器傳遞,分別為Multiboot的魔數(shù)和Multiboot信息結(jié)構(gòu)體的首地址。

4.4 主核引導從核啟動

主核引導從核啟動也是遵循了Intel制定的從核啟動規(guī)則。

如下圖所示,BSP為BIOS引導的主核,AP為待BSP啟動的從核。BSP需要首先向AP發(fā)送INIT IPI命令,之后連續(xù)發(fā)送兩次STARTUP IPI命令。

INIT IPI命令與STARTUP IPI命令都是固定的帶有參數(shù)的指令,通過核間中斷的方式進行發(fā)送。

INIT IPI命令可以使AP自動進行復位操作,并完成上電啟動后POST自檢等硬件所需流程。

STARTUP IPI命令中可以指定從核跳轉(zhuǎn)到實模式執(zhí)行的指令內(nèi)容和地址,由此可以使從核按照SMP或AMP的流程進行初始化。

總結(jié)

以上是生活随笔為你收集整理的x86架构linux内核引导过程分析,SylixOS---x86引导过程分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。