Доброго дня, уважаемые читатели. Начинаем ваять загрузчик для нашей Simple OS.
Последние приготовления
В этой статье мы будем использовать пакет о котором я еще не рассказывал. Этот пакет называется — xorriso. Предназначено данное ПО для создания iso образов. Конечно, его богатый функционал, в рамках специализации, я не буду задействовать полностью. Мне достаточно лишь возможности создавать CD-диск с GRUB.
Для создания загрузочного диска нужно подготовить файлы, создать структуру папок и собрать iso образ.
Настройка GRUB
Структура диска должна быть следующая:
Корневая директория называется — boot. Внутри располагается собранный файл ядра операционной системы и папка — grub, которая содержит специальный конфигурационный файл.
>set timeout=5 set default=0 menuentry "Simple OS" { multiboot2 /boot/kernel.bin boot } menuentry "Test" { multiboot2 /test boot }
Выше показан простейший файл конфигурации grub. Я добавил второй пункт для того, чтобы продемонстрировать работу загрузчика. После сборки iso, перед запуском ядра, на экране отобразится картинка похожая на этот скриншот.
Подготовка загрузчика
Теперь я постараюсь применить те знания, которые получил в предыдущей статье — GRUB и Multiboot. Сначала нужно изменить загрузчик Simple OS так, чтобы он соответствовал спецификации.
section .multiboot_header header_start: dd 0xe85250d6 dd 0 dd header_end - header_start dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start)) dw 0 dw 0 dd 8 header_end: section .text bits 32 global start start: cli mov esp, stack_space done: hlt section .bss resb 8192 stack_space:
Изменения необходимо прокомментировать. Теперь код загрузчика разбит на секции:
- .multiboot_header
- .text
- .bss
В первой секции располагаются данные для инициализации, так называемый заголовок загрузчика. Магическое число — 0xe85250d6 — свидетельствует о приверженности спецификации multiboot 2. (Опять магия!!!). Следующий байт равен 0 и это показывает, что ядро будет запущено в защищенном режиме. О режимах адресации можно прочитать в статье: Бит, байт, адресация. Далее следует размер заголовка и контрольное число. Два этих параметра рассчитываются с помощью адресов меток.
Завершающий тег заголовка — это два слова (16 бит) означающих тип и флаги. В самом конце указан размер завершающего тега тоже в атрибуте размером в машинное слово.
Секция text содержит код старта ядра. В начале указано что теперь ядро работает в 32-битном режиме и отмечена его точка старта директивой — global.
Сборка образа и запуск Simple OS
Проведя все необходимые манипуляции связанные с компиляцией и копированием файлов в необходимые папки заранее подготовленной структуры, необходимо собрать образ. В терминале следует набрать такую команду:
grub-mkrescue -o ./simpleos.iso ./isofiles
На выходе я получил файл simpleos.iso. Команда grub-mkrescue входит в пакет xorriso. Образ готов. Теперь запустим его в эмуляторе с параметром -cdrom
qemu-system-i386 -cdrom simpleos.iso
После выбора операционной системы, ядро запускается в защищенном 32-битном режиме.
Картинки найдены в интернете или являются скриншотами процесса разработки.