Многозагрузочная спецификация

Многозагрузочная спецификация описывает интерфейс между любым потенциальным загрузчиком и любой потенциальной операционной системой. Многозагрузочная спецификация не указывает, как должен работать загрузчик, а только указывает интерфейс для работы с загружаемой операционной системой. Текущая цель - это архитектура х86 и свободные 32-битовые операционные системы, для которых предусматривается стандарт передачи конфигурационной информации из загрузчика в операционную систему. Образ ОС может быть любого типа (ELF или специального), но должен содержать многозагрузочный заголовок (multiboot header) в первых 8 Кб образа вместе с магическим числом QxlBADB002. Многозагрузочный загрузчик должен предоставлять и метод для вспомогательных загрузочных модулей или драйверов, используемых некоторыми ОС во время загрузки, так как эти ОС не загружают все необходимое для работы в загрузочный образ ждра. Обычно так поступают модульные загрузочные ядра, для того чтобы размер загрузочного ядра не выходил за разумные пределы.
Многозагрузочная спецификация диктует, что, когда загрузчик вызывает ОС, система должна находиться в специальном 32-битовом реальном режиме, для того чтобы ОС могла выполнять обратные вызовы из BIOS. И наконец, загрузчик должен предоставить ОС структуры данных, заполненные основными машинными данными. Далее мы рассмотрим структуры данных с многозагрузочной информацией.

typedef struct multiboot_infо {
slong flags; // описывает следующие поля
-.ilong mem_lower; // если flags[0], количество памяти < 1М
ulong mem_upper; // если flags[0], количество памяти > 1М
-.ilong boot_device; // если flags[l], диск, parti, 2, 3
-.ilong cmdline; // если flags [2], адрес командной строки
ulong mods_count; // если flags[3], # загрузочного модуля
:ilong mods_addr; // если flags[3], адрес первого загрузочного модуля

aout_symbol_table_t aout_sym; // если flags[4], таблица символов
//из a.out образа ядра elf_section_header_table_telf_sec; //если£ lags [5] , заголовок
//из ELF ядра
; и,"
-long mmap_length; // если flags[6],BIOS длина отображения в память ulong mmap_addr; // если flags[6], адрес отображения BIOS -.ilong drives_length; // если flags[7], информационная структура
// диска BIOS
--long drives_length; // если flags[7], первая информационная
// структура BIOS.
ulong config_table // если flags[8],настроечная таблица ROM
ulong boot_loader_name // если flags[9],адрес строки
ulong apm_table // если flags[10],адрес информационной таблицы АРМ
ulong vbe_control_infо // если flags[11],настройка видеорежима
ulong vbe_mode_infо
ulong vbe_mode
ulong vbe_interface_seg
ulong vbe_interface_off
ulong vbe_interface_len
};

Указатель на эту структуру передается в ЕВХ, когда управление передается ОС. Первое поле, flags указывает, какие из следующих полей верны. Неиспользуемые поля должны иметь значение 0. Вы можете подробнее изучить Многозагрузочную спецификацию по адресу www.gnu.org/software/grub/manual/multiboot/multi-boot.html.