启动流程概述
计算机从上电到操作系统加载,依次经历以下几个阶段:
- BIOS 加电启动,进入计算机启动流程。
- 自检(POST):检查内存、CPU 等基本硬件是否正常。该过程可在 BIOS 设置中关闭;旧年代主板通过自检后会通过蜂鸣器提示。
- 从 BIOS 配置的启动设备(HDD、光驱或软盘)读取 MBR(主引导记录),这是引导的关键所在。
- 加载并执行引导程序。
MBR 结构
MBR 位于磁盘第一个扇区,共 512 字节,由三部分组成:
- 引导程序:占前 446 字节。引导程序的第一条指令为
org 7c00h,BIOS 会将该程序加载到内存地址0000:7c00处开始执行。关于为什么是这个地址,可以参考 这篇文章 中的解释。 - 分区表:占 16×4 = 64 字节。
- 结束标识:2 字节,固定值
0xaa55。
编写引导代码
在前 446 字节中编写引导程序,创建文件 boot.asm,内容如下:
org 7c00h
mov ax, cs
mov es, ax
mov ax, logo
mov bp, ax
mov cx, len
mov ax, 1301h
mov bx, 000fh
mov dl, 0
int 10h
logo: db "LiteOS 0.1 (c) 2013-2017 dreamyouxi.com"
len: equ $ - logo
times 510 - ($ - $$) db 0
dw 0aa55h
使用 nasm 工具将汇编源码编译为二进制文件:
nasm boot.asm -o boot.bin
生成的 boot.bin 就是所需的 512 字节 MBR 文件。
在虚拟机中运行
新建一个 VM 虚拟机,将启动设备文件指定为生成的 boot.bin:
启动虚拟机,运行效果如下: