multiboot规范
什么是multiboot规范
- 背景
- 每种操作系统基本上都有自己的引导程序
- 在计算机上共存多个操作系统是很麻烦的一件事情
- 系统自带的引导程序不符合你的预期或者不能运行是一件很麻烦的事情
人们迫切需要这样子的一种规范:
- 它不依赖于任何操作系统
- 它不关心引导程序的细节
- 它规范了引导程序与操作系统之间的接口
使用multiboot规范的操作系统与引导程序能很好地实现操作系统共存
但是,该规范只适用于自由操作系统
细节
该规范的目标:x86架构,32位操作系统,自由操作系统
OS映像通常应当是该OS使用的可执行文件格式。为了避免引导程序理解所有的可执行文件格式,OS映像应当包含一个magic Multiboot头
接口主要包括:
- 引导程序看到的OS映像的格式
- 引导系统启动操作系统时的机器的状态
- 引导程序传递给操作系统的信息的格式
OS映像的格式
OS映像必须包含一个multiboot头
Multiboot头必须完整包含在前8192字内。必须是32位对齐的。
multiboot头
偏移量 | 类型 | 域名 | 备注 |
---|---|---|---|
0 | u32 | magic | 必需 |
4 | u32 | flags | 必需 |
8 | u32 | checksum | 必需 |
12 | u32 | header_addr | 如果flags[16]被置位 |
16 | u32 | load_addr | 如果flags[16]被置位 |
20 | u32 | load_end_addr | 如果flags[16]被置位 |
24 | u32 | bss_end_addr | 如果flags[16]被置位 |
28 | u32 | entry_addr | 如果flags[16]被置位 |
3 |