Bootloader 是操作系统的第一个组成部分。
电脑一开机,你写的任何程式、Kernel、Shell……全部都还不存在。
BIOS(或 UEFI)会从磁盘的第一个 sector(512 bytes)读取一段程序,这段程序就是 Bootloader。
Bootloader 的任务只有三件事:
-
让 CPU 进入一个可控的状态(16-bit 实模式 → 32-bit 保护模式)
-
从磁盘把 Kernel 读进内存
-
跳到 Kernel 的入口点执行
这一篇,我们只做一件事:
写出一个最小的 Bootloader,并在 QEMU 上看到你输出的文字。
这样你会马上得到成就感,也知道“写 OS 真的可以很简单开始”。
1. Bootloader 的条件:512 bytes + 最后要 0x55AA
BIOS 只看一种东西:
-
从磁盘第 0 扇区读取 512 bytes
-
最后两个字节必须是 55 AA
符合这两个条件,它就会执行里面的程式。
所以我们的目标非常简单,就是输出一句“Hello OS”,最后补上 0x55AA,你就有了一个最简单的bootloader了。
2. 写一个最简单的 Bootloader(boot.asm)
新建一个 boot.asm:
[BITS 16]
[ORG 0x7C00]
; 打字到画面:写入 VGA 文本模式 0xB8000
mov ax, 0xB800
mov ds, ax
mov byte [0], 'H'
mov byte [1], 0x0F ; 颜色(白色)
mov byte [2], 'e'
mov byte [3], 0x0F
mov byte [4], 'l'
mov byte [5], 0x0F
mov byte [6], 'l'
mov byte [7], 0x0F
mov byte [8], 'o'
mov byte [9], 0x0F
jmp $
; BIOS 规定:最后两个字节要是 55 AA
times 510-($-$$) db 0
dw 0xAA55
3. 编译 Bootloader(需要 NASM)
nasm -f bin boot.asm -o boot.img
4. 用 QEMU 启动
qemu-system-i386 -drive file=boot.img,format=raw
你应该会看到:

有一個 Hello 画在左上角。
这代表你写的代码,已经被 BIOS 执行,并直接影响了画面。
到这里,你已经成功做出一个真正能「开机」的系统。虽然这个 Bootloader 非常简单,只会在萤幕上印出几个字,但它已经完成了 BIOS 的全部要求,也真实地在电脑启动阶段被执行。
205

被折叠的 条评论
为什么被折叠?



