<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Multiboot</id>
	<title>Multiboot - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Multiboot"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Multiboot&amp;action=history"/>
	<updated>2026-04-04T08:06:24Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Multiboot&amp;diff=990&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“'''Multiboot'''多重引导规范是一个开放标准，它为内核提供了一种由兼容Multiboot的引导加载程序引导的统一方式。 多引导规范的参考实现由GRUB提供。  == Multiboot 1 == 最初的Multiboot是由布莱恩·福特和埃里希·斯特凡·博林·1995年创建的。 从那时起，它就已经被自由软件基金会发展和更新。  与Multiboot 1兼容的内核使用幻数0x1BADB002，而与Multiboot兼容的引…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Multiboot&amp;diff=990&amp;oldid=prev"/>
		<updated>2022-03-23T06:18:34Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;#039;&amp;#039;&amp;#039;Multiboot&amp;#039;&amp;#039;&amp;#039;多重引导规范是一个开放标准，它为内核提供了一种由兼容Multiboot的引导加载程序引导的统一方式。 多引导规范的参考实现由&lt;a href=&quot;/index.php?title=GRUB&quot; title=&quot;GRUB&quot;&gt;GRUB&lt;/a&gt;提供。  == Multiboot 1 == 最初的Multiboot是由布莱恩·福特和埃里希·斯特凡·博林·1995年创建的。 从那时起，它就已经被自由软件基金会发展和更新。  与Multiboot 1兼容的内核使用幻数0x1BADB002，而与Multiboot兼容的引…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Multiboot'''多重引导规范是一个开放标准，它为内核提供了一种由兼容Multiboot的引导加载程序引导的统一方式。 多引导规范的参考实现由[[GRUB]]提供。&lt;br /&gt;
