Multiboot规范

一个启动载入器/OS映像接口主要是三个方面:

1          由启动载入器看到的一个OS映像的格式。

2          当启动载入器启动一个操作系统时,机器的状态。

3          由启动载入器传递给操作系统的信息的格式。

3.1.      OS映像的格式

一个OS映像可能是一个,对于这个特定的操作系统而言,标准格式的普通32位可执行文件,除了它可能被链到一个非缺省的载入地址,以避免载入到PCI/O区域的顶部或其它的保留区域,同样它不应该使用共享库或其它花哨的特性。

一个OS映像,除了该OS映像所使用文件格式的头部外,必须包含一个称为Multiboot头的额外的头部。Multiboot头部必须被完整包含 在OS映像的前8192字节内,而必须与长字(32位)对齐。一般而言,它应该尽早出现,并可能嵌入在可执行文件头部后,代码段的开头。

3.1.1.        Multiboot头的布局

Multiboot头的布局必须如下:

偏移 类型              域名                     注意

0            u32              magic                  要求

4            u32              lags                     要求

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]

32          u32              mode_type          如果设置了flags[2]

36          u32              width                   如果设置了flags[2]

40          u32              height                  如果设置了flags[2]

44          u32              depth                   如果设置了flags[2]

域‘magic’,‘flags’及‘checksum’定义在3.1.2节【头部魔数域】,4页,域 ‘header_addr’,‘load_addr’,‘load_end_addr’,‘bss_end_addr’及‘entry_addr’定义在 3.1.3节【头部地址域】,5页,而域‘mode_type’,‘width’,‘height’及 ‘depth’定义在3.1.4节【头部图形化域】,5页。

3.1.2.        Multiboot头部的魔数域

magic’ 域‘magic’是标识这个头的魔数,它必须是十六进制数0x1BADB002

flags   域‘flags’指定OS映像所要求的特性,或对启动载入器的要求。0-15位显示要求;如果启动载入器看到这些比特中有比特被设置,但不能理解这个标 志,或出于某些原因不能满足其代表的要求,它必须通知用户,并且这个OS映像载入失败。16-31位显示可选的特性;如果这个区域内有比特被设置,但启动 载入器不能理解,它可能只是忽略它们,并如常处理。理所当然,所有‘flags’中尚未定义的比特,必须在OS映像中设置为0。这样,‘flags’域, 除了选择简单特性外,还可用于版本控制。

如果‘flags’字中的第0位被设置,那么所有与操作系统一起载入的启动模块必须在页(4KB)边界上对齐。某些操作系统在启动期间,能够直接把包含启动模块的页面映射到一个页对齐的地址,因此要求启动模块页对齐。

如果‘flags’字中的第1位被设置,那么可用内存的信息,至少是Multiboot 消息结构(参考3.3节【启动信息格式】,7页)的 ‘mem_*’ 域,被包括。 如果启动载入器能够传递一个内存映射图(‘mmap_*’域),而且这样的域存在,它也可能被包括。

如果‘flags’字中的第2位被设置,关于视频模式表(参考3.3节【启动信息格式】,7页)的信息必须对内核可用。如果‘flags’字中的第 6位被设置,那么在Multiboot头偏移为12-28处的域有效,启动载入器应该使用它们,而不是在实际可执行头中的域,来计算何处载入OS映像。如 果内核映像是elf格式,这个信息不需要提供,但如果内核是a.out格式或其它格式,则必须提供。兼容的启动载入器必须能载入elf格式的映像,或在 Multiboot头中嵌入载入地址信息的映像;它们可能也直接支持其它可执行格式,比如特定的a.out变体,不过这不要求。

checksum

域‘checksum’是一个32位无符号值,当加上其它魔数域(即,‘magic’及‘flags’)时,其和必须是无符号32

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值