# Multiboot2支持模块 — DragonOS dev 文档

# Multiboot2支持模块

Multiboot2支持模块提供对Multiboot2协议的支持。位于`kernel/driver/multiboot2`文件夹中。

根据Multiboot2协议，操作系统能够从BootLoader处获得一些信息，比如基本的硬件信息以及ACPI表的起始地址等。

## 数据结构

`kernel/driver/multiboot2/multiboot2.h`中按照Multiboot2协议的规定，定义了大部分的数据结构，具体细节可查看该文件: DragonOS/multiboot2.h at master · fslongjin/DragonOS · GitHub

## 迭代器

由于Multiboot2的信息存储在自`multiboot2_boot_info_addr`开始的一段连续的内存空间之中，且不同类型的header的长度不同，因此设计了一迭代器`multiboot2_iter`。

### 函数原型

    void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, unsigned int *),
                         void *data, unsigned int *count)

_fun

指定的handler。当某个header的tag与该handler所处理的tag相同时，handler将处理该header，并返回true。

其第一个参数为tag类型，第二个参数为返回的数据的指针，第三个值为计数（某些没有用到该值的地方，该值可以为空）

data

传递给`_fun`的第二个参数，`_fun`函数将填充该指针所指向的内存区域，从而返回数据。

count

当返回的data为一个列表时，通过该值来指示列表中有多少项。

## 迭代工作函数

在模块中，按照我们需要获取不同类型的tag的需要，定义了一些迭代器工作函数。

Other Versions v: V0.1.5

Tags
  V0.1.0
  V0.1.1
  V0.1.10
  V0.1.2
  V0.1.3
  V0.1.4
  V0.1.5
  V0.1.6
  V0.1.7
  V0.1.8
  V0.1.9
  V0.2.0
  V0.3.0
  V0.4.0

Branches
  master