&lt;br /&gt;
== Multiboot 1 ==&lt;br /&gt;
最初的Multiboot是由布莱恩·福特和埃里希·斯特凡·博林·1995年创建的。 从那时起，它就已经被自由软件基金会发展和更新。&lt;br /&gt;
&lt;br /&gt;
与Multiboot 1兼容的内核使用幻数0x1BADB002，而与Multiboot兼容的引导加载器使用幻数0x2BADB002报告自身。（译者注：Magic Number这个词实在好多地方有，翻译成幻数，固定数，神奇的数字，魔术编号，魔法数字什么的，都随意吧……）&lt;br /&gt;
&lt;br /&gt;
你可以通过运行 &amp;lt;tt&amp;gt;grub-file&amp;lt;/tt&amp;gt; 来检查程序是否具有有效的Multiboot 1标头，该程序什么也不做，但如果找到标头将退出0，否则将退出1。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;grub-file --is-x86-multiboot myos.bin&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiboot 2 ==&lt;br /&gt;
新的Multiboot规范是为了解决原始规范存在的一些问题而创建的。 它不是向后兼容的，使用不同的结构和不同的幻数。&lt;br /&gt;
&lt;br /&gt;
兼容Multiboot 2的内核使用幻数0xE85250D6，兼容Multiboot的引导加载程序（bootloaders）以幻数0x36D76289报告自己。 在x86上，在调用内核之前，这个幻数存储在EAX中。&lt;br /&gt;
&lt;br /&gt;
你可以通过运行&amp;lt;tt&amp;gt;grub-file&amp;lt;/tt&amp;gt;来检查程序是否具有有效的Multiboot 2标头，&amp;lt;tt&amp;gt;grub-file&amp;lt;/tt&amp;gt;也什么都不做，但如果找到标头将退出0，否则将退出1。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;grub-file --is-x86-multiboot2 myos.bin&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
注意：对于elf64，GNU LD的默认页面大小为0x00200000，这将导致multiboot2测试失败。 你可以使用“-z max-page-size=SIZE”来解决这个问题。&lt;br /&gt;
&lt;br /&gt;
GNU GRUB与Multiboot2规范的版本2.02兼容。&lt;br /&gt;
&lt;br /&gt;
=== 标头格式 ===&lt;br /&gt;
&lt;br /&gt;
Multiboot2头的第一部分是一个在8字节边界上对齐的结构，其中包含四个“魔术”32位整数。 这些字段分别包含魔术编号0xE85250D6，描述体系结构的标志，包括后续标签的标头总长度以及魔术字段的校验和。&lt;br /&gt;
&lt;br /&gt;
标题中的魔法字段后面是一个8字节对齐结构列表，在规范中称为&amp;lt;tt&amp;gt;tags（标签）&amp;lt;/tt&amp;gt;。 Bootloader使用这些标签作为提示，以提供有关内核映像的信息，并请求它在引导信息结构中提供附加信息。&lt;br /&gt;
&lt;br /&gt;
可用标签及其结构因平台而异，并在Multiboot2规范中进行了记录。 最新草案见下文[[#外部链接]]。 此标签列表必须以类型为0且大小为8的标签结尾。&lt;br /&gt;
&lt;br /&gt;
=== 信息结构 ===&lt;br /&gt;
&lt;br /&gt;
与Multiboot2兼容的引导加载程序提供了内核启动时的信息格式[https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Boot-information-format 信息结构]。 在x86上，物理指针存储在EBX中。 此信息结构是8字节对齐的，并且包含标签。 这些标签可能包含有关系统的有用信息， 例如：[https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Memory-map the memory map]、[https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#ELF_002dSymbols elf sections of the image]和有关帧缓冲区的[https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Framebuffer-info framebuffer相关信息]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct multiboot_tag {&lt;br /&gt;
    uint32_t type;&lt;br /&gt;
    uint32_t size;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct multiboot_info {&lt;br /&gt;
    uint32_t total_size;&lt;br /&gt;
    uint32_t reserved;&lt;br /&gt;
    struct multiboot_tag tags[0];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Multiboot 2模块 ==&lt;br /&gt;
（请注意，本节可能不是100%准确，有待测试。）&lt;br /&gt;
&lt;br /&gt;
Multiboot2规范支持引导模块，引导模块是引导加载程序引导内核时加载到内存中的数据片段。 通常，这些只是驻留在引导介质上的文件，这些文件由引导加载程序加载，但是确切的实现取决于引导加载程序。 对于GRUB，在引导内核之前，使用“module2”命令加载这些模块。 &lt;br /&gt;
&lt;br /&gt;
内核引导后，你可以使用多重引导信息结构体（multiboot information structure）来定位和识别这些模块。 请注意，在GRUB的情况下，模块的字符串还将包含模块名称之后的文本，例如，如果你使用 “module video 1024x768” 加载模块，则该模块结构的字符串字段将包含 “video 1024x768”。 通过这种方式，可以在加载模块时为模块指定“参数”。（这似乎是multiboot规范的预期行为。）&lt;br /&gt;
&lt;br /&gt;
GRUB可以支持在加载模块之前对其进行解压缩，这似乎是由文件扩展名驱动的。&lt;br /&gt;
&lt;br /&gt;
== 放置Multiboot结构体 ==&lt;br /&gt;
&lt;br /&gt;
如前所述，结构必须是8字节对齐的，并放置在可执行文件的前8K中。 要确保这一点，最简单的解决方案是为具有attribute的结构体创建一个新节（section）：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct multiboot_header {&lt;br /&gt;
  ...&lt;br /&gt;
} __attribute__((section(&amp;quot;.multiboot&amp;quot;)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
然后告诉 [[Linker Scripts|链接器脚本]]中的 [[LD|链接器]] 以正确对齐方式启动此节的文件:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
.text: {&lt;br /&gt;
  /* 在此处链接多引导结构 */&lt;br /&gt;
  . = ALIGN(8);&lt;br /&gt;
  KEEP(*(.multiboot))&lt;br /&gt;
  /* 之后放置所有代码 */&lt;br /&gt;
  *(.text)&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
关键字ALIGN保证对齐，KEEP告诉链接器将该部分保留在文本段（text segment）的开头。&lt;br /&gt;
&lt;br /&gt;
== 另见 ==&lt;br /&gt;
===文章===&lt;br /&gt;
* [[GRUB]]&lt;br /&gt;
&lt;br /&gt;
=== 论坛文章 ===&lt;br /&gt;
* [[Topic:22481|Multiboot 2 Header layout]]&lt;br /&gt;
&lt;br /&gt;
===外部链接===&lt;br /&gt;
* [https://www.gnu.org/software/grub/manual/multiboot/multiboot.html Latest Multiboot 1 specification (HTML)]&lt;br /&gt;
* [http://git.savannah.gnu.org/cgit/grub.git/tree/doc/multiboot.texi?h=multiboot Latest Multiboot 1 specification]&lt;br /&gt;
* [https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html Latest Multiboot 2 specification (HTML)]&lt;br /&gt;
* [http://git.savannah.gnu.org/cgit/grub.git/tree/doc/multiboot.texi?h=multiboot2 Latest Multiboot 2 specification]&lt;br /&gt;
* [http://web.archive.org/web/*/http://grub.enbug.org/MultibootDraft Old Multiboot 2 drafts]&lt;br /&gt;
* [http://git.savannah.gnu.org/cgit/grub.git/tree/doc/multiboot.h?h=multiboot Multiboot 1 header file]&lt;br /&gt;
* [http://git.savannah.gnu.org/cgit/grub.git/tree/doc/multiboot2.h?h=multiboot2 Multiboot 2 header file]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootloaders]]&lt;br /&gt;
[[de:Multiboot]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>