从零打造操作系统 -2 理解 Bootloader

Bootloader 是操作系统的第一个组成部分。
电脑一开机,你写的任何程式、Kernel、Shell……全部都还不存在。
BIOS(或 UEFI)会从磁盘的第一个 sector(512 bytes)读取一段程序,这段程序就是 Bootloader。

Bootloader 的任务只有三件事:

  1. 让 CPU 进入一个可控的状态(16-bit 实模式 → 32-bit 保护模式)

  2. 从磁盘把 Kernel 读进内存

  3. 跳到 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 的全部要求,也真实地在电脑启动阶段被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值