bootloader

出現(xiàn)的原因

因?yàn)閤86體系結(jié)構(gòu)的CPU在啟動(dòng)時(shí)是在Real Mode下運(yùn)行,而Real Mode只能尋址1M以內(nèi)的內(nèi)存(實(shí)際給代碼的內(nèi)存小于512K)。這么小的空間根本不可能容納下現(xiàn)在的操作系統(tǒng),因此Bootloader作為在Real Mode下執(zhí)行的第一個(gè)程序,其最終目的就是為了將操作系統(tǒng)內(nèi)核加載進(jìn)內(nèi)存、初始化執(zhí)行化環(huán)境、并將控制流跳轉(zhuǎn)到內(nèi)核執(zhí)行入口。

多階段的Bootloader

如前文所述,因?yàn)锽ootloader只能有小于512K的代碼量,但是隨著業(yè)務(wù)邏輯的復(fù)雜(如從不同的介質(zhì)、不同的文件系統(tǒng)中加載內(nèi)核),512K的空間根本不可能實(shí)現(xiàn)這么復(fù)雜的功能,因此也就有了多階段的Bootloader。

實(shí)現(xiàn)一個(gè)Bootloader的要點(diǎn)

  1. 最重要的一點(diǎn),既然作為一個(gè)loader,那么必須知道如何找到并讀取被加載的內(nèi)容。

  2. Loader工作的結(jié)束也就是內(nèi)核工作的開(kāi)始,因此必須為內(nèi)核初始化必須的環(huán)境。

因?yàn)楝F(xiàn)在的內(nèi)核都運(yùn)行于Protected Mode之下,因此一般的BootLoader需要做以下工作:

  • 激活A(yù)20 Line

in al, 0x92

or al, 2

out 0x92, al

  • 進(jìn)入保護(hù)模式(Protected Mode)

mov eax,cr0

or eax,1

mov cr0,eax

(If data selector is 10h, code selector is 8 and kernel offset is 10000h do,注意需要用far jump)

mov ax,10h

mov ds,ax

mov es,ax

mov fs,ax

mov gs,ax

mov ss,ax

jmp 8:10000h

  • (可選的)設(shè)置GDT

kernel會(huì)有自己的設(shè)置

利用Grub來(lái)加載自己的內(nèi)核

http://wiki.osdev.org/GRUB#Installation_and_booting

http://www.jamesmolloy.co.uk/tutorial_html/2.-Genesis.html

http://etud.insa-toulouse.fr/~projet_tut_OS/w/Bochs_%2B_Grub

在mkfs時(shí),要注意host os所支持的file system OSX 不能掛載ext2,所以如果用OSX來(lái)做實(shí)驗(yàn),可以使用-t msdos格式。

注意使用root權(quán)限,否則可能沒(méi)有讀取/dev/loopN的權(quán)限

Mac OSX注意事項(xiàng)

  1. 沒(méi)有l(wèi)oop設(shè)備,因此也沒(méi)有l(wèi)osetup命令??梢栽赨buntu環(huán)境下制作鏡像

  2. mkfs(Ubuntu)默認(rèn)的文件格式是ext2,為了支持Mac的讀寫(xiě),需要指令文件系統(tǒng)類型為MAC支持的,如msdos

  3. MAC 下update_kernel.sh參考:

#!/bin/bash

hdiutil attach -mountpoint boot_folder boot.img

cp kernel boot_folder/

hdiutil detach boot_folder

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容